【问题标题】:Error when running R code for anova in python在 python 中为 anova 运行 R 代码时出错
【发布时间】:2021-05-18 16:50:21
【问题描述】:

我正在尝试在 python 中使用 ANOVA,但在 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)

我收到此错误。

“错误:$ 运算符对原子向量无效”

提前致谢

【问题讨论】:

    标签: python r anova rpy2


    【解决方案1】:

    错误是由于将字符串公式传递给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
    

    【讨论】:

    • 非常感谢,解答了我的疑惑
    • 除了 rpy2 文档之外,我还有什么方法可以阅读和理解更多关于 rpy2 的信息吗?
    • 我一无所知,因为rpy2 是一个 Python 包。但实际上,您的问题是 R 错误。由于您已经安装了 R,因此请始终在那里测试代码以进行调试。
    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2015-05-08
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2015-08-02
    相关资源
    最近更新 更多