运行 python 中方差分析的 R 代码时出错

Error when running R code for anova in python

我正在尝试在 python 中使用方差分析,但在 rpy2 包的帮助下使用 R 代码。在下面,code stats.lm() 有效但 stats.aov()

无效
import pandas as pd
from rpy2 import robjects as ro
from rpy2.robjects import pandas2ri
pandas2ri.activate()
from rpy2.robjects.packages import importr

stats = importr('stats')
R = ro.r

df = pd.DataFrame(data={
    'subject':['1','2','3','4','5','1','2','3','4','5'],
    'group':['1','1','1','2','2','1','1','1','2','2'],
    'session':['1','1','1','1','1','2','2','2','2','2'],
    'covar':['1', '2', '0', '2', '1', '1', '2', '0', '2', '1'],
    'result':[-6.77,6.11,5.67,-7.679,-0.0930,0.948,2.99,6.93,6.30,9.98]
})

rdf = ro.conversion.py2rpy(df)
result = stats.lm('covar ~ group*session', data=rdf)
print(R.summary(result).rx2('coefficients'))

result2 = stats.aov('covar ~ group*session', data=rdf)

我遇到了这个错误。

"Error: $ operator is invalid for atomic vectors"

提前致谢

错误是由于将字符串公式传递给 stats.aov 而不是公式对象。考虑使用 stats 包的 as.formula(在 rpy2 中转换为 as_formula)来转换字符串公式或使用 reformulate 来构建带有字符串参数的字符串:

results = stats.aov(stats.as_formula("covar ~ group*session"), data=df)
print(R.summary(results))

results = stats.aov(stats.reformulate("group*session", "covar"), data=df)
print(R.summary(results))

#               Df Sum Sq Mean Sq F value Pr(>F)
#
# group          1    0.6  0.6000    0.72  0.429
# 
# session        1    0.0  0.0000    0.00  1.000
# 
# group:session  1    0.0  0.0000    0.00  1.000
# 
# Residuals      6    5.0  0.8333