ICC como correlación esperada entre dos unidades extraídas al azar que están en el mismo grupo


12

En el modelado multinivel, la correlación intraclase a menudo se calcula a partir de un ANOVA de efectos aleatorios

yyoj=γ00+tuj+miyoj

donde son los residuos de nivel 2 y son los residuos de nivel 1. Luego obtenemos estimaciones, y para la varianza de y respectivamente, y las conectamos a la siguiente ecuación:e i j σ 2 u σ 2 e u j e i jtujmiyojσ^tu2σ^mi2tujmiyoj

ρ=σ^tu2σ^tu2+σ^mi2

Hox (2002) escribe en p15 que

La correlación intraclase ρ también se puede interpretar como la correlación esperada entre dos unidades extraídas al azar que están en el mismo grupo

Hay una pregunta aquí que hace una pregunta avanzado (por qué es exactamente igual a este lugar de aproximadamente igual) y obtiene una respuesta avanzada.

Sin embargo, deseo hacer una pregunta mucho más simple.

Pregunta: ¿Qué significa siquiera hablar de una correlación entre dos unidades extraídas al azar que están en el mismo grupo?

Tengo una comprensión básica del hecho de que la correlación intraclase funciona en grupos y no en datos emparejados. Sin embargo, todavía no entiendo cómo se podría calcular la correlación si todo lo que tuviéramos fueran dos unidades extraídas al azar del mismo grupo. Si miro las gráficas de puntos en la página de Wikipedia para ICC , por ejemplo, tenemos múltiples grupos y múltiples puntos dentro de cada grupo.

Respuestas:


10

Puede ser más fácil ver la equivalencia si considera un caso en el que solo hay dos individuos por grupo. Entonces, veamos un ejemplo específico (usaré R para esto):

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

Entonces, tenemos 8 grupos con 2 individuos cada uno. Ahora ajustemos el modelo ANOVA de efectos aleatorios:

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

Y finalmente, calculemos el ICC:

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

Esto produce: 0.7500003(es 0,75 para ser exactos, pero hay una ligera impresión numérica en el procedimiento de estimación aquí).

Ahora modifiquemos los datos del formato largo al formato ancho:

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

Se ve así ahora:

   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 ahora calcule la correlación entre y.1y y.2:

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

Esto produce: 0.8161138

¿Esperar lo? ¿Que está pasando aqui? ¿No debería ser 0,75? ¡No exactamente! Lo que he calculado anteriormente no es el ICC ( coeficiente de correlación intraclase ), sino el coeficiente de correlación de momento del producto Pearson regular, que es un coeficiente de correlación interclase . Tenga en cuenta que en los datos de formato largo, es completamente arbitrario quién es la persona 1 y quién es la persona 2: los pares no están ordenados. Podría reorganizar los datos dentro de los grupos y obtendría los mismos resultados. Pero en los datos de formato ancho, no es arbitrario quién figura en la lista y.1y quién figura en la lista y.2. Si tuviera que cambiar algunas de las personas, obtendría una correlación diferente (excepto si tuviera que cambiar a todas ellas, entonces esto es equivalente acor(dat[,3], dat[,2])que por supuesto aún te da 0.8161138).

Lo que Fisher señaló es un pequeño truco para obtener el ICC con los datos de formato ancho. Haga que cada par se incluya dos veces, en ambas órdenes, y luego calcule la correlación:

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

Esto produce: 0.75.

Entonces, como puede ver, el ICC es realmente un coeficiente de correlación, para los datos "no apareados" de dos individuos del mismo grupo.

Si hubiera más de dos personas por grupo, aún puede pensar en la CPI de esa manera, excepto que habría más formas de crear pares de personas dentro de los grupos. El ICC es entonces la correlación entre todos los emparejamientos posibles (de nuevo de manera desordenada).


7

@Wolfgang ya dio una gran respuesta. Quiero ampliarlo un poco para mostrar que también puede llegar al ICC estimado de 0,75 en su conjunto de datos de ejemplo al implementar literalmente el algoritmo intuitivo de seleccionar aleatoriamente muchos pares de valores , de donde provienen los miembros de cada par mismo grupo, y luego simplemente calculando su correlación. Y luego, este mismo procedimiento puede aplicarse fácilmente a conjuntos de datos con grupos de cualquier tamaño, como también mostraré.y

Primero cargamos el conjunto de datos de @ Wolfgang (no se muestra aquí). Ahora definamos una función R simple que tome un data.frame y devuelva un solo par de observaciones seleccionadas al azar del mismo grupo:

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"])
}

Aquí hay un ejemplo de lo que obtenemos si llamamos a esta función 10 veces en el conjunto de datos de @ 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

Ahora, para estimar el ICC, simplemente llamamos a esta función un gran número de veces y luego calculamos la correlación entre las dos columnas.

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

Este mismo procedimiento se puede aplicar, sin modificaciones en absoluto, a conjuntos de datos con grupos de cualquier tamaño. Por ejemplo, creemos un conjunto de datos que consta de 100 grupos de 100 observaciones cada uno, con el ICC verdadero establecido en 0,75 como en el ejemplo de @ Wolfgang.

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

ingrese la descripción de la imagen aquí

Estimando el ICC basado en los componentes de varianza de un modelo mixto, obtenemos:

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

Y si aplicamos el procedimiento de emparejamiento aleatorio, obtenemos

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

que concuerda estrechamente con la estimación del componente de varianza.

Tenga en cuenta que si bien el procedimiento de emparejamiento aleatorio es intuitivo y didácticamente útil, el método ilustrado por @Wolfgang es en realidad mucho más inteligente. Para un conjunto de datos como este de tamaño 100 * 100, el número de emparejamientos únicos dentro del grupo (sin incluir los emparejamientos propios) es de 505,000, un número grande pero no astronómico, por lo que es totalmente posible para nosotros calcular la correlación del conjunto completamente agotado de todos los emparejamientos posibles, en lugar de necesitar muestrear aleatoriamente desde el conjunto de datos. Aquí hay una función para recuperar todos los emparejamientos posibles para el caso general con grupos de cualquier tamaño:

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"])
  }))
}

Ahora, si aplicamos esta función al conjunto de datos 100 * 100 y calculamos la correlación, obtenemos:

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

Lo que concuerda bien con las otras dos estimaciones, y en comparación con el procedimiento de emparejamiento aleatorio, es mucho más rápido de calcular, y también debería ser una estimación más eficiente en el sentido de tener menos varianza.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.