MCMCglmm 二项式模型先验

MCMCglmm binomial model prior

我想用 RMCMCglmm 估计二项式模型。该模型应包含一个截距和一个斜率——既作为固定部分,也作为随机部分。我如何指定接受的 prior? (注意,here is a similar question,但在更复杂的设置中。)

假设数据具有以下形式:

  y           x cluster
1 0 -0.56047565       1
2 1 -0.23017749       1
3 0  1.55870831       1
4 1  0.07050839       1
5 0  0.12928774       1
6 1  1.71506499       1

事实上,数据是由

生成的
set.seed(123)
nj <- 15 # number of individuals per cluster
J <- 30  # number of clusters
n <- nj * J
x <- rnorm(n)
y <- rbinom(n, 1, prob = 0.6)
cluster <- factor(rep(1:nj, each = J))

dat <- data.frame(y = y, x = x, cluster = cluster)

问题中关于模型的信息,建议指定fixed = y ~ 1 + xrandom = ~ us(1 + x):cluster。使用 us() 可以使随机效应相关(参见第 3.4 节和 Hadfield's 2010 jstatsoft-article 中的 table 2)

首先,由于您只有一个因变量 (y),因此先验中的 G 部分(参见等式 4 和第 3.6 节 Hadfield's 2010 jstatsoft-article) 对于随机效应方差,只需要有一个名为 G1 的列表元素。此列表元素不是实际的先验分布 - Hadfield 将其指定为 inverse-Wishart 分布。但是使用 G1 您可以指定此逆惠沙特分布的参数,即比例矩阵(维基百科符号中的 MCMCglmm 符号中的 V )和自由度(维基百科符号中的 MCMCglmm 符号中的 nu)。由于您有两个随机效应(截距和斜率)V 必须是 2 x 2 矩阵。一个常见的选择是二维单位矩阵 diag(2)。哈德菲尔德经常使用 nu = 0.002 作为自由度(参见 他的课程笔记

现在,您还必须在先验中为残差方差指定 R 部分。此处再次由 Hadfield 指定了逆 Whishart 分布,让用户指定其参数。因为我们只有一个残差方差,所以 V 必须是一个标量(比方说 V = 0.5)。 R 的可选元素是 fix。使用您指定的这个元素,残差是否应固定为某个值(比您必须写 fix = TRUEfix = 1)或不(然后 fix = FALSEfix = 0 ).请注意,您没有将残差方差固定为 0.5 乘以 fix = 0.5!因此,当您在 Hadfield 的课程笔记中找到 fix = 1 时,将其阅读为 fix = TRUE 并查看 V 的哪个值是固定的。

我们一起设置先验如下:

prior0 <- list(G = list(G1 = list(V = diag(2), nu = 0.002)),
               R = list(V = 0.5, nu = 0.002, fix = FALSE))

有了这个先验我们可以运行 MCMCglmm:

library("MCMCglmm") # for MCMCglmm()    
set.seed(123) 

mod0 <- MCMCglmm(fixed = y ~ 1 + x, 
            random =  ~ us(1 + x):cluster, 
            data = dat,
            family = "categorical",
            prior = prior0) 

mod0$Sol 中找到固定效应的 Gibbs 采样器抽取,在 mod0$VCV.

中找到方差参数的抽取

通常二项式模型要求残差方差固定,所以我们设置残差固定在0.5

set.seed(123)

prior1 <- list(G = list(G1 = list(V = diag(2), nu = 0.002)),
          R = list(V = 0.5, nu = 0.002, fix = TRUE))

mod1 <- MCMCglmm(fixed = y ~ 1 + x, 
            random =  ~ us(1 + x):cluster, 
            data = dat,
            family = "categorical",
            prior = prior1) 

通过比较 mod0$VCV[, 5]mod1$VCV[, 5] 可以看出差异。在后一种情况下,所有条目都是 0.5 指定的。