Intraclass Correlation Coefficients (ICC) mit mehreren Variablen

13

Angenommen, ich habe eine Variable in Geschwistern gemessen, die in Familien verschachtelt sind. Die Datenstruktur sieht folgendermaßen aus:

Wert für Familiengeschwister
------ ------- -----
1 1 y_11
1 2 y_12
2 1 y_21
2 2 y_22
2 3 y_23
... ... ...

Ich möchte die Korrelation zwischen Messungen an Geschwistern derselben Familie kennen. Die übliche Vorgehensweise besteht darin, den ICC auf der Grundlage eines Zufallsschnittstellenmodells zu berechnen:

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

Dies wäre äquivalent zu:

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

mit der Ausnahme, dass der letztere Ansatz auch einen negativen ICC zulässt.

Angenommen, ich habe drei Elemente in Geschwistern gemessen, die in Familien verschachtelt sind. Die Datenstruktur sieht also so aus:

Wert des Familiengeschwisterartikels
------ ------- ---- -----
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
... ... ... ...

Nun möchte ich Folgendes herausfinden:

  1. die Korrelation zwischen Messungen, die an Geschwistern derselben Familie für denselben Gegenstand vorgenommen wurden
  2. die Korrelation zwischen Messungen, die an Geschwistern derselben Familie für verschiedene Gegenstände vorgenommen wurden

Wenn ich nur Geschwisterpaare in Familien hätte, würde ich einfach tun:

res <- gls(yijk ~ item, correlation = corSymm(form = ~ 1 | family), 
           weights = varIdent(form = ~ 1 | item), data=dat)

Das gibt mir eine Var-Cov-Matrix auf den Resten der Form: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

Irgendwelche Ideen / Vorschläge, wie ich das angehen könnte? Vielen Dank im Voraus für jede Hilfe!

Wolfgang
quelle

Antworten:

1

Das Paket MCMCglmm kann leicht Kovarianzstrukturen und zufällige Effekte handhaben und abschätzen. Es werden jedoch bayesianische Statistiken verwendet, die neue Benutzer einschüchtern können. In den MCMCglmm-Kursnotizen finden Sie eine ausführliche Anleitung zu MCMCglmm und Kapitel 5, insbesondere zu dieser Frage. Ich empfehle unbedingt, die Modellkonvergenz und das Mischen von Ketten zu untersuchen, bevor Sie Daten in MCMCglmm für real analysieren.

library(MCMCglmm)

MCMCglmm verwendet Priors, dies ist ein nicht informativer inverser Wishart-Prior.

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

Passen Sie das Modell

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)

In der Modellzusammenfassung summary(m)beschreibt die G-Struktur die Varianz und Kovarianz der zufälligen Abschnitte. Die R-Struktur beschreibt die Varianz und Kovarianz des Abschnitts des Beobachtungsniveaus, die als Residuen in MCMCglmm fungieren.

Wenn Sie bayesianischer Überzeugungskraft sind, können Sie die gesamte hintere Verteilung der Ko- / Varianz-Terme erhalten m$VCV. Beachten Sie, dass dies Abweichungen sind, nachdem die festen Effekte berücksichtigt wurden.

Daten simulieren

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]

Das Schätzen der ursprünglichen Ko / Varianz der zufälligen Effekte erfordert eine große Anzahl von Stufen für den zufälligen Effekt. Stattdessen schätzt Ihr Modell wahrscheinlich die beobachteten Ko / Varianzen, die durch berechnet werden könnencov(group_var)

DA Wells
quelle
0

Wenn Sie einen "Familieneffekt" und einen "Gegenstandseffekt" erzielen möchten, können wir uns vorstellen, dass es für beide zufällige Abschnitte gibt, und diese dann mit dem Paket "lme4" modellieren.

Aber zuerst müssen wir jedem Geschwister eine eindeutige ID geben, anstatt einer eindeutigen ID innerhalb der Familie.

Dann können wir für "die Korrelation zwischen Messungen an Geschwistern innerhalb derselben Familie für verschiedene Elemente" Folgendes angeben:

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

Dies gibt uns einen festen Effektabschnitt für alle Geschwister und dann zwei zufällige Effektabschnitte (mit Varianz) für Familie und Gegenstand.

Dann können wir für "die Korrelation zwischen Messungen, die an Geschwistern innerhalb derselben Familie für denselben Gegenstand vorgenommen wurden" dasselbe tun, aber nur unsere Daten unterteilen, so dass wir ungefähr Folgendes haben:

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

Ich denke, dies könnte eine einfachere Herangehensweise an Ihre Frage sein. Wenn Sie jedoch nur den ICC für einen Artikel oder eine Familie haben möchten, verfügt das "psych" -Paket über eine ICC () -Funktion - seien Sie nur vorsichtig, wie Artikel und Wert in Ihren Beispieldaten verschmolzen werden.

Aktualisieren

Einige der folgenden Punkte sind neu für mich, aber ich habe es genossen, daran zu arbeiten. Ich kenne die Idee der negativen Intraclass-Korrelation wirklich nicht. Auf Wikipedia sehe ich allerdings, dass „frühe ICC-Definitionen“ eine negative Korrelation mit gepaarten Daten zuließen. Aber wie es derzeit am häufigsten verwendet wird, versteht man unter ICC den Anteil der Gesamtvarianz zwischen den Gruppen. Und dieser Wert ist immer positiv. Während Wikipedia möglicherweise nicht die maßgeblichste Referenz ist, entspricht diese Zusammenfassung der bisherigen Verwendung von ICC:

Ein Vorteil dieses ANOVA-Frameworks besteht darin, dass verschiedene Gruppen unterschiedliche Anzahlen von Datenwerten aufweisen können, was mit den früheren ICC-Statistiken schwierig zu handhaben ist. Beachten Sie auch, dass dieser ICC immer nicht negativ ist, sodass er als Anteil der Gesamtvarianz interpretiert werden kann, der „zwischen Gruppen“ liegt. Dieser ICC kann verallgemeinert werden, um kovariate Effekte zu berücksichtigen. In diesem Fall wird der ICC als Erfassung des ICC interpretiert klasseninterne Ähnlichkeit der kovariatenbereinigten Datenwerte.

Bei Daten wie den hier angegebenen kann die Korrelation zwischen den Klassen zwischen den Elementen 1, 2 und 3 durchaus negativ sein. Und wir können dies modellieren, aber der Anteil der erklärten Varianz zwischen den Gruppen wird immer noch positiv sein.

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

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

Welcher Prozentsatz der Varianz ist also zwischen Familien, wobei auch die Varianz zwischen Gruppen zwischen Artikelgruppen kontrolliert wird? Wir können ein zufälliges Abfangmodell verwenden, wie Sie es vorgeschlagen haben:

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

Wir berechnen den ICC, indem wir die Varianz aus den beiden zufälligen Effektabschnitten und aus den Residuen ermitteln. Wir berechnen dann das Quadrat der Familienvarianz über die Summe der Quadrate aller Varianzen.

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

Wir können dann dasselbe für die beiden anderen Varianzschätzungen tun:

# 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

Diese Ergebnisse legen nahe, dass nur sehr wenig von der Gesamtvarianz durch die Varianz zwischen Familien oder zwischen Artikelgruppen erklärt wird. Wie oben erwähnt, kann die Korrelation zwischen den Klassen zwischen den Elementen jedoch immer noch negativ sein. Lassen Sie uns zuerst unsere Daten in einem breiteren Format erhalten:

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

Jetzt können wir die Korrelation zwischen beispielsweise item1 und item3 mit einem zufälligen Achsenabschnitt für family wie zuvor modellieren. Zunächst sollte jedoch daran erinnert werden, dass für eine einfache lineare Regression die Quadratwurzel des r-Quadrats des Modells dieselbe ist wie der Korrelationskoeffizient zwischen den Klassen (Pearson-r) für Element1 und Element2.

# 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

Die Beziehung zwischen item1 und item3 ist positiv. Um jedoch zu überprüfen, ob wir hier eine negative Korrelation erhalten können, manipulieren wir unsere Daten:

# 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

Die Beziehung zwischen Elementen kann also negativ sein. Betrachtet man jedoch den Anteil der Varianz zwischen den Familien in dieser Beziehung, dh ICC (Familie), so ist diese Zahl immer noch positiv. Wie vorher:

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

Für die Beziehung zwischen Punkt 1 und Punkt 3 sind also etwa 17% dieser Varianz auf die Varianz zwischen den Familien zurückzuführen. Wir haben weiterhin eine negative Korrelation zwischen Elementen zugelassen.

5ayat
quelle
Vielen Dank für den Vorschlag, aber ich verstehe nicht, wie dies tatsächlich die Korrelationen liefern würde. Ich habe hier einige Daten gepostet: wvbauer.com/fam_sib_item.dat Beachten Sie, dass ich 9 verschiedene Korrelationen schätzen möchte (plus die 3 Artikelabweichungen).
Wolfgang
Dann schlage ich einen Blick auf die First-of-the-Liste zu nehmen Verwandte Fragen hier . Die Antwort in diesem Beitrag ist sehr gut, wenn Sie letztendlich nur die neun verschiedenen ICC suchen.
5.
Nochmals vielen Dank, aber wie sieht es mit den neun ICCs aus? Das dort diskutierte Modell bietet das nicht. Es ist auch ein Varianzkomponentenmodell, das keine negativen ICCs zulässt, aber wie ich bereits erwähnte, erwarte ich nicht, dass alle ICCs positiv sind.
Wolfgang
Ich kenne das Problem des negativen ICC in einem Modell wie diesem nicht - hier gibt es keine derartigen Einschränkungen. Um diese Korrelation zu berechnen, haben Sie bei Betrachtung der Zusammenfassung Ihres Modells mit dem obigen Code drei Varianzschätzungen: Familie, Element und Residuum. Wie in einem anderen Beitrag erläutert, lautet ICC (Familie) also var (Familie) ^ 2 / (var (Familie) ^ 2 + var (Element) ^ 2) + var (Rest) ^ 2). Mit anderen Worten, die Varianz Ihres Ergebnisses wird über die Summe der Varianzquadrate für die beiden Zufallseffekte und den Residuum berechnet. Wiederholen Sie für Sie 9 Kombinationen von Familie und Gegenständen.
13.
1
Welchen der 9 verschiedenen ICCs var(family)^2/(var(family)^2+var(item)^2)+var(residual)^2)entspricht das? Und ja, ICCs können negativ sein. Wie ich zu Beginn meiner Frage beschrieben habe, kann man den ICC mit dem gls()Modell direkt abschätzen , was negative Schätzungen ermöglicht. Andererseits erlauben Varianzkomponentenmodelle keine negativen Schätzungen.
Wolfgang