ICC як очікувана кореляція між двома випадковим чином виведеними одиницями, які знаходяться в одній групі


12

При багаторівневому моделюванні внутрішньокласова кореляція часто розраховується на основі ANOVA випадкових ефектів

yij=γ00+uj+eij

де - рівня 2, а - залишки рівня 1. Тоді отримуємо оцінки, та для дисперсії та відповідно, і підключаємо їх до наступного рівняння:е я J σ 2 U σ 2 е у J е я Jujeijσ^u2σ^e2ujeij

ρ=σ^u2σ^u2+σ^e2

Hox (2002) пише на p15, що

Внутрішньокласне співвідношення ρ також можна інтерпретувати як очікувану кореляцію між двома випадково намальованими одиницями, які знаходяться в одній групі

Там є питання тут , що запитує просунутий питання (чому саме одно це замість приблизно рівні) і отримує розширений відповідь.

Однак я хочу задати набагато простіше питання.

Запитання: Що навіть означає говорити про співвідношення двох випадково намальованих одиниць, які знаходяться в одній групі?

Я маю основне розуміння того факту, що внутрішньокласова кореляція працює на групах, а не на парних даних. Однак я все ще не розумію, як можна було б обчислити співвідношення, якби у нас було дві випадково намальовані одиниці з однієї групи. Якщо я дивлюся на графіки точок на сторінці Вікіпедії для ICC , наприклад, у нас є кілька груп та кілька точок у кожній групі.

Відповіді:


10

Еквівалентність може бути найпростішою, якщо розглянути випадок, коли в групі є лише дві особи. Отже, переглянемо конкретний приклад (для цього я використаю R):

dat <- read.table(header=TRUE, text = "
group person   y
1     1        5
1     2        6
2     1        3
2     2        2
3     1        7
3     2        9
4     1        2
4     2        2
5     1        3
5     2        5
6     1        6
6     2        9
7     1        4
7     2        2
8     1        8
8     2        7")

Отже, у нас 8 груп по 2 особи в кожній. Тепер підходимо до моделі ANOVA з випадковими ефектами:

library(nlme)
res <- lme(y ~ 1, random = ~ 1 | group, data=dat, method="ML")

І, нарешті, давайте обчислимо ICC:

getVarCov(res)[1] / (getVarCov(res)[1] + res$sigma^2)

Це дає: 0.7500003(точніше 0,75, але в процедурі оцінки тут є невелике числове враження).

Тепер давайте переробимо дані з довгого формату в широкий формат:

dat <- as.matrix(reshape(dat, direction="wide", v.names="y", idvar="group", timevar="person"))

Це виглядає приблизно так:

   group y.1 y.2
1      1   5   6
3      2   3   2
5      3   7   9
7      4   2   2
9      5   3   5
11     6   6   9
13     7   4   2
15     8   8   7

А тепер обчисліть кореляцію між y.1та y.2:

cor(dat[,2], dat[,3])

Це дає: 0.8161138

Чекати, що? Що тут відбувається? Чи не повинно бути 0,75? Не зовсім! Що я прорахував вище, це не МКК ( коефіцієнт внутрішньокласової кореляції), а звичайний коефіцієнт кореляції Пірсона між моментом, який є коефіцієнтом міжкласової кореляції. Зауважте, що у даних довгоформатного формату абсолютно довільно, хто є людина 1, а хто - людина 2 - пари не упорядковані. Ви можете перегрупувати дані в межах груп, і ви отримаєте однакові результати. Але в даних широкого формату не є довільним, хто вказаний у списку, y.1а хто під ним y.2. Якби ви переключилися на когось із людей, ви отримали б іншу кореляцію (за винятком випадків, коли ви переходили б на них усіх - тоді це еквівалентноcor(dat[,3], dat[,2])що, звичайно, все ж дає тобі 0.8161138).

Те, що Фішер зазначив, - це невелика хитрість отримати ICC з широкоформатними даними. Кожна пара повинна бути включена двічі в обох порядках, а потім обчислити співвідношення:

dat <- rbind(dat, dat[,c(1,3,2)])
cor(dat[,2], dat[,3])

Це дає: 0.75.

Отже, як бачите, МКК - це дійсно коефіцієнт кореляції - для "непарних" даних двох осіб з однієї групи.

Якби в групі було більше двох осіб, ви все ще можете думати про МКК таким чином, за винятком того, що було б більше способів створення пар осіб у групах. ICC - це кореляція між усіма можливими попарностями (знову ж таки неупорядкованим способом).


7

@Wolfgang вже дав чудову відповідь. Я хочу трохи розширити його, щоб показати, що ви також можете прийти до передбачуваного ICC в 0,75 у своєму прикладі набору даних, буквально реалізуючи інтуїтивний алгоритм випадкового вибору безлічі пар значень - звідки члени кожної пари походять з ту ж групу - а потім просто обчислити їх співвідношення. І тоді цю саму процедуру можна легко застосувати до наборів даних із групами будь-якого розміру, як я також покажу.y

Спочатку завантажуємо набір даних @ Wolfgang (тут не показано). Тепер давайте визначимо просту функцію R, яка приймає data.frame і повертає одну випадкову обрану пару спостережень з тієї ж групи:

get_random_pair <- function(df){
  # select a random row
  i <- sample(nrow(df), 1)
  # select a random other row from the same group
  # (the call to rep() here is admittedly odd, but it's to avoid unwanted
  # behavior when the first argument to sample() has length 1)
  j <- sample(rep(setdiff(which(dat$group==dat[i,"group"]), i), 2), 1)
  # return the pair of y-values
  c(df[i,"y"], df[j,"y"])
}

Ось приклад того, що ми отримуємо, якщо 10 разів називати цю функцію на наборі даних @ Wolfgang:

test <- replicate(10, get_random_pair(dat))
t(test)
#       [,1] [,2]
#  [1,]    9    6
#  [2,]    2    2
#  [3,]    2    4
#  [4,]    3    5
#  [5,]    3    2
#  [6,]    2    4
#  [7,]    7    9
#  [8,]    5    3
#  [9,]    5    3
# [10,]    3    2

Тепер для оцінки ICC ми просто називаємо цю функцію велику кількість разів, а потім обчислюємо кореляцію між двома стовпцями.

random_pairs <- replicate(100000, get_random_pair(dat))
cor(t(random_pairs))
#           [,1]      [,2]
# [1,] 1.0000000 0.7493072
# [2,] 0.7493072 1.0000000

Цю саму процедуру можна застосовувати, не змінюючи зовсім, до наборів даних із групами будь-якого розміру. Наприклад, давайте створимо набір даних, що складається з 100 груп по 100 спостережень у кожній, істинний ICC встановлений на 0,75, як у прикладі @ Вольфганга.

set.seed(12345)
group_effects <- scale(rnorm(100))*sqrt(4.5)
errors <- scale(rnorm(100*100))*sqrt(1.5)
dat <- data.frame(group = rep(1:100, each=100),
                  person = rep(1:100, times=100),
                  y = rep(group_effects, each=100) + errors)

stripchart(y ~ group, data=dat, pch=20, col=rgb(0,0,0,.1), ylab="group")

введіть тут опис зображення

Оцінюючи ICC на основі дисперсійних компонентів зі змішаної моделі, ми отримуємо:

library("lme4")
mod <- lmer(y ~ 1 + (1|group), data=dat, REML=FALSE)
summary(mod)
# Random effects:
#  Groups   Name        Variance Std.Dev.
#  group    (Intercept) 4.502    2.122   
#  Residual             1.497    1.223   
# Number of obs: 10000, groups:  group, 100

4.502/(4.502 + 1.497)
# 0.7504584

І якщо ми застосуємо процедуру випадкового спарювання, отримаємо

random_pairs <- replicate(100000, get_random_pair(dat))
cor(t(random_pairs))
#           [,1]      [,2]
# [1,] 1.0000000 0.7503004
# [2,] 0.7503004 1.0000000

що тісно узгоджується з оцінкою дисперсійної складової.

Зауважте, що хоча процедура випадкового сполучення є начебто інтуїтивно зрозумілою та дидактично корисною, метод, проілюстрований @Wolfgang, насправді набагато розумніший. Для такого набору даних, як цей розміром 100 * 100, кількість унікальних пар в межах групи (не включаючи самопари) становить 505 000 - велике, але не астрономічне число - так що нам цілком можливо обчислити кореляцію повного вичерпаного набору всіх можливих пар, а не потребувати вибіркової вибірки з набору даних. Ось функція для отримання всіх можливих пар для загального випадку з групами будь-якого розміру:

get_all_pairs <- function(df){
  # do this for every group and combine the results into a matrix
  do.call(rbind, by(df, df$group, function(group_df){
    # get all possible pairs of indices
    i <- expand.grid(seq(nrow(group_df)), seq(nrow(group_df)))
    # remove self-pairings
    i <- i[i[,1] != i[,2],]
    # return a 2-column matrix of the corresponding y-values
    cbind(group_df[i[,1], "y"], group_df[i[,2], "y"])
  }))
}

Тепер, якщо ми застосуємо цю функцію до набору даних 100 * 100 і обчислимо кореляцію, отримаємо:

cor(get_all_pairs(dat))
#           [,1]      [,2]
# [1,] 1.0000000 0.7504817
# [2,] 0.7504817 1.0000000

Що добре узгоджується з іншими двома оцінками, і порівняно з процедурою випадкового парування, набагато швидше обчислити, а також має бути більш ефективною оцінкою в сенсі меншої дисперсії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.