3
我想知道如何模擬利用R中的arm
或rstanarm
包估計的迴歸模型中的感興趣的數量。我是貝葉斯方法和R中的新手,並且已經使用Zelig
包一段時間了。我問了一個類似的問題before,但我想知道是否可以使用這些包估計的後驗分佈來模擬這些數量。如何在R中使用arm或rstanarm包來模擬感興趣的數量?
在Zelig
中,您可以設置獨立值所需的值,並計算結果變量(期望值,概率等)的結果。一個例子:
# Creating a dataset:
set.seed(10)
x <- rnorm(100,20,10)
z <- rnorm(100,10,5)
e <- rnorm(100,0,1)
y <- 2*x+3*z+e
df <- data.frame(x,z,e,y)
# Loading Zelig
require(Zelig)
# Model
m1.zelig <- zelig(y ~ x + z, model="ls", data=df)
summary(m1.zelig)
# Simulating z = 10
s1 <- setx(m1.zelig, z = 10)
simulation <- sim(m1.zelig, x = s1)
summary(simulation)
所以Zelig
保持X在其平均值(20.56),以及模擬的其中Z = 10感興趣的量在這種情況下,y爲約71
使用arm
同樣的模型:
# Model
require(arm)
m1.arm <- bayesglm(y ~ x + z, data=df)
summary(m1.arm)
而且使用rstanarm
:
# Model
require(rstanarm)
m1.stan <- stanlm(y ~ x + z, data=df)
print(m1.stan)
有沒有什麼辦法來模擬z = 10,x等於它的平均值,用這兩個包估計的後驗分佈並得到y的期望值?非常感謝你!
非常感謝您的回答,@BenGoodrich!它完美的工作!只有兩個小問題:是否有任何方法可以在不使用'Zelig'的情況下創建's1'?另外,如果我想運行邏輯迴歸,計算結果是否相同?再次感謝! :-) – danilofreire
當所有預測變量都是連續的時,'s1'幾乎就是'colMeans(model.matrix(m1.arm))'。一般來說,你可以讓's1'任意一致的向量。對於具有bayesglm的邏輯迴歸模型,您可以使用'rbinom(n = 1000,size = 1,prob = plogis(sims @ coef%*%t(as.matrix(s1))))'所有這些公式都被記錄在Zelig手冊中。 –