我正在用Python测试负二项回归。我用R找到了这个例子,还有一个数据集:
http://www.karlin.mff.cuni.cz/~pesta/NMFM404/NB.html
我尝试使用以下代码在网页上复制结果:
import pandas as pd
import statsmodels.formula.api as smf
import statsmodels.api as sm
df = pd.read_stata("http://www.karlin.mff.cuni.cz/~pesta/prednasky/NMFM404/Data/nb_data.dta")
model = smf.glm(formula = "daysabs ~ math + prog", data=df, family=sm.families.NegativeBinomial()).fit()
model.summary()
不幸的是,这并没有给出相同的系数。它给出了以下内容:
^{pr2}$这些甚至与网站上的不太接近。假设R代码是正确的,我做错了什么?在
产生这种差异的原因是,在使用Pandas读取数据集时,
prog
变量默认被视为float
类型:另一方面,在R示例中,
^{pr2}$prog
变量显式转换为因子(分类)变量:因此,当您查看R中的fit摘要时,您可以看到
prog
变量已被拆分为n-1个二进制编码项:将这与您发布的Python fit摘要中
prog
变量的显示方式进行比较。在要解决这个问题,可以在statsmodels中使用^{} function 将变量强制转换为category。这样,您将得到相同的结果:
相关问题 更多 >
编程相关推荐