我正在使用 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:
如果我直接从 RI 加载数据集,则不会出现错误:
from rpy2.robjects import r
r.data('engel')
data = r['engel']
qreg = quantreg.rq('foodexp ~ income', data=data, tau=0.5)
所以我认为使用pandas2ri
. 当我尝试使用手动将 DataFrame 转换为 data.frame 时,也会发生同样的错误pandas2ri.py2ri
。
编辑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
也得到了确认。