Çok Değişkenli Sınıf İçi Korelasyon Katsayıları (ICC)


13

Diyelim ki ailelerde yuvalanmış kardeşlerde bazı değişkenler ölçtüm. Veri yapısı şöyle görünür:

aile kardeş değeri
------ ------- -----
1 1 y_11
1 2 y_12
2 1 y_21
2 2 y_22
2 3 y_23
... ... ...

Aynı aile içinde kardeşler üzerinde yapılan ölçümler arasındaki ilişkiyi bilmek istiyorum. Bunu yapmanın olağan yolu, ICC'yi rastgele kesişme modeline göre hesaplamaktır:

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

Bu şuna eşit olacaktır:

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

ancak ikinci yaklaşım negatif bir ICC'ye izin verir.

Şimdi ailelerin içinde yuvalanmış kardeşlerde üç maddeyi ölçtüğümü varsayalım. Yani, veri yapısı şöyle görünür:

aile kardeş ürün değeri
------ ------- ---- -----
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
... ... ... ...

Şimdi, şunu öğrenmek istiyorum:

  1. aynı ürün için aynı aile içindeki kardeşler üzerinde yapılan ölçümler arasındaki korelasyon
  2. farklı ürünler için aynı aile içindeki kardeşler üzerinde yapılan ölçümler arasındaki ilişki

Aileler içinde sadece bir çift kardeşim olsaydı, yapardım:

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

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]

ϕjjϕjj

Buna nasıl yaklaşabileceğime dair herhangi bir fikir / öneriniz var mı? Herhangi bir yardım için şimdiden teşekkürler!

Yanıtlar:


1

MCMCglmm paketi, kovaryans yapılarını ve rastgele etkileri kolayca işleyebilir ve tahmin edebilir. Ancak yeni kullanıcılara göz korkutucu olabilecek bayes istatistikleri kullanıyor. MCMCglmm hakkında ayrıntılı bir kılavuz için MCMCglmm Kurs Notlarına ve özellikle bu soru için bölüm 5'e bakınız. Verileri MCMCglmm'de gerçek olarak analiz etmeden önce model yakınsaması ve zincir karıştırmanın değerlendirilmesini kesinlikle okumanızı tavsiye ederim.

library(MCMCglmm)

MCMCglmm önceleri kullanır, bu daha önce bilgilendirici olmayan bir ters wisharttır.

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

Modele uyun

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)

Model özetinde summary(m)G yapısı, rastgele kesişmelerin varyansını ve kovaryansını tanımlar. R yapısı, MCMCglmm'de artıklar olarak işlev gören gözlem seviyesinin sapma ve varyans kovaryansını tanımlar.

Bir Bayesian ikna iseniz, ortak / varyans terimlerinin tüm posterior dağılımını alabilirsiniz m$VCV. Bunların, sabit etkileri hesaba kattıktan sonra varyanslar olduğunu unutmayın.

verileri simüle et

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]

Rastgele etkilerin orijinal eş / varyansının tahmin edilmesi, rastgele etki için çok sayıda seviye gerektirir. Bunun yerine, modeliniz muhtemelen şu şekilde hesaplanabilecek gözlemlenen eş / varyansları tahmin edecektircov(group_var)


0

Bir "aile etkisi" ve bir "öğe etkisi" elde etmek istiyorsanız, bunların her ikisi için rastgele kesişmeler olduğunu düşünebilir ve daha sonra bunu 'lme4' paketiyle modelleyebiliriz.

Ancak, önce her kardeşe aile içinde benzersiz bir kimlik yerine benzersiz bir kimlik vermeliyiz .

Sonra " farklı ürünler için aynı aile içindeki kardeşler üzerinde yapılan ölçümler arasındaki ilişki " için şöyle bir şey belirtebiliriz:

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

Bu bize tüm kardeşler için sabit bir etki kesişmesi ve daha sonra aile ve öğe için iki rastgele etki kesişmesi (varyanslı) verecektir.

Daha sonra, " aynı ürün için aynı aile içindeki kardeşler üzerinde yapılan ölçümler arasındaki korelasyon " için aynı şeyi yapabiliriz, ancak verilerimizi alt kümelere ayırabiliriz, böylece şöyle bir şeyimiz olur:

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

Bence bu sorunuza daha kolay bir yaklaşım olabilir. Ancak, yalnızca ICC'yi öğe veya aile için istiyorsanız, 'psych' paketinin bir ICC () işlevi vardır - örnek verilerinizde öğe ve değerin nasıl eritildiği konusunda dikkatli olun.

Güncelleme

Aşağıdakilerden bazıları benim için yeni, ama çalışmaktan zevk aldım. Negatif sınıf içi korelasyon fikrine gerçekten aşina değilim. Wikipedia'da “erken ICC tanımları” nın eşlenmiş verilerle negatif bir korelasyona izin verdiğini görmeme rağmen. Ancak şu anda en yaygın kullanılan şekliyle ICC, gruplar arası varyans olan toplam varyansın oranı olarak anlaşılmaktadır. Ve bu değer her zaman pozitiftir. Wikipedia en yetkili referans olmasa da, bu özet her zaman ICC'nin nasıl kullanıldığını gördüm:

Bu ANOVA çerçevesinin bir avantajı, farklı grupların daha önceki ICC istatistiklerini kullanarak ele alınması zor olan farklı sayıda veri değerine sahip olabilmeleridir. Ayrıca, bu ICC'nin her zaman negatif olmadığına ve “gruplar arasında” toplam varyans oranı olarak yorumlanmasına izin verdiğine dikkat edin. Bu ICC, ortak değişken etkilere izin verecek şekilde genelleştirilebilir; bu durumda ICC, ortak değişkenle ayarlanmış veri değerlerinin sınıf içi benzerliğini yakalama olarak yorumlanır.

Bununla birlikte, burada verdiğiniz gibi verilerle, 1, 2 ve 3. maddeler arasındaki sınıflar arası korelasyon çok iyi olabilir. Ve bunu modelleyebiliriz, ancak gruplar arasında açıklanan varyans oranı hala olumlu olacaktır.

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

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

Öyleyse, aileler arasındaki varyansın yüzde kaçı, madde grupları arasındaki grup farkını da kontrol ediyor? Önerdiğiniz gibi rastgele bir engelleme modeli kullanabiliriz:

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'yi iki rastgele etki kesişiminden ve artıklardan sapma alarak hesaplıyoruz. Daha sonra, tüm varyansların karelerinin toplamı üzerinde aile varyansının karesini hesaplıyoruz.

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

Daha sonra diğer iki varyans tahmini için de aynısını yapabiliriz:

# 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

Bu sonuçlar toplam varyansın çok azının aileler veya madde grupları arasındaki varyansla açıklandığını göstermektedir. Ancak, yukarıda belirtildiği gibi, maddeler arasındaki sınıflar arası korelasyon hala negatif olabilir. Öncelikle verilerimizi daha geniş bir biçimde edelim:

# 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")

Şimdi, örneğin madde1 ve madde3 arasındaki korelasyonu daha önce olduğu gibi aile için rastgele bir kesme ile modelleyebiliriz. Ancak ilk olarak, belki de basit bir lineer regresyon için, modelin r-karesinin kare kökünün madde1 ve madde2 için sınıflar arası korelasyon katsayısı (pearson r) ile aynı olduğunu hatırlamakta fayda var.

# 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

Madde1 ile madde3 arasındaki ilişki pozitiftir. Ancak, burada negatif bir korelasyon elde edebileceğimizi kontrol etmek için verilerimizi değiştirelim:

# 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

Yani evet, öğeler arasındaki ilişki negatif olabilir. Ancak bu ilişkide aileler arasındaki varyans oranına bakarsak, yani ICC (aile), bu sayı yine de pozitif olacaktır. Eskisi gibi:

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

Dolayısıyla madde1 ve madde3 arasındaki ilişki için, bu varyansın yaklaşık% 17'si aileler arasındaki varyanstan kaynaklanmaktadır. Ve hala öğeler arasında negatif bir korelasyon olmasına izin verdik.


Öneri için teşekkürler, ama bunun aslında korelasyonları nasıl sağlayacağını göremiyorum. Burada bazı veriler yayınladım: wvbauer.com/fam_sib_item.dat 9 farklı korelasyon (artı 3 madde varyansı) tahmin etmek istediğimi unutmayın.
Wolfgang

Sonra bir bakmanızı öneririm ilk-of-the-listesinin İlgili Sorular burada . Sonuçta aradığınız şey sadece dokuz farklı ICC ise bu yazıdaki cevap çok iyi.
5ayat

Tekrar teşekkürler, ama yine de - bu dokuz ICC'yi nasıl sağlıyor? Orada tartışılan model bunu sağlamaz. Ayrıca, negatif ICC'lere izin vermeyecek bir varyans bileşen modelidir, ancak belirttiğim gibi, tüm ICC'lerin pozitif olmasını beklemiyorum.
Wolfgang

Böyle bir modelde negatif ICC sorununa aşina değilim - burada böyle bir kısıtlama yok. Ancak bu korelasyonu hesaplamak için, yukarıdaki kodla modelinizin özetine baktığınızda, üç varyans tahmininiz vardır: aile, öğe ve kalıntı. Örneğin, diğer yazılarda açıklandığı gibi, ICC (aile), var (aile) ^ 2 / (var (aile) ^ 2 + var (öğe) ^ 2) + var (artık) ^ 2) olacaktır. Başka bir deyişle, sonucunuzun varyansı, iki rasgele etki ve artık için varyans karesinin toplamı üzerine kare oldu. Sizin için 9 aile ve eşya kombinasyonu tekrarlayın.
5ayat

1
9 farklı ICC'den hangisi var(family)^2/(var(family)^2+var(item)^2)+var(residual)^2)karşılık gelir? Ve evet, ICC'ler negatif olabilir. Sorumun başında açıkladığım gibi gls(), negatif tahminlere izin veren modelle ICC doğrudan tahmin edilebilir . Öte yandan, varyans bileşen modelleri negatif tahminlere izin vermez.
Wolfgang
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.