使用小型 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
数据集的头部和尾部是相同的*,也是重量和时间的平均值、最小值、最大值、中值。
看起来“饮食”在 statsmodels 调用中只有一个自由度,这意味着它可能被视为连续变量,而在 R 中它有 3 个自由度,因此它可能是一个因子/离散随机变量。
要使 ols() 将“饮食”视为分类随机变量,请使用
cw_lm=ols('weight ~ C(Diet) + Time', data=cw).fit()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)