0

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

ヒントはありますか?ありがとう!

4

1 に答える 1

2

@joran のコメントに続いて、Rpy2 では式に特別なオブジェクトを提供する必要があります。ドキュメントには、クラスがRrobjects.Formulaを表すと書かれています。したがって、最後の行 ( への呼び出しr.abline) の前に、 Formula オブジェクトを作成し、それを呼び出しに渡す必要があります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)
于 2012-07-17T23:13:30.060 に答える