运行 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
我正在尝试在 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