【发布时间】:2015-09-04 11:54:54
【问题描述】:
使用 pandas 数据框进行线性回归的推荐方法是什么(如果有)?我可以做到,但我的方法似乎很复杂。我是否让事情变得不必要的复杂?
R 代码,用于比较:
x <- c(1,2,3,4,5)
y <- c(2,1,3,5,4)
M <- lm(y~x)
summary(M)$coefficients
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.6 1.1489125 0.522233 0.6376181
x 0.8 0.3464102 2.309401 0.1040880
现在,我的 python (2.7.10)、rpy2 (2.6.0) 和 pandas (0.16.1) 版本:
import pandas
import pandas.rpy.common as common
from rpy2 import robjects
from rpy2.robjects.packages import importr
base = importr('base')
stats = importr('stats')
dataframe = pandas.DataFrame({'x': [1,2,3,4,5],
'y': [2,1,3,5,4]})
robjects.globalenv['dataframe']\
= common.convert_to_r_dataframe(dataframe)
M = stats.lm('y~x', data=base.as_symbol('dataframe'))
print(base.summary(M).rx2('coefficients'))
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.6 1.1489125 0.522233 0.6376181
x 0.8 0.3464102 2.309401 0.1040880
顺便说一句,我确实收到了关于 pandas.rpy.common 导入的 FutureWarning。但是,当我尝试使用 pandas2ri.py2ri(dataframe) 将数据帧从 pandas 转换为 R 时(如 here 所述),我得到了
NotImplementedError: Conversion 'py2ri' not defined for objects of type '<class 'pandas.core.series.Series'>'
【问题讨论】:
-
你使用的是什么版本的
rpy2? -
我已更新我的问题以添加此信息。
-
我在数据帧转换方面遇到了类似的问题,但我不得不使用非 rpy2 函数。原来你必须在调用
pandas2ri.py2ri(dataframe)之前执行pandas2ri.activate()