我有一个 Dataframe ,看起来像这样:
我正在运行一个以流体为因变量的logit模型,不包括vp
和perip
:
model = smf.logit('''fluid ~ C(examq3_n, Treatment(reference = 2.0)) + C(pmhq3_n) + C(fluidq3_n) + C(mapq3_n, Treatment(reference = 3.0)) +
C(examq6_n, Treatment(reference = 2.0)) + C(pmhq6_n) + C(fluidq6_n) + C(mapq6_n, Treatment(reference = 3.0)) +
+ C(case, Treatment(reference = 2))''',
data = case1_2_vars).fit()
print(model.summary())
我得到以下结果:
我想知道我是否需要向数据中添加一个常量,如果是的话,怎么做?我试过向名为const
的 Dataframe 中添加一个列,它等于1
,但是当我把const
加到logit方程中时,我得到LinAlgError: Singular Matrix,
,我不I don’我不知道如何用smf.add_constant()
相加,因为我必须在等式中指定分类变量及其各自的参考编号,而不是分别定义x
和y
并简单地将它们输入到smf.logit()
调用中。
我的问题是:a)我是否需要添加一个常数,以及B)如何添加?网上有一些链接似乎暗示它可能不需要基于分类变量的logit模型,但如果它是最佳实践,我宁愿这样做。
我还想知道,statmodels是否自动包含一个常量?因为Intercept
列在结果中。
1条答案
按热度按时间gorkyyrv1#
如果使用公式,则patsy的公式处理会自动添加常数/截距。
(when使用例如
smf.logit
或sm.Logit.from_formula
)如果你使用numpy数组或pandas DataFrame创建一个没有公式的模型,那么
exog
不会被statmodels改变,也就是说,用户需要自己添加一个常量。助手函数是sm.add_constant
,它向数组或DataFrame添加一列1。(when使用例如
sm.Logit(y, x)
)