2010-01-10 14 views
7

Ben scipy.stats.linregress ile garip bir durum, yanlış bir standart hata döndüren gibi görünüyor vardır: Excel Oysascipy linregress işlevi hatalı standart hata dönüşü mü?

from scipy import stats 
x = [5.05, 6.75, 3.21, 2.66] 
y = [1.65, 26.5, -5.93, 7.96] 
gradient, intercept, r_value, p_value, std_err = stats.linregress(x,y) 
>>> gradient 
5.3935773611970186 
>>> intercept 
-16.281127993087829 
>>> r_value 
0.72443514211849758 
>>> r_value**2 
0.52480627513624778 
>>> std_err 
3.6290901222878866 

aşağıdaki verir:

slope: 5.394 

intercept: -16.281 

rsq: 0.525 

steyX: 11.696 

STEYX dönen, Excel'in standart hata fonksiyonudur Scully'nin 3.63'e karşı 11.696. Burada neler olduğunu bilen var mı? Python, Rpy gitmeden bir regresyon standart hatası almanın herhangi bir alternatif yolu?

cevap

4

Sen statsmodels paketini deneyebilirsiniz:

In [37]: import statsmodels.api as sm 

In [38]: x = [5.05, 6.75, 3.21, 2.66] 

In [39]: y = [1.65, 26.5, -5.93, 7.96] 

In [40]: X = sm.add_constant(x) # intercept 

In [41]: model = sm.OLS(y, X) 

In [42]: fit = model.fit() 

In [43]: fit.params 
Out[43]: array([ 5.39357736, -16.28112799]) 

In [44]: fit.rsquared 
Out[44]: 0.52480627513624789 

In [45]: np.sqrt(fit.mse_resid) 
Out[45]: 11.696414461570097 
+0

Parlak. Teşekkürler ars. Tam olarak ihtiyacım olan şey. –

+0

Yardım etmekten memnun oldum. :) – ars

8

Sadece SciPy kullanıcı grubu tarafından, std_err'nin, Excel'e göre tahmin edilen y'lerin standart hatası değil, degrade çizgisinin standart hatasını temsil ettiği konusunda bilgilendirildim. Bununla birlikte, bu işlevin kullanıcıları dikkatli olmalıdır, çünkü bu her zaman bu kütüphanenin davranışı değildi - Excel olarak tam olarak çıktı ve geçiş son birkaç ay içinde gerçekleşmiş gibi görünüyordu. Her neyse hala Python'da STEYX'e eşdeğer bir değer arıyordur.

1

evet bu doğrudur - gradyan standart tahmin döner linregress şeydir; tahminin standart tahmini (Y) ile ilişkilidir, ve SEE'ye girdiğiniz geçişin standart hatasını (SEG) çarparak SEE'ye geri dönebilirsiniz: SEG = SEE/sqrt ((X - ortalama) X) ** 2)

Yığın Exchange lateks işlemez, ancak "Örnek Verileri Analiz Et" başlığının altında, ilgileniyorsanız matematik here olur.

İlgili konular