Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指定rstan中矩阵的先验分布_R_Stan_Rstan - Fatal编程技术网

指定rstan中矩阵的先验分布

指定rstan中矩阵的先验分布,r,stan,rstan,R,Stan,Rstan,我很难得到一个贝叶斯混合效应模型,以产生平稳和良好的混合链。我已经创建了自己的数据,因此我知道模型应该检索哪些参数。不幸的是,由于参数的有效数量太少,而Rhat太高,所以参数估计完全是胡说八道 数据设计为60名受试者,分为三组(g1、g2、g3),每组20名受试者。每个受试者暴露于3种条件下(cond1、cond2、cond3)。我设计数据的目的是使各组之间没有差异,但条件之间存在差异,cond1平均得分为100分,cond2平均得分为75分,cond3平均得分为125分 df <- da

我很难得到一个贝叶斯混合效应模型,以产生平稳和良好的混合链。我已经创建了自己的数据,因此我知道模型应该检索哪些参数。不幸的是,由于参数的有效数量太少,而Rhat太高,所以参数估计完全是胡说八道

数据设计为60名受试者,分为三组(g1、g2、g3),每组20名受试者。每个受试者暴露于3种条件下(cond1、cond2、cond3)。我设计数据的目的是使各组之间没有差异,但条件之间存在差异,cond1平均得分为100分,cond2平均得分为75分,cond3平均得分为125分

df <- data.frame(id = factor(rep(1:60, 3)),
                 group = factor(rep(c("g1", "g2", "g3"), each = 20, length.out = 180)),
                 condition = factor(rep(c("cond1", "cond2", "cond3"), each = 60)),
                 score = c(ceiling(rnorm(60, 100, 15)), ceiling(rnorm(60, 75, 15)), ceiling(rnorm(60, 125, 15))))
接下来是在
rstan

##### Step 3: generate the chains
mix <- stan(file = "mix.stan",
            data = mixList,
            iter = 2e3,
            warmup = 1e3,
            cores = 1,
            chains = 1)
有效样本的数量少和高Rhat告诉我,我在这里做了一些非常错误的事情,但是什么呢

是否未在bGxC上指定优先级


如何在矩阵上指定优先级?

在Stan()中,矩阵效率低下。最好使用向量的向量:

vector[nCond] bGxC[nGroup];
并设定优先权:

for(i in 1:nGroup){
  bGxC[i] ~ normal(0, sigma_gc);
}
以及:


谢谢@Stéphane Laurent,非常有帮助。我试着用一种笨拙的方式。链条现在看起来好多了。不感兴趣:先前on
bGxC
的for循环仅设置为组数(三个循环),而不是组数乘以条件数(3x3=9个循环)。为什么呢?带有组和条件的双for循环是否也有效,或者效果更好,或者没有差异?条件平均值也可以在不编写循环的情况下完成:
mu=a0+bGroup[gIndex]+bCond[cIndex]+bSubj[sIndex]+bGxC[gIndex,cIndex]在第二个索引上,双循环和求和独立的正常先前对数密度之间几乎没有差异。如果大于3和3,您可能会注意到双循环的减速。
##### Step 3: generate the chains
mix <- stan(file = "mix.stan",
            data = mixList,
            iter = 2e3,
            warmup = 1e3,
            cores = 1,
            chains = 1)
###### Step 4: Diagnostics
print(mix, pars = c("a0", "bGroup", "bCond", "bGxC", "sigma"), probs = c(.025,.975))

#                mean se_mean      sd      2.5%    97.5% n_eff Rhat
# a0         -1917.21  776.69 2222.64  -5305.69  1918.58     8 1.02
# bGroup[1]   2368.36 2083.48 3819.06  -2784.04  9680.78     3 1.54
# bGroup[2]   7994.87  446.06 1506.31   4511.22 10611.46    11 1.00
# bGroup[3]   7020.78 2464.68 4376.83     81.18 14699.90     3 1.91
# bCond[1]   -3887.06  906.99 1883.45  -7681.24  -247.48     4 1.60
# bCond[2]    4588.50  676.28 1941.92   -594.56  7266.09     8 1.10
# bCond[3]      73.91 1970.28 3584.74  -5386.96  5585.99     3 2.13
# bGxC[1,1]   3544.02  799.91 1819.18  -1067.27  6327.68     5 1.26
# bGxC[1,2]  -4960.08 1942.57 3137.33 -10078.84   317.07     3 2.66
# bGxC[1,3]   -396.35  418.34 1276.44  -2865.39  2543.45     9 1.42
# bGxC[2,1]  -2085.90 1231.36 2439.58  -5769.81  3689.38     4 1.46
# bGxC[2,2] -10594.89 1206.58 2560.42 -14767.50 -5074.33     5 1.02
# bGxC[2,3]  -6024.75 2417.43 4407.09 -12002.87  4651.14     3 1.71
# bGxC[3,1]  -1111.81 1273.66 2853.08  -4843.38  5572.87     5 1.48
# bGxC[3,2]  -9616.85 2314.56 4020.02 -15775.40 -4262.64     3 2.98
# bGxC[3,3]  -5054.27  828.77 2245.68  -8666.01  -321.74     7 1.00
# sigma         13.81    0.14    0.74     12.36    15.17    27 1.00
vector[nCond] bGxC[nGroup];
for(i in 1:nGroup){
  bGxC[i] ~ normal(0, sigma_gc);
}
for (i in 1:N){
  mu[i] = a0 + bGroup[gIndex[i]] + bCond[cIndex[i]] + bSubj[sIndex[i]] + bGxC[gIndex[i]][cIndex[i]];
}