r - 敏感性分析:如何生成多个数据集并对每个数据集进行贝叶斯回归分析?
问题描述
这是我的原始模型。
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 的数量。
请问我如何将上述内容合并到我的原始模型中?
解决方案
这是创建具有 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 包于 2021-09-09 创建(v2.0.1)
推荐阅读
- javascript - 使用 React Hooks 时在 `onClick()` 上获取最新状态
- vue.js - Vuetify 带有插槽的自动完成功能,键入时没有自动完成建议
- linux - 如何拆分变量以在行之间打印出其他内容?
- python - Pandas 中的 Excel Sumproduct 等效项
- scala - Spark:配置每个核心的并发任务数
- django - 在不同的端口上运行 django 多个应用程序
- excel - 删除刚刚添加到表最后一行的行
- javascript - Javascript循环遍历对象键
- javascript - 如何计算对象数组中唯一位置的总数?
- model - 如何在 Svelte 视图中最好地实现可共享的数据模型