Koefisien Korelasi Intraclass (ICC) dengan Berbagai Variabel

13

Misalkan saya telah mengukur beberapa variabel dalam saudara kandung, yang bersarang di dalam keluarga. Struktur data terlihat seperti ini:

nilai saudara kandung
------ ------- -----
1 1 y_11
1 2 y_12
2 1 y_21
2 2 y_22
2 3 y_23
... ... ...

Saya ingin tahu korelasi antara pengukuran yang dilakukan pada saudara kandung dalam keluarga yang sama. Cara yang biasa dilakukan adalah menghitung ICC berdasarkan model intersepsi acak:

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

Ini akan setara dengan:

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

kecuali bahwa pendekatan terakhir juga memungkinkan untuk ICC negatif.

Sekarang anggaplah saya telah mengukur tiga item pada saudara kandung yang bersarang dalam keluarga. Jadi, struktur data terlihat seperti ini:

nilai item saudara kandung
------ ------- ---- -----
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
... ... ... ...

Sekarang, saya ingin mencari tahu tentang:

  1. korelasi antara pengukuran yang dilakukan pada saudara kandung dalam keluarga yang sama untuk item yang sama
  2. korelasi antara pengukuran yang dilakukan pada saudara kandung dalam keluarga yang sama untuk item yang berbeda

Jika saya hanya memiliki pasangan saudara kandung dalam keluarga, saya hanya akan melakukan:

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

Adakah ide / saran tentang bagaimana saya bisa mendekati ini? Terima kasih sebelumnya atas bantuannya!

Wolfgang
sumber

Jawaban:

1

Paket MCMCglmm dapat dengan mudah menangani dan memperkirakan struktur kovarian dan efek acak. Namun itu menggunakan statistik bayesian yang dapat mengintimidasi pengguna baru. Lihat Catatan Kursus MCMCglmm untuk panduan menyeluruh tentang MCMCglmm, dan bab 5 khususnya untuk pertanyaan ini. Saya benar-benar merekomendasikan membaca tentang menilai konvergensi model dan pencampuran rantai sebelum menganalisis data nyata di MCMCglmm.

library(MCMCglmm)

MCMCglmm menggunakan prior, ini adalah wishart invers yang tidak informatif sebelumnya.

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

Sesuai dengan model

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)

Dalam ringkasan model summary(m)struktur G menggambarkan varians dan kovarian dari intersep acak. Struktur R menggambarkan varians tingkat pengamatan dan kovarian intersep, yang berfungsi sebagai residu dalam MCMCglmm.

Jika Anda memiliki keyakinan Bayesian, Anda bisa mendapatkan seluruh distribusi posterior dari istilah co / variance m$VCV. Perhatikan bahwa ini adalah varian setelah memperhitungkan efek tetap.

mensimulasikan data

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]

Memperkirakan co-variance asli dari efek acak membutuhkan sejumlah besar level untuk efek acak. Alih-alih, model Anda kemungkinan akan memperkirakan co / varian yang diamati yang dapat dihitung dengancov(group_var)

DA Wells
sumber
0

Jika Anda mencari untuk mendapatkan "efek keluarga" dan "efek barang," kita dapat menganggap ada penyadapan acak untuk keduanya, dan kemudian memodelkan ini dengan paket 'lme4'.

Tapi, pertama-tama kita harus memberi masing-masing saudara id yang unik, bukan id yang unik dalam keluarga.

Kemudian untuk "korelasi antara pengukuran yang dilakukan pada saudara kandung dalam keluarga yang sama untuk item yang berbeda ," kita dapat menentukan sesuatu seperti:

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

Ini akan memberi kita intersep efek tetap untuk semua saudara kandung, dan kemudian dua intersep efek acak (dengan varian), untuk keluarga dan item.

Kemudian, untuk "korelasi antara pengukuran yang dilakukan pada saudara kandung dalam keluarga yang sama untuk item yang sama ," kita dapat melakukan hal yang sama tetapi hanya mengelompokkan data kami, jadi kami memiliki sesuatu seperti:

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

Saya pikir ini mungkin pendekatan yang lebih mudah untuk pertanyaan Anda. Tetapi, jika Anda hanya menginginkan ICC untuk item atau keluarga, paket 'psych' memiliki fungsi ICC () - hanya berhati-hati tentang bagaimana item dan nilai dilebur dalam data contoh Anda.

Memperbarui

Beberapa di bawah ini baru bagi saya, tetapi saya senang mengatasinya. Saya benar-benar tidak terbiasa dengan gagasan korelasi intraclass negatif. Meskipun saya melihat di Wikipedia bahwa “definisi ICC awal” memungkinkan adanya korelasi negatif dengan data berpasangan. Tapi seperti yang paling umum digunakan sekarang, ICC dipahami sebagai proporsi dari total varian yang merupakan varian antar-kelompok. Dan nilai ini selalu positif. Meskipun Wikipedia mungkin bukan referensi yang paling otoritatif, ringkasan ini sesuai dengan bagaimana saya selalu melihat ICC digunakan:

Keuntungan dari kerangka kerja ANOVA ini adalah bahwa kelompok yang berbeda dapat memiliki jumlah nilai data yang berbeda, yang sulit untuk ditangani menggunakan statistik ICC sebelumnya. Perhatikan juga bahwa ICC ini selalu non-negatif, yang memungkinkannya untuk ditafsirkan sebagai proporsi dari total varian yang "antara kelompok." ICC ini dapat digeneralisasi untuk memungkinkan efek kovariat, dalam hal ini ICC ditafsirkan sebagai menangkap kesamaan dalam kelas dari nilai data yang disesuaikan kovariat.

Yang mengatakan, dengan data seperti yang Anda berikan di sini, korelasi antar kelas antara item 1, 2, dan 3 bisa sangat negatif. Dan kita dapat memodelkan ini, tetapi proporsi perbedaan yang dijelaskan antara kelompok-kelompok masih akan positif.

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

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

Jadi berapa persentase varians di antara keluarga, mengendalikan juga untuk antara varians kelompok antara item-kelompok? Kami dapat menggunakan model intersepsi acak seperti yang Anda sarankan:

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

Kami menghitung ICC dengan mendapatkan varians dari dua intersep efek acak dan dari residu. Kami kemudian menghitung kuadrat varians keluarga di atas jumlah kuadrat dari semua varians.

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

Kami kemudian dapat melakukan hal yang sama untuk dua estimasi varians lainnya:

# 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

Hasil ini menunjukkan bahwa sangat sedikit dari total varians yang dijelaskan oleh varians antar keluarga atau antar kelompok barang. Tetapi, seperti disebutkan di atas, korelasi antar kelas antara item masih bisa negatif. Pertama mari kita dapatkan data kita dalam format yang lebih luas:

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

Sekarang kita dapat memodelkan korelasi antara, misalnya, item1 dan item3 dengan intersep acak untuk keluarga seperti sebelumnya. Tapi pertama-tama, mungkin perlu diingat bahwa untuk regresi linier sederhana, akar kuadrat dari model r-kuadrat adalah sama dengan koefisien korelasi antar kelas (pearson r) untuk item1 dan item2.

# 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

Hubungan antara item1 dan item3 positif. Tapi, hanya untuk memeriksa bahwa kita bisa mendapatkan korelasi negatif di sini, mari kita memanipulasi data kami:

# 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

Jadi ya, hubungan antar item bisa negatif. Tetapi jika kita melihat proporsi varians yang ada di antara keluarga-keluarga dalam hubungan ini, yaitu ICC (keluarga), angka itu masih akan positif. Seperti sebelumnya:

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

Jadi untuk hubungan antara item1 dan item3, sekitar 17% dari varian ini adalah karena perbedaan antar keluarga. Dan, kami masih mengizinkan adanya korelasi negatif antar item.

5ayat
sumber
Terima kasih atas sarannya, tetapi saya tidak melihat bagaimana ini akan memberikan korelasi. Saya memposting beberapa data di sini: wvbauer.com/fam_sib_item.dat Perhatikan bahwa saya ingin memperkirakan 9 korelasi yang berbeda (ditambah varian 3 item).
Wolfgang
Kemudian saya sarankan untuk melihat Pertanyaan Pertama yang terkait di sini . Jawaban dalam posting ini sangat bagus jika apa yang akhirnya Anda cari adalah sembilan ICC saja.
5ayat
Terima kasih lagi, tapi tetap saja - bagaimana hal itu menyediakan sembilan ICC? Model yang dibahas di sana tidak menyediakan itu. Selain itu, ini adalah model komponen ragam yang tidak memungkinkan ICC negatif, tetapi seperti yang saya sebutkan, saya tidak berharap semua ICC positif.
Wolfgang
Saya tidak terbiasa dengan masalah ICC negatif dalam model seperti ini - tidak ada kendala seperti itu di sini. Tetapi untuk menghitung korelasi ini, ketika Anda melihat ringkasan model Anda dengan kode di atas, Anda memiliki tiga perkiraan varians: keluarga, item, dan residual. Jadi misalnya, seperti dijelaskan dalam posting lain, ICC (keluarga), akan menjadi var (keluarga) ^ 2 / (var (keluarga) ^ 2 + var (item) ^ 2) + var (residual) ^ 2). Dengan kata lain varians dari hasil Anda kuadratkan atas jumlah varians-kuadrat untuk dua efek acak dan residual. Ulangi untuk Anda 9 kombinasi keluarga dan item.
5ayat
1
Manakah dari 9 ICC berbeda yang var(family)^2/(var(family)^2+var(item)^2)+var(residual)^2)bersesuaian? Dan ya, ICC bisa negatif. Seperti yang saya jelaskan di awal pertanyaan saya, orang dapat langsung memperkirakan ICC dengan gls()modelnya, yang memungkinkan untuk perkiraan negatif. Di sisi lain, model komponen varians tidak memungkinkan untuk perkiraan negatif.
Wolfgang