我想在rpy2中繪製一條簡單的曲線。在rpy2中繪製R函數曲線
curve((x))
R的行爲與預期的一樣,但我無法在rpy2中實現。
當我發出的順序如下命令:
import rpy2.robjects as ro
R = ro.r
R.curve(R.x)
我得到AttributeError: 'R' object has no attribute 'x'
...
如何訪問x
爲蟒蛇內矢量化功能的錯誤? (我可以發出ro.r('curve((x))')
,它按預期工作,但我需要能夠將參數從python傳遞到曲線函數)。
更一般地,我怎麼在rpy2繪製函數曲線阿拉這個帖子:plotting function curve in R
編輯1
一些背景:
我試圖繪製的曲線反邏輯:
invlogit = function(x){ + exp(x)/(1 + exp(x)) }
線性函數:
invlogit(coef(mod1)[1] + coef(mod1)[2]*x
其中coef(mod1)是我運行的GLM的係數。
在R,我能做到以下幾點:
plot(outcome~survrate, data = d, ylab = "P(outcome = 1 |
survrate)", xlab = "SURVRATE: Probability of Survival after 5
Years", xaxp = c(0, 95, 19))
curve(invlogit(coef(mod1)[1] + coef(mod1)[2]*x), add = TRUE)
我得到預期的S形曲線。
我蟒蛇/ rpy2,我得到我的模型和係數:
formula = 'outcome~survrate'
mod1 = R.glm(formula=R(formula), data=r_analytical_set, family=R('binomial(link="logit")'))
s = R.summary(mod1)
print(mod1)
print(R.summary(mod1))
設置的情節
formula = Formula('outcome~survrate')
formula.getenvironment()['outcome'] = data.rx2('outcome')
formula.getenvironment()['survrate'] = data.rx2('survrate')
R.plot(formula, data=data, ylab = 'P(outcome = 1 | outcome)', xlab = 'SURVRATE: Probability of Survival after 5
Years", xaxp = c(0, 95, 19))
到目前爲止好...
然後,我讓我的係數來自型號:
a = R.coef(mod1)[0]
b = R.coef(mod1)[1]
然後試圖通過傳遞這些參數來運行曲線的功能,都無濟於事,想這樣的構造如
R.curve(invlogit(a + b*R.x))
我已經試過許多人太除此之外,所有這一切都是尷尬怪異。首先,天真的問題:如果curve()中的term(x)是最後一個環境表達式的特殊R指定,我假設我應該能夠通過python/rpy2以某種方式訪問它。
我知道它在曲線函數中的表示是101個元素的ListVector。我並沒有遵循它的意思,但它「是用於最後環境表達的特殊R指定」。有人可以詳細說明嗎?如果這是R中的一個對象,我是否應該無法通過至少低級別的接口訪問它?
或者,我實際上是否必須創建x
作爲python函數來將我的x,y元組表示爲兩個列表,然後將它們轉換爲ListVector以便在該函數中使用以繪製其曲線。
第二:我不能在python中構造我的函數invlogit(a + b*x)
並將它傳遞給R的曲線函數進行評估嗎?
我使用STAP庫讀取它,從R文件抓取invlogit
:from rpy2.robjects.packages import STAP
。
第三:我是否在複雜的事情?我的目標是在我嘗試在python/rpy2中做一個新的分析之前,重新創建一個我以前在R中使用python/rpy2來完成所有特性的分析。
明白了,但爲什麼'ro.r('curve((x))')'工作,但是'ro.r.curve(ro.rx)'產生錯誤?如果我從RI得到'str(curve((x))'得到:'2 $ x:num [1:101]的列表0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 ... $ y:num [1:101] 0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 ...',但是除非以ro.r。('str(曲線((x))')執行,否則這將失敗rpy2。 根據R的文檔,'x'是一個矢量數值函數(參見[曲線](http://stat.ethz.ch/R-manual/R-patched/library/graphics/html/curve.html))...我應該能夠以Python的方式訪問rpy2,我應該怎麼做? –
更重要的是,有沒有一種方法可以像'ro.rx'一樣在python中訪問'x'? –
您正在封裝'ro.r )''在第二個語句中有兩次,'x'不是一個變量,'curve()'中的術語'(x)'是最後環境表達式的一個特殊的R指定,另一種訪問'curve()導入圖形:'graphi cs = importr('graphics'); graphics.curve(...)'。嘗試我可能無法傳遞函數並希望包含該示例。 – Parfait