여러 변수가있는 클래스 간 상관 계수 (ICC)


13

가족 내에서 중첩 된 형제의 일부 변수를 측정했다고 가정합니다. 데이터 구조는 다음과 같습니다.

가족 형제 가치
------ ------- -----
1 1 y_11
1 2 y_12
2 1 y_21
2 2 y_22
2 3 y_23
... ... ...

같은 제품군 내에서 형제에 대해 측정 한 측정 값 간의 상관 관계를 알고 싶습니다. 이를 수행하는 일반적인 방법은 랜덤 인터셉트 모델을 기반으로 ICC를 계산하는 것입니다.

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

이것은 다음과 같습니다.

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

후자의 접근법은 또한 부정적인 ICC를 허용한다는 점을 제외하고.

이제 가족 내에 중첩 된 형제 자매에서 세 가지 항목을 측정했다고 가정합니다. 따라서 데이터 구조는 다음과 같습니다.

가족 형제 품목 가치
------ ------- ---- -----
11 11 y_111
1 1 2 y_112
1 1 3 y_113
1 2 1 y_121
12 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
... ... ... ...

이제 다음에 대해 알고 싶습니다.

  1. 동일한 항목 내에서 동일한 제품군 내에서 형제에 대해 측정 한 측정 값 간의 상관 관계
  2. 서로 다른 항목에 대해 동일한 제품군 내에서 형제에 대해 측정 한 측정 값 간의 상관

가족 내에 형제 자매 만 있다면, 나는 단지 다음과 같이 할 것입니다.

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

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

내가 어떻게 접근 할 수 있는지에 대한 아이디어 / 제안? 도움을 주셔서 감사합니다.

답변:


1

MCMCglmm 패키지는 공분산 구조와 랜덤 효과를 쉽게 처리하고 추정 할 수 있습니다. 그러나 새로운 사용자에게 위협이 될 수있는 베이지안 통계를 사용합니다. MCMCglmm에 대한 자세한 지침은 MCMCglmm 과정 노트를 참조하고 특히이 질문에 대해서는 5 장을 참조하십시오. MCMCglmm에서 실제 데이터를 분석하기 전에 모델 수렴 및 체인 믹싱 평가에 대해 읽어 보는 것이 좋습니다.

library(MCMCglmm)

MCMCglmm은 사전을 사용하는데, 이것은 정보가없는 역원입니다.

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

모델 맞추기

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)

모형 요약 summary(m)에서 G 구조는 랜덤 절편의 분산 및 공분산을 설명합니다. R 구조는 MCMCglmm의 잔차로 작용하는 절편의 관측 수준 분산 및 공분산을 설명합니다.

베이지안 설득의 경우 공 / 분산 항의 전체 사후 분포를 얻을 수 있습니다 m$VCV. 이는 고정 효과를 고려한 후의 차이입니다.

데이터 시뮬레이션

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]

랜덤 효과의 원래 공 / 분산을 추정하려면 랜덤 효과에 대해 많은 수의 레벨이 필요합니다. 대신 모델에서 다음과 같이 계산할 수있는 관측 된 공분산을 추정 할 수 있습니다.cov(group_var)


0

"패밀리 효과"와 "항목 효과"를 얻으려면이 둘 모두에 대해 임의의 인터셉트가 있다고 생각한 다음 'lme4'패키지를 사용하여 모델링하십시오.

그러나 먼저 각 형제 자매에게 가족 고유 ID가 아닌 고유 ID를 부여해야합니다 .

그런 다음 "동일한 제품군 내에서 서로 다른 항목에 대해 측정 한 형제들 사이의 상관 관계 "에 대해 다음과 같이 지정할 수 있습니다.

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

이렇게하면 모든 형제 자매에 대해 고정 효과 차단을 제공 한 다음 가족과 항목에 대해 두 가지 임의 효과 차단 (분산 포함)을 제공합니다.

그런 다음 " 동일한 항목에 대해 동일한 제품군 내에서 형제에 대해 측정 한 측정 값 간의 상관 관계"에 대해 동일한 작업을 수행 할 수 있지만 데이터의 하위 집합 만 설정하면 다음과 같은 결과가 나타납니다.

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

나는 이것이 당신의 질문에 더 쉬운 접근법 일 것이라고 생각합니다. 그러나 항목 또는 제품군에 대한 ICC 만 원한다면 'psych'패키지에는 ICC () 함수가 있습니다. 예제 데이터에서 항목과 값이 어떻게 녹아 있는지주의해야합니다.

최신 정보

아래 중 일부는 나에게 새로운 것이지만 나는 그것을 해결하는 것을 즐겼습니다. 나는 부정적 인 클래스 상관 관계에 대한 아이디어에 익숙하지 않습니다. Wikipedia에서“초기 ICC 정의”가 쌍을 이룬 데이터와 음의 상관 관계를 허용했음을 알 수 있습니다. 그러나 현재 가장 일반적으로 사용되는 ICC는 그룹 간 분산 인 총 분산의 비율로 이해됩니다. 그리고이 가치는 항상 양수입니다. Wikipedia가 가장 권위있는 참고 자료는 아니지만이 요약은 ICC가 항상 사용되는 방식과 일치합니다.

이 ANOVA 프레임 워크의 장점은 다른 그룹이 다른 수의 데이터 값을 가질 수 있다는 점입니다. 이는 이전 ICC 통계를 사용하여 처리하기가 어렵습니다. 또한이 ICC는 항상 음이 아니므로 "그룹 간"총 분산의 비율로 해석 할 수 있습니다. 이 ICC는 공변량 효과를 허용하도록 일반화 될 수 있으며,이 경우 ICC는 공변량 조정 된 데이터 값의 클래스 내 유사성을 캡처하는 것으로 해석됩니다.

즉, 여기에 나와있는 데이터를 사용하면 항목 1, 2 및 3 사이의 클래스 간 상관 관계가 매우 부정적 일 수 있습니다. 그리고 우리는 이것을 모델링 할 수 있지만 그룹간에 설명 된 분산의 비율은 여전히 ​​긍정적입니다.

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

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

따라서 항목 그룹 간의 그룹 분산도 제어하면서 제품군 간의 분산 비율은 몇 퍼센트 입니까? 제안한대로 임의의 요격 모델을 사용할 수 있습니다.

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

우리는 두 개의 랜덤 효과 절편과 잔차에서 분산을 얻어 ICC를 계산합니다. 그런 다음 모든 분산의 제곱의 합에 대한 가족 분산의 제곱을 계산합니다.

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

그런 다음 다른 두 분산 추정치에 대해서도 동일한 작업을 수행 할 수 있습니다.

# 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

이러한 결과는 총 분산 중 거의 차이가 제품군 간 또는 항목 그룹 간 분산으로 설명됨을 나타냅니다. 그러나 위에서 언급했듯이 항목 간 클래스 간 상관 관계 여전히 음수 일 수 있습니다. 먼저 데이터를 더 넓은 형식으로 가져 오겠습니다.

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

이제 예를 들어 item1과 item3 사이의 상관 관계를 이전과 같이 패밀리에 대한 임의의 절편으로 모델링 할 수 있습니다. 그러나 먼저 간단한 선형 회귀 분석의 경우 모델의 r 제곱의 제곱근은 항목 1 및 항목 2의 클래스 간 상관 계수 (피어슨의 r)와 동일하다는 사실을 상기 할 가치가 있습니다.

# 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

item1과 item3 사이의 관계는 양수입니다. 그러나 여기에서 음의 상관 관계를 얻을 수 있는지 확인하기 위해 데이터를 조작 해 보겠습니다.

# 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

따라서 항목 간의 관계는 부정적 일 수 있습니다. 그러나 우리가이 관계에서 가족들 사이의 분산 비율, 즉 ICC (가족)을 살펴보면 그 수는 여전히 양수입니다. 이전과:

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

따라서 item1과 item3의 관계에서이 차이의 약 17 %는 가족 간의 차이로 인한 것입니다. 그리고 우리는 여전히 항목들 사이에 부정적인 상관 관계가 존재하도록 허용했습니다.


제안에 감사하지만 이것이 실제로 어떻게 상관 관계를 제공하는지 알 수 없습니다. 나는 여기에 몇 가지 데이터를 게시 : wvbauer.com/fam_sib_item.dat 나는 9 가지 상관 관계를 (더하기 3 항목이 편차를) 추정 할 것을 참고.
Wolfgang

그런 다음 여기 에서 첫 번째 관련 질문 목록을 살펴보십시오 . 이 게시물의 대답은 궁극적으로 찾고있는 것이 9 개의 다른 ICC 만 있다면 매우 좋습니다.
5ayat

다시 감사하지만 여전히 9 개의 ICC를 어떻게 제공합니까? 논의 된 모델은이를 제공하지 않습니다. 또한 마이너스 ICC를 허용하지 않는 분산 구성 요소 모델이지만 앞에서 언급했듯이 모든 ICC가 긍정적이라고 기대하지는 않습니다.
볼프강

나는 이런 모델에서 부정적인 ICC 문제에 익숙하지 않습니다-여기에는 그러한 제약이 없습니다. 그러나이 상관 관계를 계산하기 위해 위의 코드로 모델 요약을 볼 때 세 가지 분산 추정치 (가족, 항목 및 잔차)가 있습니다. 예를 들어 다른 게시물에서 설명하는 것처럼 ICC (family)는 var (family) ^ 2 / (var (family) ^ 2 + var (item) ^ 2) + var (residual) ^ 2)입니다. 다시 말해 결과의 분산은 두 랜덤 효과와 잔차에 대한 분산 제곱의 합에 대해 제곱됩니다. 가족과 항목의 9 가지 조합을 반복하십시오.
5ayat

1
9 개의 다른 ICC 중 어떤 것이 var(family)^2/(var(family)^2+var(item)^2)+var(residual)^2)해당됩니까? 그렇습니다. ICC는 부정적 일 수 있습니다. 내 질문의 시작 부분에서 설명했듯이 gls()모델을 사용 하여 ICC를 직접 추정 할 수 있으므로 부정적인 추정이 가능합니다. 반면에 분산 성분 모델은 추정치를 허용하지 않습니다.
볼프강
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.