ICC als erwartete Korrelation zwischen zwei zufällig gezogenen Einheiten, die sich in derselben Gruppe befinden


12

Bei der mehrstufigen Modellierung wird die Intraclass-Korrelation häufig aus einer ANOVA mit Zufallseffekten berechnet

yichj=γ00+uj+eichj

Dabei sind die Residuen der Ebene 2 und die Residuen der Ebene 1. Dann erhalten wir Schätzungen, und für die Varianz von und und fügen sie in die folgende Gleichung ein:ujeichjσ^u2σ^e2ujeichj

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

Hox (2002) schreibt auf S. 15, dass

Die Intraclass-Korrelation ρ kann auch als die erwartete Korrelation zwischen zwei zufällig gezeichneten Einheiten interpretiert werden, die sich in derselben Gruppe befinden

Es ist eine Frage hier , die eine erweiterte Frage stellt (warum es genau gleich ist dies statt etwa gleich) und erhält eine erweiterte Antwort.

Ich möchte jedoch eine viel einfachere Frage stellen.

Frage: Was bedeutet es überhaupt, über eine Korrelation zwischen zwei zufällig gezogenen Einheiten zu sprechen, die zu derselben Gruppe gehören?

Ich habe ein grundlegendes Verständnis der Tatsache, dass die Intraclass-Korrelation für Gruppen und nicht für gepaarte Daten funktioniert. Ich verstehe jedoch immer noch nicht, wie die Korrelation berechnet werden könnte, wenn wir nur zwei zufällig gezogene Einheiten aus derselben Gruppe hätten. Wenn ich mir zum Beispiel die Punktdiagramme auf der Wikipedia-Seite für ICC anschaue , haben wir mehrere Gruppen und mehrere Punkte in jeder Gruppe.

Antworten:


10

Es ist möglicherweise am einfachsten, die Äquivalenz zu erkennen, wenn Sie einen Fall in Betracht ziehen, in dem nur zwei Personen pro Gruppe vorhanden sind. Lass uns also ein konkretes Beispiel durchgehen (ich werde dafür R verwenden):

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

Wir haben also 8 Gruppen mit jeweils 2 Personen. Passen wir nun das ANOVA-Modell mit zufälligen Effekten an:

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

Und zum Schluss berechnen wir den ICC:

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

Dies ergibt: 0.7500003(es ist 0,75, um genau zu sein, aber es gibt hier einen geringfügigen numerischen Eindruck im Schätzverfahren).

Lassen Sie uns nun die Daten vom Langformat in das Breitformat umformen:

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

Es sieht jetzt so aus:

   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

Und jetzt berechnen Sie die Korrelation zwischen y.1und y.2:

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

Dies ergibt: 0.8161138

Warte was? Was ist denn hier los? Sollte es nicht 0,75 sein? Nicht ganz! Was ich oben berechnet habe, ist nicht der ICC ( Intraclass- Korrelationskoeffizient), sondern der reguläre Pearson-Produkt-Moment-Korrelationskoeffizient, der ein Interclass- Korrelationskoeffizient ist. Es ist zu beachten, dass es in den Langformatdaten völlig willkürlich ist, wer Person 1 und wer Person 2 ist - die Paare sind ungeordnet. Sie könnten die Daten innerhalb von Gruppen neu mischen und Sie würden die gleichen Ergebnisse erhalten. Bei den großformatigen Daten ist es jedoch nicht willkürlich, wer unter y.1und wer unter aufgeführt ist y.2. Wenn Sie einige der Personen umschalten würden, würden Sie eine andere Korrelation erhalten (außer wenn Sie alle umschalten würden - dann ist dies äquivalent zucor(dat[,3], dat[,2])was dir natürlich noch gibt 0.8161138).

Was Fisher hervorhob, ist ein kleiner Trick, um den ICC mit den großformatigen Daten zu erhalten. Lassen Sie jedes Paar zweimal in beide Ordnungen einschließen und berechnen Sie dann die Korrelation:

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

Daraus ergibt sich : 0.75.

Wie Sie sehen, ist der ICC tatsächlich ein Korrelationskoeffizient - für die "ungepaarten" Daten von zwei Personen aus derselben Gruppe.

Wenn es mehr als zwei Personen pro Gruppe gäbe, können Sie sich das ICC immer noch so vorstellen, außer dass es mehr Möglichkeiten gibt, Paare von Personen innerhalb von Gruppen zu erstellen. Der ICC ist dann die Korrelation zwischen allen möglichen Paaren (wiederum auf ungeordnete Weise).


7

@Wolfgang hat schon eine tolle Antwort gegeben. Ich möchte es ein wenig erweitern, um zu zeigen, dass Sie auch zu dem geschätzten ICC von 0,75 in seinem Beispieldatensatz gelangen können, indem Sie den intuitiven Algorithmus der zufälligen Auswahl vieler Paare von Werten buchstäblich implementieren - wobei die Mitglieder jedes Paares von der stammen gleiche Gruppe - und dann einfach ihre Korrelation berechnen. Und dann kann das gleiche Verfahren leicht auf Datensätze mit Gruppen beliebiger Größe angewendet werden, wie ich auch zeigen werde.y

Zuerst laden wir den Datensatz von @ Wolfgang (hier nicht gezeigt). Definieren wir nun eine einfache R-Funktion, die ein data.frame nimmt und ein einzelnes zufällig ausgewähltes Beobachtungspaar aus derselben Gruppe zurückgibt:

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

Hier ist ein Beispiel dafür, was wir erhalten, wenn wir diese Funktion 10 Mal auf dem Datensatz von @ Wolfgang aufrufen:

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

Um nun den ICC abzuschätzen, rufen wir diese Funktion einfach mehrmals auf und berechnen dann die Korrelation zwischen den beiden Spalten.

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

Das gleiche Verfahren kann ohne Änderungen auf Datensätze mit Gruppen beliebiger Größe angewendet werden. Erstellen wir beispielsweise einen Datensatz, der aus 100 Gruppen mit jeweils 100 Beobachtungen besteht, wobei der wahre ICC wie im Beispiel von @ Wolfgang auf 0,75 festgelegt ist.

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

Bildbeschreibung hier eingeben

Wenn wir den ICC anhand der Varianzkomponenten eines gemischten Modells schätzen, erhalten wir:

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

Und wenn wir das zufällige Paarungsverfahren anwenden, erhalten wir

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

was eng mit der Varianzkomponentenschätzung übereinstimmt.

Beachten Sie, dass das Zufallspaarungsverfahren zwar intuitiv und didaktisch nützlich ist, die von @Wolfgang veranschaulichte Methode jedoch viel intelligenter ist. Für einen Datensatz wie diesen mit der Größe 100 * 100 beträgt die Anzahl der eindeutigen gruppeninternen Paarungen (ohne Selbstpaarungen) 505.000 - eine große, aber keine astronomische Zahl -, sodass wir die Korrelation durchaus berechnen können der vollständig erschöpften Menge aller möglichen Paarungen, anstatt zufällig aus dem Datensatz zu stichproben. Hier ist eine Funktion, um alle möglichen Paarungen für den allgemeinen Fall mit Gruppen beliebiger Größe abzurufen:

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

Wenn wir nun diese Funktion auf den 100 * 100-Datensatz anwenden und die Korrelation berechnen, erhalten wir:

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

Was gut mit den anderen beiden Schätzungen übereinstimmt und mit dem Zufallspaarungsverfahren verglichen wird, ist viel schneller zu berechnen und sollte auch eine effizientere Schätzung im Sinne einer geringeren Varianz sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.