7

scipy.stats.linregress が正しくない標準エラーを返しているように見えるという奇妙な状況があります。

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

一方、Excel は次を返します。

 slope: 5.394

 intercept: -16.281

 rsq: 0.525

 steyX: 11.696

steyX は Excel の標準エラー関数で、scipy の 3.63 に対して 11.696 を返します。ここで何が起こっているか知っている人はいますか?Rpy に行かずに、Pythonで回帰の標準誤差を取得する別の方法はありますか?

4

5 に答える 5

8

SciPy ユーザー グループから、ここの std_err は Excel のように予測された y の標準誤差ではなく、勾配線の標準誤差を表していると通知されました。それにもかかわらず、この関数のユーザーは注意が必要です。なぜなら、これは常にこのライブラリの動作であるとは限らないためです。以前は Excel とまったく同じように出力されていましたが、切り替えは過去数か月で発生したようです。

とにかく、まだ Python の STEYX に相当するものを探しています。

于 2010-01-10T22:15:07.843 に答える
6

statsmodelsパッケージを試すことができます:

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
于 2010-01-11T05:36:16.650 に答える
2

はい、これは本当です - 勾配の標準推定値は、linregress が返すものです。ただし、推定値の標準推定値 (Y) は関連しており、linregress が与える勾配の標準誤差 (SEG) を掛けることで SEE に戻すことができます: SEG = SEE / sqrt( (X - 平均の合計) X)**2)

Stack Exchange は latex を処理しませんが、興味がある場合は、「サンプル データの分析」という見出しの下に数学があります。

于 2018-02-06T18:34:06.043 に答える