Si vous cherchez à obtenir un "effet familial" et un "effet d'objet", nous pouvons penser qu'il y a des interceptions aléatoires pour ces deux éléments, puis modéliser cela avec le package 'lme4'.
Mais, nous devons d'abord donner à chaque frère et sœur un identifiant unique, plutôt qu'un identifiant unique au sein de la famille.
Ensuite, pour "la corrélation entre les mesures prises sur les frères et sœurs au sein de la même famille pour différents articles", nous pouvons spécifier quelque chose comme:
mod<-lmer(value ~ (1|family)+(1|item), data=family)
Cela nous donnera une interception d'effets fixes pour tous les frères et sœurs, puis deux interceptions d'effets aléatoires (avec variance), pour la famille et l'élément.
Ensuite, pour «la corrélation entre les mesures prises sur les frères et sœurs au sein de la même famille pour le même article», nous pouvons faire la même chose mais simplement sous-définir nos données, nous avons donc quelque chose comme:
mod2<-lmer(value ~ (1|family), data=subset(family,item=="1"))
Je pense que cela pourrait être une approche plus facile à votre question. Mais, si vous voulez juste l'ICC pour un article ou une famille, le paquet `` psych '' a une fonction ICC () - soyez juste prudent sur la façon dont l'article et la valeur sont fondus dans vos données d'exemple.
Mise à jour
Certains des éléments ci-dessous sont nouveaux pour moi, mais j'ai aimé travailler. Je ne connais vraiment pas l'idée d'une corrélation intraclasse négative. Bien que je vois sur Wikipedia que les «premières définitions ICC» permettaient une corrélation négative avec les données appariées. Mais comme il est le plus couramment utilisé maintenant, l'ICC est compris comme la proportion de la variance totale qui est la variance entre les groupes. Et cette valeur est toujours positive. Bien que Wikipedia ne soit pas la référence la plus fiable, ce résumé correspond à la façon dont j'ai toujours vu ICC utilisé:
Un avantage de ce cadre ANOVA est que différents groupes peuvent avoir différents nombres de valeurs de données, ce qui est difficile à gérer en utilisant les statistiques ICC antérieures. Notez également que cet ICC est toujours non négatif, ce qui permet de l'interpréter comme la proportion de la variance totale qui est «entre les groupes». Cet ICC peut être généralisé pour permettre des effets de covariable, auquel cas l'ICC est interprété comme capturant la similitude intra-classe des valeurs de données ajustées de covariable.
Cela dit, avec des données comme celles que vous avez fournies ici, la corrélation interclasse entre les éléments 1, 2 et 3 pourrait très bien être négative. Et nous pouvons modéliser cela, mais la proportion de la variance expliquée entre les groupes sera toujours positive.
# load our data and lme4
library(lme4)
## Loading required package: Matrix
dat<-read.table("http://www.wvbauer.com/fam_sib_item.dat", header=TRUE)
Quel est donc le pourcentage de la variance entre les familles, en contrôlant également la variance entre les groupes entre les groupes d'articles? Nous pouvons utiliser un modèle d'interception aléatoire comme vous l'avez suggéré:
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
Nous calculons l'ICC en obtenant la variance des deux intersections à effets aléatoires et des résidus. Nous calculons ensuite le carré de la variance familiale sur la somme des carrés de toutes les variances.
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
On peut alors faire de même pour les deux autres estimations de variance:
# 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
Ces résultats suggèrent que très peu de la variance totale s'explique par la variance entre les familles ou entre les groupes d'articles. Mais, comme indiqué ci-dessus, la corrélation inter-classes entre les éléments pourrait toujours être négative. Commençons par obtenir nos données dans un format plus large:
# 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")
Nous pouvons maintenant modéliser la corrélation entre, par exemple, item1 et item3 avec une interception aléatoire pour la famille comme auparavant. Mais d'abord, il convient peut-être de rappeler que pour une régression linéaire simple, la racine carrée du r du modèle est la même que le coefficient de corrélation inter-classes (r de Pearson) pour item1 et 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
La relation entre l'élément1 et l'élément3 est positive. Mais, juste pour vérifier que nous pouvons obtenir une corrélation négative ici, manipulons nos données:
# 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
Alors oui, la relation entre les articles peut être négative. Mais si nous regardons la proportion de la variance entre les familles dans cette relation, c'est-à-dire ICC (famille), ce nombre sera toujours positif. Comme avant:
temp2<-as.data.frame(VarCorr(mod4))$vcov
(temp2[1]^2)/(temp2[1]^2+temp2[2]^2)
## [1] 0.1694989
Donc, pour la relation entre l'élément 1 et l'élément 3, environ 17% de cet écart est dû à l'écart entre les familles. Et, nous avons toujours permis qu'il y ait une corrélation négative entre les articles.
var(family)^2/(var(family)^2+var(item)^2)+var(residual)^2)
correspond-il? Et oui, les ICC peuvent être négatifs. Comme je l'ai décrit au début de ma question, on peut directement estimer l'ICC avec legls()
modèle, ce qui permet des estimations négatives. D'un autre côté, les modèles à composantes de variance ne permettent pas d'estimations négatives.