【问题标题】:Sensitivity analysis: How do I generate multiple dataset and run bayesian regression analysis on each of the dataset?敏感性分析:如何生成多个数据集并对每个数据集运行贝叶斯回归分析?
【发布时间】:2021-11-05 23:19:31
【问题描述】:

这是我的原始模型。

  library(rjags)
  library(R2jags)
  cat("model{
for(i in 1 :N){
y[i] ~ dnorm(theta[i],tau)
theta[i] <- beta[1] + beta[2]*x1[i] + beta[3]*x2[i]
}
for(j in 1:3){
beta[j] ~ dnorm(0,0.001)}
sigma ~ dgamma(0.001,0.001)
tau <- pow(sigma,-2)
    }",file="m1.txt")

set.seed(123)
dd <- data.frame(y=rnorm(20,0,1),
            v=sample(seq(0, 50, by=5),size=20,replace = T),
            m=sample(seq(2,48,by=3),size=20,replace = T))
d <- with(dd,list(N=length(y),y=y,x1=v,x2=m))

 model1 <- jags(data=d,inits=NULL,
               parameters.to.save=c("beta","tau"),
               n.chains=3,n.iter=10000,n.burnin=5000,n.thin=10,
               model.file="m1.txt")

我正在尝试使用上面的回归模型进行敏感性分析。我有两个自变量 v 和 m。

v 取值在 0 到 50 之间,m 取值在 2 到 48 之间

我想生成单位增量为 v 和 m 的新数据集,这样:

数据集 1:我设置 v =0 和 m=2

数据集 2:v = 1 和 m= 2

。 . .

。 . .

。 . .

数据集 51:v =51 和 m=2

数据集 52:v=0 和 m=3

数据集 53:v = 1 和 m= 3

。 . .

。 . .

。 . .

数据集 102:v =51 和 m=3

。 . .

。 . .

。 . .

数据集 153:v =0 和 m=4

。 . .

。 . .

。 . .

数据集 2448:v =51 和 m=48 注意:每个数据集应该有 20 行,y 应该是一个随机数。

然后我将使用 2000 plus 数据集和 beta[s] 的系数来预测 ys,因此对于每个数据集我应该预测 20 个 y 值。我有一个 y 的基准值。因此,在每个预测值中,我将为 v 和 m 值的每个组合绘制符合基准值的 y 的数量。

请问我如何将以上内容合并到我的原始模型中?

【问题讨论】:

  • 你想要吗?数据集 1 有 20 行,其中 y 是一个随机数,另外两列 v 和 m 分别只是 0 和 2 重复 20 次?
  • @是的,每个数据集将有 20 行

标签: r regression lapply bayesian rjags


【解决方案1】:

这是创建具有 m 和 v 的所有可能组合的数据帧的方法:

library(tidyverse)

data_frames <-
  expand_grid(
  v = seq(0, 50, by = 5),
  m = seq(2, 48, by = 3)
) %>%
  mutate(
    data = v %>% map2(m, ~ {
      data.frame(
        y = rnorm(20, 0, 1),
        v = .x,
        m = .y
      )
    })
  )
data_frames
#> # A tibble: 176 x 3
#>        v     m data         
#>    <dbl> <dbl> <list>       
#>  1     0     2 <df [20 × 3]>
#>  2     0     5 <df [20 × 3]>
#>  3     0     8 <df [20 × 3]>
#>  4     0    11 <df [20 × 3]>
#>  5     0    14 <df [20 × 3]>
#>  6     0    17 <df [20 × 3]>
#>  7     0    20 <df [20 × 3]>
#>  8     0    23 <df [20 × 3]>
#>  9     0    26 <df [20 × 3]>
#> 10     0    29 <df [20 × 3]>
#> # … with 166 more rows
data_frames$data[[1]]
#>              y v m
#> 1   0.04844153 0 2
#> 2  -0.39136686 0 2
#> 3  -1.20848091 0 2
#> 4  -0.52041488 0 2
#> 5  -1.97372954 0 2
#> 6  -0.49918332 0 2
#> 7  -0.65153827 0 2
#> 8   0.61465528 0 2
#> 9  -0.63446048 0 2
#> 10  1.67354439 0 2
#> 11  0.31279567 0 2
#> 12  0.10422302 0 2
#> 13  0.14853823 0 2
#> 14 -0.60451679 0 2
#> 15  1.79470355 0 2
#> 16  0.39043583 0 2
#> 17 -0.12879205 0 2
#> 18 -0.26973252 0 2
#> 19 -2.32701504 0 2
#> 20 -0.84522199 0 2

reprex package (v2.0.1) 于 2021-09-09 创建

【讨论】:

  • 谢谢。我会尝试看看如何将它合并到我的模型中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 2013-11-06
  • 2012-07-15
  • 2018-07-15
  • 2017-02-04
  • 1970-01-01
相关资源
最近更新 更多