我正在用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)
但是,这会产生以下错误:
^{pr2}$据我所知,在这种情况下,不一致数组意味着有一些丢失的值,或者使用的数组大小不同。我可以确认事实并非如此:
data.count()
Out[26]:
income 235
foodexp 235
dtype: int64
data.shape
Out[27]: (235, 2)
这个错误还意味着什么?是否有可能将数据帧转换为数据帧在rpy2中工作不正常或者我在这里遗漏了什么?其他人能确认这个错误吗?在
以防万一,这里有一些关于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
任何帮助都将不胜感激。在
如果直接从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
。在
有趣的是,如果我使用了不推荐使用的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
中肯定有一个bug,这个bug也得到了here的确认。在
正如在rpy2 issue tracker上回答的:
问题的根源似乎是pandas数据帧中的列被转换为数组对象,每个对象只有一列。在
区别很微妙,但这似乎混淆了
quantreg
包。还有其他的R函数似乎独立于对象是一个有一列的数组还是一个向量。在将列转换为R向量似乎是解决问题所需的:
^{pr2}$现在我想收集更多的数据,看看这是否可以在不破坏其他东西的情况下解决问题。为此,我将修复程序转换为从pandas转换器派生的自定义转换器:
^{3}$使用此新转换器的最简单方法可能是在上下文管理器中:
相关问题 更多 >
编程相关推荐