为什么R和statsmodels给出的方差分析结果略有不同?

为什么R和statsmodels给出的方差分析结果略有不同?,r,pandas,statsmodels,anova,R,Pandas,Statsmodels,Anova,使用一个小的R样本数据集和来自的ANOVA示例,其中一个变量的自由度报告不同,F值结果也略有不同。也许他们的默认方法略有不同?我可以设置statsmodels以使用R的默认值吗 import pandas as pd import statsmodels.api as sm from statsmodels.formula.api import ols ##R code on R sample dataset #> anova(with(ChickWeight, lm(weight

使用一个小的R样本数据集和来自的ANOVA示例,其中一个变量的自由度报告不同,F值结果也略有不同。也许他们的默认方法略有不同?我可以设置statsmodels以使用R的默认值吗

import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols


##R code on R sample dataset

#> anova(with(ChickWeight, lm(weight ~ Time + Diet)))
#Analysis of Variance Table
#
#Response: weight
#           Df  Sum Sq Mean Sq  F value    Pr(>F)
#Time        1 2042344 2042344 1576.460 < 2.2e-16 ***
#Diet        3  129876   43292   33.417 < 2.2e-16 ***
#Residuals 573  742336    1296
#write.csv(file='ChickWeight.csv', x=ChickWeight, row.names=F)

cw = pd.read_csv('ChickWeight.csv')
cw_lm=ols('weight ~ Time + Diet', data=cw).fit()   

print(sm.stats.anova_lm(cw_lm, typ=2))
#                  sum_sq   df            F         PR(>F)
#Time      2024187.608511    1  1523.368567  9.008821e-164
#Diet       108176.538530    1    81.411791   2.730843e-18
#Residual   764035.638024  575          NaN            NaN
将熊猫作为pd导入
将statsmodels.api作为sm导入
从statsmodels.formula.api导入ols
##R样本数据集上的R代码
#>方差分析(含鸡重、lm(体重~时间+饮食)))
#方差表分析
#
#回答:体重
#Df和Sq平均Sq F值Pr(>F)
#时间1 2042344 2042344 1576.460<2.2e-16***
#饮食3 129876 43292 33.417<2.2e-16***
#残差5737423361296
#write.csv(file='ChickWeight.csv',x=ChickWeight,row.names=F)
cw=pd.read\u csv('ChickWeight.csv'))
cw_lm=ols('weight~Time+Diet',data=cw).fit()
打印(sm.stats.anova_lm(cw_lm,典型值=2))
#总面积(平方英尺)
#时间2024187.608511 1523.368567 9.008821e-164
#饮食108176.538530 1 81.411791 2.730843e-18
#剩余764035.638024 575楠楠楠
数据集的头和尾是相同的*,还有平均值、最小值、最大值、体重和时间的中位数。

看起来“饮食”在statsmodels调用中只有一个自由度,这意味着它可能被视为一个连续变量,而在R中它有3个自由度,因此它可能是一个因子/离散随机变量

要使ols()将“饮食”视为一个分类随机变量,请使用

cw_lm=ols('weight ~ C(Diet) + Time', data=cw).fit()

本例使用了哪些版本的statsmodels和pandas?我从pandas 0.18.0的anova_lm函数中得到一个错误,statsmodels 0.6.1刚刚检查了我当前的系统;pandas 0.17.1,statsmodels 0.6.1,必须重新安装patsy,但一切正常。谢谢检查。我意识到我遇到了问题,因为我的设计矩阵缺少值。