食い違いの理由は、あなたがパンダとのデータセットで読んでいるとき、prog
変数は、デフォルトではタイプfloat
として扱われていることである。一方、Rの例では
df.prog.head()
0 2.0
1 2.0
2 2.0
3 2.0
4 2.0
Name: prog, dtype: float32
、 prog
変数が明示的因子(カテゴリ)変数にキャストした結果
dat <- within(dat, {
prog <- factor(prog, levels = 1:3, labels = c("General", "Academic", "Vocational"))
id <- factor(id)
})
あなたがRでフィット要約を見たとき、あなたはprog
変数が分割されていることがわかりますN-1のバイナリエンコードされた条件に:
> summary(m1 <- glm.nb(daysabs ~ math + prog, data = dat))
Call:
glm.nb(formula = daysabs ~ math + prog, data = dat, init.theta = 1.032713156,
link = log)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.1547 -1.0192 -0.3694 0.2285 2.5273
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 2.615265 0.197460 13.245 < 2e-16 ***
math -0.005993 0.002505 -2.392 0.0167 *
progAcademic -0.440760 0.182610 -2.414 0.0158 *
progVocational -1.278651 0.200720 -6.370 1.89e-10 ***
はprog
変数はあなたが投稿Pythonのフィット要約に表示されますどのようにこれを比較してください。
問題を修正するには、C()
functionを使用して変数をstatsmodelsのカテゴリにキャストすることができます。あなたは同じ結果に到着します:
model = smf.glm(formula = "daysabs ~ math + C(prog)", data=df, family=sm.families.NegativeBinomial()).fit()
model.summary()
<class 'statsmodels.iolib.summary.Summary'>
"""
Generalized Linear Model Regression Results
==============================================================================
Dep. Variable: daysabs No. Observations: 314
Model: GLM Df Residuals: 310
Model Family: NegativeBinomial Df Model: 3
Link Function: log Scale: 1.06830885199
Method: IRLS Log-Likelihood: -865.68
Date: Thu, 16 Feb 2017 Deviance: 350.98
Time: 10:34:16 Pearson chi2: 331.
No. Iterations: 6
==================================================================================
coef std err z P>|z| [0.025 0.975]
----------------------------------------------------------------------------------
Intercept 2.6150 0.207 12.630 0.000 2.209 3.021
C(prog)[T.2.0] -0.4408 0.192 -2.302 0.021 -0.816 -0.065
C(prog)[T.3.0] -1.2786 0.210 -6.079 0.000 -1.691 -0.866
math -0.0060 0.003 -2.281 0.023 -0.011 -0.001
==================================================================================
"""
Aha !! Vクール - ありがとう! –
結果は近づいていますが、それでもまったく同じではありません。切片の係数は2.6150であり、これは2.61526である。私はこれが心配するものではないと思うが、わずかな違いの理由は何だろうか? –
注意:統計モデルGLMは、負の2項数に対して1に等しい尺度を固定しません。したがって、統計モデルはデフォルトでGLMのQuasi-NegativeBinomialになるため、標準エラーはRと異なる場合があります。私はこれがバグかstatsmodelsの機能(https://github.com/statsmodels/statsmodels/issues/2888)か分かりません。 – user333700