首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用rpy2来估计一个brms模型?

如何用rpy2来估计一个brms模型?
EN

Stack Overflow用户
提问于 2018-08-11 06:17:13
回答 1查看 330关注 0票数 0

我正在尝试估计下面的模型。该模型在R中使用了一个名为brms的包。我正在用Python做所有的数据操作。为了在两种语言之间架起桥梁,我使用rpy2。我可以用rpy2加载brms包,但是我不知道用什么语法来估计模型。下面是我想做的一个简单的例子。我试着按照rpy2网站上的文档操作,但我似乎无法让它工作。这段代码在R中原生运行,我如何将它翻译成rpy2

代码语言:javascript
复制
library(brms) 
data("kidney", package = "brms") 
head(kidney, n = 3)

fit1 <- brm(time | cens(censored) ~ age + sex + disease, 
            data = kidney, family = weibull, inits = "0")
summary(fit1)  
plot(fit1)

fit2 <- brm(time | cens(censored) ~ age + sex + disease + (1|patient),
                data = kidney, family = weibull(), inits = "0",
                prior = set_prior("cauchy(0,2)", class = "sd"))
summary(fit2)  
plot(fit2)
EN

回答 1

Stack Overflow用户

发布于 2018-08-11 10:36:58

在Python中,每个非内置属性或对象都必须使用名称空间进行限定。幸运的是,在R中,一切都是隐式名称空间中的对象!大多数新用户可能不知道,但每个会话都加载了内置的核心库basestatsutils。许多日常函数,如read.csvdata.framelapply,实际上都是库中的方法,可以使用双冒号运算符以Python的方式调用:utils::read_csv()base::lapply()stats::lm()。要查找这样的库,请在R中使用? (即?lapply)检查方法的文档页面,并在左上角查找。

因此,只需保留所有的R语法,当然,要遵守Python语法规则,比如转换点名称,并且不使用赋值<-操作符。但是,rpy2不以交互方式呈现图形,因此您需要将绘图作为图像保存到磁盘,并对任何控制台输出执行print操作。此外,一个挑战可能是加载内置数据集。下面包括从内置R数据集软件包加载的mtcar。希望它是可翻译的。

代码语言:javascript
复制
from rpy2.robjects.packages import importr, data

# IMPORT R PACKAGES
base = importr('base')
utils = importr('utils')
datasets = importr('datasets')
stats = importr('stats', robject_translations={'as.formula': 'as_formula'})
graphics = importr('graphics')
grDevices = importr('grDevices')    
brms = importr('brms')

# LOADING DATA
# WORKING EXAMPLE: mtcars = data(datasets).fetch('mtcars')['mtcars']
kidney_df = data(brms).fetch('kidney')['kidney']
print(utils.head(kidney_df, n = 3))

# MODELING
formula1 = stats.as_formula("time | cens(censored) ~ age + sex + disease")
fit1 = brms.brm(formula1, data = kidney_df, family = "weibull", inits = "0")
print(stats.summary(fit1))

formula2 = stats.as_formula("time | cens(censored) ~ age + sex + disease + (1|patient)")    
fit2 <- brms.brm(formula2, data = kidney_df, family = "weibull", inits = "0",
                 prior = brms.set_prior("cauchy(0,2)", class = "sd"))
print(stats.summary(fit2))

# GRAPHING
grDevices.png('/path/to/plot1.png') 
graphics.plot(fit1)
grDevices.dev_off()

grDevices.png('/path/to/plot2.png') 
graphics.plot(fit2)
grDevices.dev_off()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51794654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档