Kovaryans matrisini eğri uyumundan nasıl yorumlayabilirim?


15

İstatistiklerde çok iyi değilim, bu basit bir soru ise özür dilerim. Bazı verilere bir eğri uydurma ediyorum ve bazen benim verilerini en uygun biçimde olumsuz üssünü ve bazen uyum yakın olan bir * e ( - b * x 2 ) + c . Ancak, bazen her ikisi de başarısız olur ve ben doğrusal bir uyum için geri dönmek istiyorum. Benim sorum, hangi modelin belirli bir veri setine uyduğunu nasıl belirtebilirim?ae(bx)+cae(bx2)+cscipy.optimize.curve_fit () işlevi? Varyansın bu matrisin köşegenlerinden birinde olduğuna inanıyorum, ancak bunu nasıl yorumlayacağımdan emin değilim.

GÜNCELLEME: Benzer bir soruya dayanarak , varyans-kovaryans matrisinin bana hangi üç modelden hangisinin verilere uyduğunu söyleyebileceğini umuyorum (birçok veri kümesini bu üç modelden birine sığdırmaya çalışıyorum).

Ortaya çıkan matrisler verilen örnek için şu şekildedir:

pcov_lin 
[[  2.02186921e-05  -2.02186920e-04]
 [ -2.02186920e-04   2.76322124e-03]]
pcov_exp
[[  9.05390292e+00  -7.76201283e-02  -9.20475334e+00]
 [ -7.76201283e-02   6.69727245e-04   7.90218415e-02]
 [ -9.20475334e+00   7.90218415e-02   9.36160310e+00]]
pcov_exp_2 
[[  1.38338049e-03  -7.39204594e-07  -7.81208814e-04]
 [ -7.39204594e-07   8.99295434e-09   1.92970700e-06]
 [ -7.81208814e-04   1.92970700e-06   9.14746758e-04]]

İşte ne yaptığım bir örnek:

import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
import scipy.optimize

def exp_func(x, a, b, c):
    return a * np.exp(-b * x) + c

def exp_squared_func(x, a, b, c):
    return a * np.exp(-b * x*x*x) + c

def linear_func(x, a, b):
    return a*x + b

def main():
    x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], np.float)
    y = np.array([1, 1, 1, 1, 0.805621, 0.798992, 0.84231, 0.728796, 0.819471, 0.570414, 0.355124, 0.276447, 0.159058, 0.0762189, 0.0167807, 0.0118647, 0.000319948, 0.00118267, 0, 0, 0], np.float)

    p0 = [0.7746042467213462, 0.10347274384077858, -0.016253458007293588]
    popt_lin, pcov_lin      = scipy.optimize.curve_fit(linear_func, x, y)
    popt_exp, pcov_exp      = scipy.optimize.curve_fit(exp_func, x, y)
    popt_exp_2, pcov_exp_2  = scipy.optimize.curve_fit(exp_squared_func, x, y)

    plt.figure()
    plt.plot(x, y, 'ko', label="Original data")
    plt.plot(x, linear_func(x, *popt_lin), 'r-', label='linear')
    plt.plot(x, exp_func(x, *popt_exp), 'b-', label='exponential')
    plt.plot(x, exp_squared_func(x, *popt_exp_2), 'g-', label='exponential squared')
    plt.legend()
    plt.show()

if __name__ == '__main__':
    main()

Bu CV sorusuna ve sonuç olarak, model post facto'yu fit'e göre seçmenin uygun olup olmadığını sorgulayan önemli yorum dizisine (b / w rolando2, Frank Harrell, ...) bağlantı vermeniz harika. Belki de modeli seçmek için sistem hakkında önceden bilgi sahibi olmak daha iyidir.
Aman

CV ile ilgili bu diğer soru yardımcı olabilir: stats.stackexchange.com/questions/50830/…
Aman

Bu, eş-varyans matris istatistiklerinin nasıl yorumlanacağını anlamak için yardımcı olabilir mi.stackexchange.com/questions/10795/… - Üçüncü modellerin değerinin daha küçük olduğunu ve daha az sapmayı gösterdiğini söyleyebilirim.
user4581

Yanıtlar:


4

Bir açıklama olarak, değişken pcovgelen scipy.optimize.curve_fitgevşek konuşan parametre tahmininin, tahmini kovaryans veri verilmiş olduğu ve bir model verilmiş modelde bir parametrenin değerini belirlemek için verilerdeki ne kadar bilgi yoktur. Dolayısıyla, seçilen modelin iyi olup olmadığını size söylemez. Ayrıca bkz bu .

İyi bir model olan sorun gerçekten zor bir sorundur. İstatistikçilerin savunduğu gibi

Tüm modeller yanlış, ancak bazıları faydalı

Dolayısıyla, farklı modellerin karşılaştırılmasında kullanılacak kriterler, neyi başarmak istediğinize bağlıdır.

Örneğin, verilere "mümkün olduğunca yakın" olan bir eğri istiyorsanız, en küçük kalıntıyı veren bir model seçebilirsiniz . Sizin durumunuzda func, hesaplama poptsırasında en düşük değere sahip model ve tahmini parametreler olacaktır

numpy.linalg.norm(y-func(x, *popt))

Bununla birlikte, daha fazla parametreye sahip bir model seçerseniz , daha yüksek model karmaşıklığı pahasına kalan artık otomatik olarak azalacaktır . Böylece modelin amacının ne olduğu ortaya çıkıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.