【问题标题】:How to plot regression line with rpy2如何用rpy2绘制回归线
【发布时间】:2012-04-03 14:50:44
【问题描述】:

在 R 中,可以使用以下命令绘制回归线:

res=lm(height~age)
abline(res)

正如http://msenux.redwoods.edu/math/R/regression.php所建议的那样

我怎样才能用 rpy2 做同样的事情?我试过了

from rpy2 import robjects
r = robjects.r
r.png('test.png')
x = range(10)
y = range(10)
r.plot(x, y)
r.abline(r.lm(x, y))

但被 rpy2 投诉:

Error in formula.default(object, env = baseenv()) : invalid formula
Traceback (most recent call last):
  File "plot_ratio_price.py", line 34, in <module>
    r.abline(r.lm(x, y))
  File "/Library/Python/2.7/site-packages/rpy2/robjects/functions.py", line 82, in __call__
    return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/rpy2/robjects/functions.py", line 34, in __call__
    res = super(Function, self).__call__(*new_args, **new_kwargs)
rpy2.rinterface.RRuntimeError: Error in formula.default(object, env = baseenv()) : invalid formula

有什么提示吗?谢谢!

【问题讨论】:

  • 既然错误消息说您传递了一个无效的公式,也许您应该将一个公式传递给r.lm,如here所述?

标签: python r rpy2


【解决方案1】:

根据@joran 的评论,Rpy2 要求您为公式提供一个特殊对象。文档说类robjects.Formula represents an R formula。因此,在您的最后一行(对 r.abline 的调用)之前,您需要创建一个公式对象并将其传递给您的 lm() 调用。

顺便说一句,您的问题代码看起来与rpy2 示例非常接近,您可以考虑将其用作模板:

import array
from rpy2.robjects import IntVector, Formula
from rpy2.robjects.packages import importr
stats = importr('stats')

x = IntVector(range(1, 10))
y = IntVector(range(1, 10))

fmla = Formula('y ~ x')
env = fmla.environment
env['x'] = x
env['y'] = y

fit = stats.lm(fmla)

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 2017-01-21
    • 2021-03-18
    • 2018-07-10
    • 2014-02-20
    • 2017-06-12
    • 2015-01-15
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多