Коефіцієнти кореляції внутрішньокласового рівня (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)

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

Будь-які ідеї / пропозиції, як я можу підійти до цього? Заздалегідь дякую за будь-яку допомогу!

Відповіді:


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".

Але, спершу ми повинні дати кожному рідному брату унікальний ідентифікатор, а не унікальний ідентифікатор в сім'ї.

Тоді для "співвідношення між вимірюваннями, проведеними на братів і сестер у межах однієї сім'ї для різних предметів", ми можемо вказати щось на кшталт:

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

Це дасть нам перехоплення фіксованих ефектів для всіх братів і сестер, а потім два перехоплення випадкових ефектів (з відхиленням) для сім'ї та предмета.

Тоді, для "співвідношення між вимірюваннями, проведеними на братів і сестер в одній родині для одного і того ж предмета", ми можемо зробити те ж саме, але просто підмножимо наші дані, тому у нас є щось на зразок:

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

Я думаю, що це може бути простішим підходом до вашого питання. Але, якщо ви просто хочете ICC для елемента чи сім'ї, пакет "psych" має функцію ICC () - будьте обережні, як предмет та значення плавляться у ваших даних прикладу.

Оновлення

Деякі з наведених нижче для мене є новими, але мені подобалося опрацьовувати це. Я дійсно не знайомий з ідеєю негативної внутрішньокласової кореляції. Хоча в Вікіпедії я бачу, що «раннє визначення ICC» допускало негативну кореляцію з парними даними. Але як це найчастіше використовується зараз, ICC розуміється як частка загальної дисперсії, яка є дисперсією між групами. І це значення завжди позитивне. Хоча Вікіпедія може бути не найавторитетнішою посиланням, цей підсумок відповідає тому, як я завжди бачив 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-квадрата моделі є таким же, як міжкласовий коефіцієнт кореляції (r. Пірсона) для item1 та 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

Зв'язок між пунктом1 та позицією3 позитивний. Але, щоб перевірити, чи ми можемо отримати тут негативну кореляцію, давайте маніпулюємо нашими даними:

# 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

Отже, для зв’язку між item1 та item3 приблизно 17% цієї дисперсії пов'язано з дисперсією між сім'ями. І ми все ще допускаємо наявність негативного співвідношення між елементами.


Дякую за пропозицію, але я не бачу, як це насправді забезпечить співвідношення. Тут я розмістив деякі дані: wvbauer.com/fam_sib_item.dat Зверніть увагу, що я хочу оцінити 9 різних кореляцій (плюс 3 варіації варіантів).
Вольфганг

Тоді пропоную ознайомитись із першим у списку пов’язаних питань тут . Відповідь у цій публікації дуже хороша, якщо ви шукаєте лише дев’ять різних МСК.
5ayat

Ще раз спасибі, але все-таки - як це надає дев’ять ІСС? Розглянута там модель не передбачає цього. Крім того, це варіант дисперсійної складової, який не допускатиме негативних ІКС, але, як я вже згадував, я не очікую, що всі МКК будуть позитивними.
Вольфганг

Я не знайомий з проблемою негативного ІСС в такій моделі - таких обмежень тут немає. Але для обчислення цього співвідношення, коли ви дивитесь підсумок вашої моделі з вищевказаним кодом, у вас є три оцінки дисперсії: сімейний, предметний та залишковий. Так, наприклад, як пояснено в іншій посаді, ICC (родина) буде var (сімейство) ^ 2 / (var (сімейство) ^ 2 + var (пункт) ^ 2) + var (залишковий) ^ 2). Іншими словами, дисперсія вашого результату у квадраті над сумою дисперсії у квадраті для двох випадкових ефектів та залишків. Повторіть для вас 9 комбінацій сімейства та предметів.
5ayat

1
Кому з 9 різних МКК var(family)^2/(var(family)^2+var(item)^2)+var(residual)^2)відповідає? І так, ICC можуть бути негативними. Як я описав на початку свого запитання, можна безпосередньо оцінити МКК за допомогою gls()моделі, яка дозволяє отримати негативні оцінки. З іншого боку, варіанти дисперсійних компонентів не допускають негативних оцінок.
Вольфганг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.