【发布时间】:2016-01-01 23:14:52
【问题描述】:
我正在使用 rpy2 (2.7.6) 对 engel 数据集进行分位数回归:
import statsmodels as sm
from rpy2.robjects.packages import importr
from rpy2.robjects import pandas2ri
pandas2ri.activate()
quantreg = importr('quantreg')
data = sm.datasets.engel.load_pandas().data
qreg = quantreg.rq('foodexp ~ income', data=data, tau=0.5)
但是这会产生以下错误:
qreg = quantreg.rq('foodexp ~ income', data=data, tau=0.5)
Traceback (most recent call last):
File "<ipython-input-22-02ee1015737c>", line 1, in <module>
quantreg.rq('foodexp ~ income', data=data, tau=0.5)
File "C:\Anaconda\lib\site-packages\rpy2\robjects\functions.py", line 178, in __call__
return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
File "C:\Anaconda\lib\site-packages\rpy2\robjects\functions.py", line 106, in __call__
res = super(Function, self).__call__(*new_args, **new_kwargs)
RRuntimeError: Error in y - x %*% z$coef : non-conformable arrays
据我了解,在这种情况下,不一致的数组意味着存在一些缺失值或使用的“数组”大小不同。我可以确认情况并非如此:
data.count()
Out[26]:
income 235
foodexp 235
dtype: int64
data.shape
Out[27]: (235, 2)
这个错误还有什么意思? rpy2中从DataFrame到data.frame的转换是否可能无法正常工作,或者我在这里遗漏了什么?其他人可以确认这个错误吗?
以防万一这里有一些关于 R 和 Python 版本的信息。
R version 3.2.0 (2015-04-16) -- "Full of Ingredients"
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
Python 2.7.11 |Anaconda 2.3.0 (64-bit)| (default, Dec 7 2015, 14:10:42) [MSC v.1500 64 bit (AMD64)]
on win32
任何帮助将不胜感激。
编辑 1:
如果我直接从 R 加载数据集,我不会收到错误:
from rpy2.robjects import r
r.data('engel')
data = r['engel']
qreg = quantreg.rq('foodexp ~ income', data=data, tau=0.5)
所以我认为pandas2ri 的转换有问题。当我尝试使用 pandas2ri.py2ri 手动将 DataFrame 转换为 data.frame 时,也会出现同样的错误。
编辑 2:
有趣的是,如果我使用已弃用的pandas.rpy.common.convert_to_r_dataframe,错误就消失了:
import pandas.rpy.common as com
rdata = com.convert_to_r_dataframe(data)
qreg = quantreg.rq('foodexp ~ income', data=rdata, tau=0.5)
pandas2ri 中肯定存在错误,here 也已确认。
【问题讨论】:
-
从 R 的角度来看,我帮不上什么忙,因为我从
rq('foodexp ~ income', data=engel, tau=0.5)得到了预期的结果。我想知道您是否真的将engel数据集替换到 R 环境中。 -
如果你在 R 中做所有事情,它会起作用吗?如果是这样,那么问题可能在于从 pandas 到 R 的转换。
-
@BrenBarn 如果我在 R 中执行所有操作,我不会收到错误消息。我还可以通过在 Python 中直接从 R 加载数据集来确认
pandas2ri转换一定有问题(请参阅编辑)。 -
在 rpy2 的 bitbucket 页面上归档为 bug。
标签: python r pandas rpy2 quantreg