具有多个变量的类内相关系数(ICC)


13

假设我在同胞中测量了一些变量,这些变量嵌套在家庭中。数据结构如下所示:

家庭同胞价值
------ ------- -----
1 1 y_11
1 2 y_12
2 1 y_21
2 2 y_22
2 3 y_23
……

我想知道同一家庭中对兄弟姐妹进行的测量之间的相关性。常用的方法是根据随机拦截模型计算ICC:

res <- lme(yij ~ 1, random = ~ 1 | family, data=dat)
getVarCov(res)[[1]] / (getVarCov(res)[[1]] + res$s^2)

这等效于:

res <- gls(yij ~ 1, correlation = corCompSymm(form = ~ 1 | family), data=dat)

除了后一种方法还允许使用负ICC。

现在假设我测量了嵌套在家庭中的兄弟姐妹中的三个项目。因此,数据结构如下所示:

家庭同胞物品价值
------ ------- ---- -----
1 1 1 y_111
1 1 2 y_112
1 1 3 y_113
1 2 1 y_121
1 2 2 y_122
1 2 3 y_123
2 1 1 y_211
2 1 2 y_212
2 1 3 y_213
2 2 1 y_221
2 2 2 y_222
2 2 3 y_223
2 3 1 y_231
2 3 2 y_232
2 3 3 y_233
…………

现在,我想了解一下:

  1. 同一项目中对同一个家族的兄弟姐妹进行的测量之间的相关性
  2. 对同一个家庭中的兄弟姐妹进行的不同项目测量之间的相关性

如果我在家庭中只有一对兄弟姐妹,我会这样做:

res <- gls(yijk ~ item, correlation = corSymm(form = ~ 1 | family), 
           weights = varIdent(form = ~ 1 | item), data=dat)

这给了我 var-cov矩阵形式的残差:6×6

[σ12ρ12σ1σ2ρ13σ1σ3ϕ11σ12ϕ12σ1σ2ϕ13σ1σ3σ22ρ23σ2σ3ϕ22σ22ϕ23σ2σ3σ32ϕ33σ32σ12ρ12σ1σ2ρ13σ1σ3σ22ρ23σ2σ3σ32]

基于此,我可以轻松地估计那些交叉兄弟相关性(值是同一项目的ICC;值是不同项目的ICC)。但是,如上所述,对于某些家庭,我只有两个兄弟姐妹,而对于其他家庭,则有两个以上兄弟姐妹。因此,这使我认为我需要回到模型的方差成分类型。但是,项目之间的相关性可能为负,因此我不想使用将相关性约束为正的模型。 φ Ĵ Ĵ ϕjjϕjj

关于如何解决这个问题的任何想法/建议?在此先感谢您的帮助!

Answers:


1

MCMCglmm软件包可以轻松处理和估计协方差结构和随机效应。但是,它确实使用贝叶斯统计信息,这可能会吓到新用户。有关MCMCglmm的详尽指南,请参阅《 MCMCglmm课程注释》,尤其是关于该问题的第5章。我绝对建议您先阅读有关评估模型收敛性和链混合的信息,然后再分析MCMCglmm中的实际数据。

library(MCMCglmm)

MCMCglmm使用先验,这是一个无信息的逆向愿望。

p<-list(G=list(
  G1=list(V=diag(2),nu=0.002)),
R=list(V=diag(2),nu=0.002))

拟合模型

m<-MCMCglmm(cbind(x,y)~trait-1,
#trait-1 gives each variable a separate intercept
        random=~us(trait):group,
#the random effect has a separate intercept for each variable but allows and estiamtes the covariance between them.
        rcov=~us(trait):units,
#Allows separate residual variance for each trait and estimates the covariance between them
        family=c("gaussian","gaussian"),prior=p,data=df)

在模型摘要中summary(m),G结构描述了随机截距的方差和协方差。R结构描述了截距的观测水平方差和协方差,其作用是MCMCglmm中的残差。

如果您具有贝叶斯说服力,则可以得到协/方差项的整个后验分布 m$VCV。请注意,这些是考虑固定效应后的差异。

模拟数据

library(MASS)
n<-3000

#draws from a bivariate distribution
df<-data.frame(mvrnorm(n,mu=c(10,20),#the intercepts of x and y
                   Sigma=matrix(c(10,-3,-3,2),ncol=2)))
#the residual variance covariance of x and y


#assign random effect value
number_of_groups<-100
df$group<-rep(1:number_of_groups,length.out=n)
group_var<-data.frame(mvrnorm(number_of_groups, mu=c(0,0),Sigma=matrix(c(3,2,2,5),ncol=2)))
#the variance covariance matrix of the random effects. c(variance of x,
#covariance of x and y,covariance of x and y, variance of y)

#the variables x and y are the sum of the draws from the bivariate distribution and the random effect
df$x<-df$X1+group_var[df$group,1]
df$y<-df$X2+group_var[df$group,2]

估计随机效应的原始协方差/方差需要针对随机效应的大量级别。相反,您的模型可能会估算观察到的协方差/方差,可以通过以下方法计算cov(group_var)


0

如果您希望获得“家庭效果”和“项目效果”,我们可以考虑对这两种方法进行随机拦截,然后使用“ lme4”包对其进行建模。

但是,首先我们必须给每个同级唯一的ID,而不是一个唯一的ID 的家庭。

然后,对于“对同一个家族中不同项目的兄弟姐妹进行的测量之间的相关性”,我们可以指定以下内容:

mod<-lmer(value ~ (1|family)+(1|item), data=family)

这将给我们所有兄弟姐妹一个固定的效果拦截器,然后是家庭和物品的两个随机效果拦截器(有差异)。

然后,对于“ 同一项目中对同一个家族中的兄弟姐妹进行的测量之间的相关性”,我们可以做同样的事情,只是对数据进行子集化,所以我们有类似的东西:

mod2<-lmer(value ~ (1|family), data=subset(family,item=="1")) 

我认为这可能是解决您问题的简便方法。但是,如果您只想为商品或家庭提供ICC,则“ psych”程序包具有ICC()函数-请谨慎对待示例数据中商品和价值的融合方式。

更新资料

以下内容对我来说是新手,但是我很喜欢解决它。我真的不熟悉否定类内相关的想法。尽管我确实在Wikipedia上看到“早期ICC定义”允许与配对数据负相关。但是,正如现在最常用的那样,ICC被理解为是组间方差中总方差的比例。该值始终为正。尽管Wikipedia可能不是最权威的参考书,但此摘要与我一直看到ICC使用的方式相对应:

此ANOVA框架的优点在于,不同的组可以具有不同数量的数据值,使用较早的ICC统计信息很难处理。另请注意,此ICC始终为非负数,允许将其解释为“组之间”的总方差的比例。可以将此ICC泛化以考虑协变量效应,在这种情况下,将ICC解释为捕获协变量调整后的数据值的类内相似度。

就是说,使用像您在此处给出的数据,项目1、2和3之间的类间相关性很可能为负。我们可以对此建模,但是各组之间解释的方差比例仍将为正。

# load our data and lme4
library(lme4)    
## Loading required package: Matrix    

dat<-read.table("http://www.wvbauer.com/fam_sib_item.dat", header=TRUE)

那么家族之间差异的百分比是多少,还可以控制项目组之间的组差异?我们可以使用您建议的随机拦截模型:

mod<-lmer(yijk ~ (1|family)+(1|item), data=dat)
summary(mod)    
## Linear mixed model fit by REML ['lmerMod']
## Formula: yijk ~ (1 | family) + (1 | item)
##    Data: dat
## 
## REML criterion at convergence: 4392.3
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.6832 -0.6316  0.0015  0.6038  3.9801 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  family   (Intercept) 0.3415   0.5843  
##  item     (Intercept) 0.8767   0.9363  
##  Residual             4.2730   2.0671  
## Number of obs: 1008, groups:  family, 100; item, 3
## 
## Fixed effects:
##             Estimate Std. Error t value
## (Intercept)    2.927      0.548   5.342

我们通过从两个随机效应截距和残差中获取方差来计算ICC。然后,我们在所有方差的平方和上计算家庭方差的平方。

temp<-as.data.frame(VarCorr(mod))$vcov
temp.family<-(temp[1]^2)/(temp[1]^2+temp[2]^2+temp[3]^2)
temp.family    
## [1] 0.006090281

然后,我们可以对其他两个方差估计执行相同的操作:

# variance between item-groups
temp.items<-(temp[2]^2)/(temp[1]^2+temp[2]^2+temp[3]^2)
temp.items    
## [1] 0.04015039    
# variance unexplained by groups
temp.resid<-(temp[3]^2)/(temp[1]^2+temp[2]^2+temp[3]^2)
temp.resid    
## [1] 0.9537593    
# clearly then, these will sum to 1
temp.family+temp.items+temp.resid    
## [1] 1

这些结果表明,总差异中很少有是由家庭之间或项目组之间的差异解释的。但是,如上所述,项目之间的类间相关仍可能为负。首先,让我们以更广泛的格式获取数据:

# not elegant but does the trick
dat2<-cbind(subset(dat,item==1),subset(dat,item==2)[,1],subset(dat,item==3)[,1])
names(dat2)<-c("item1","family","sibling","item","item2","item3")

现在,我们可以像以前一样使用家庭随机截距对例如item1和item3之间的相关性进行建模。但首先,也许值得回想一下,对于简单的线性回归,模型的r平方的平方根与item1和item2的类间相关系数(皮尔逊r)相同。

# a simple linear regression
mod2<-lm(item1~item3,data=dat2)
# extract pearson's r 
sqrt(summary(mod2)$r.squared)    
## [1] 0.6819125    
# check this 
cor(dat2$item1,dat2$item3)    
## [1] 0.6819125    
# yep, equal

# now, add random intercept to the model
mod3<-lmer(item1 ~ item3 + (1|family), data=dat2)
summary(mod3)    

## Linear mixed model fit by REML ['lmerMod']
## Formula: item1 ~ item3 + (1 | family)
##    Data: dat2
## 
## REML criterion at convergence: 1188.8
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.3148 -0.5348 -0.0136  0.5724  3.2589 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  family   (Intercept) 0.686    0.8283  
##  Residual             1.519    1.2323  
## Number of obs: 336, groups:  family, 100
## 
## Fixed effects:
##             Estimate Std. Error t value
## (Intercept) -0.07777    0.15277  -0.509
## item3        0.52337    0.02775  18.863
## 
## Correlation of Fixed Effects:
##       (Intr)
## item3 -0.699

item1和item3之间的关系是正的。但是,只是为了检查我们在这里可以得到负相关,我们来处理数据:

# just going to multiply one column by -1
# to force this cor to be negative

dat2$neg.item3<-dat2$item3*-1
cor(dat2$item1, dat2$neg.item3)    
## [1] -0.6819125    

# now we have a negative relationship
# replace item3 with this manipulated value

mod4<-lmer(item1 ~ neg.item3 + (1|family), data=dat2)
summary(mod4)    

## Linear mixed model fit by REML ['lmerMod']
## Formula: item1 ~ neg.item3 + (1 | family)
##    Data: dat2
## 
## REML criterion at convergence: 1188.8
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.3148 -0.5348 -0.0136  0.5724  3.2589 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  family   (Intercept) 0.686    0.8283  
##  Residual             1.519    1.2323  
## Number of obs: 336, groups:  family, 100
## 
## Fixed effects:
##             Estimate Std. Error t value
## (Intercept) -0.07777    0.15277  -0.509
## neg.item3   -0.52337    0.02775 -18.863
## 
## Correlation of Fixed Effects:
##           (Intr)
## neg.item3 0.699

所以是的,项目之间的关系可以是负的。但是,如果我们看一下这种关系中家庭之间的差异比例,即ICC(家庭),那么这个数字仍然是正的。像之前一样:

temp2<-as.data.frame(VarCorr(mod4))$vcov
(temp2[1]^2)/(temp2[1]^2+temp2[2]^2)    
## [1] 0.1694989

因此,对于第1项和第3项之间的关系,这种差异的大约17%是由于家庭之间的差异引起的。而且,我们仍然允许项目之间存在负相关。


感谢您的建议,但我看不出它如何实际提供相关性。我在这里发布了一些数据:wvbauer.com/fam_sib_item.dat请注意,我想估计9个不同的相关性(加上3个项目的差异)。
沃尔夫冈

然后,我建议在这里查看“ 相关问题” 列表的第一个。如果您最终要寻找的只是九种不同的ICC,那么本文的答案将是非常好的。
5ayat

再次感谢,但仍然-如何提供九个ICC?此处讨论的模型没有提供该功能。而且,它是一个方差成分模型,不允许负ICC,但是正如我提到的,我并不希望所有ICC都是正的。
沃尔夫冈

我对这样的模型中的负ICC问题不熟悉-这里没有这样的约束。但是要计算这种相关性,当您使用上述代码查看模型的摘要时,您将获得三个方差估计值:族,项和残差。因此,例如,如另一篇文章中所述,ICC(家庭)将为var(家庭)^ 2 /(var(家庭)^ 2 + var(项目)^ 2)+ var(残差)^ 2)。换句话说,您的结果方差是两个随机效应和残差的方差平方和的平方。为您重复9个家庭和物品的组合。
5ayat

1
9个不同的ICC中的哪个var(family)^2/(var(family)^2+var(item)^2)+var(residual)^2)对应?是的,ICC可能是负面的。正如我在问题开头所描述的那样,可以使用该gls()模型直接估算ICC ,从而可以进行负估算。另一方面,方差成分模型不允许负估计。
沃尔夫冈
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.