동일한 그룹에있는 두 개의 무작위로 그려진 단위 간의 예상 상관 관계에 따른 ICC


12

다단계 모델링에서 클래스 내 상관 관계는 종종 랜덤 효과 ANOVA에서 계산됩니다.

yij=γ00+uj+eij

여기서 는 레벨 2 잔차이고 는 레벨 1 잔차입니다. 그런 다음 와 의 분산에 대한 추정값 인 및 를 다음 방정식에 연결합니다.ujeijσ^u2σ^e2ujeij

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

(2002) 혹스는 P15에 기록 하는

클래스 내 상관 관계 ρ는 동일한 그룹에있는 두 개의 무작위로 그려진 단위 간의 예상 상관 관계로 해석 될 수도 있습니다.

여기 에 고급 질문을 하는 질문이 있는데 (대략 같은 것이 아니라이 질문과 정확히 같은 이유) 고급 답변을 얻습니다.

그러나 훨씬 간단한 질문을하고 싶습니다.

질문 : 같은 그룹에있는 무작위로 그려진 두 유닛 사이의 상관 관계에 대해 말하는 것은 무엇을 의미합니까?

클래스 내 상관 관계가 쌍으로 된 데이터가 아닌 그룹에서 작동한다는 사실에 대한 기본적인 이해가 있습니다. 그러나 나는 우리가 가진 모든 것이 동일한 그룹에서 무작위로 그려진 두 단위라면 상관 관계를 계산하는 방법을 여전히 이해하지 못합니다. 나는에 도트 플롯을 보면 ICC에 대한 위키 백과 페이지 , 예를 들어, 우리는 여러 그룹과 각 그룹 내 여러 지점을 가지고있다.

답변:


10

그룹당 개인이 두 명 뿐인 경우를 고려하면 등가를 보는 것이 가장 쉬울 수 있습니다. 구체적인 예를 살펴 보겠습니다 (R을 사용합니다).

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

그래서 우리는 각각 2 개인으로 8 그룹이 있습니다. 이제 랜덤 효과 ANOVA 모델을 적합합시다 :

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

마지막으로 ICC를 계산해 봅시다.

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

결과는 다음과 같습니다. 0.7500003(정확하게는 0.75이지만 추정 절차에는 약간의 수치 인상이 있습니다.)

이제 long 형식의 데이터를 wide 형식으로 재구성 해 보겠습니다.

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

다음과 같이 보입니다 :

   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.1와 사이의 상관 관계를 계산하십시오 y.2.

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

결과는 다음과 같습니다. 0.8161138

무엇을 기다립니다? 무슨 일이야? 0.75가 아니어야합니까? 좀 빠지는! 위에서 계산 한 것은 ICC (인 클래스 상관 계수)가 아니라 클래스 간 상관 계수 인 일반 Pearson 곱-모멘트 상관 계수입니다. 긴 형식의 데이터에서, 사람 1 인 사람과 사람 2 인 사람은 전적으로 임의적입니다. 그룹 내에서 데이터를 다시 섞어도 같은 결과를 얻을 수 있습니다. 그러나 와이드 포맷 데이터에서 누가 아래에 나열 y.1되고 누가 아래에 나열되는지는 임의적이지 않습니다 y.2. 개인의 일부를 바꾸려면 다른 상관 관계를 갖습니다 (모든 사람을 바꾸는 경우는 제외).cor(dat[,3], dat[,2])물론 여전히 당신에게 제공합니다 0.8161138).

Fisher가 지적한 것은 와이드 포맷 데이터로 ICC를 얻는 약간의 요령입니다. 모든 쌍을 두 순서로 두 번 포함시킨 다음 상관 관계를 계산하십시오.

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

결과는 다음과 같습니다 0.75..

보시다시피, ICC는 실제로 같은 그룹의 두 개인에 대한 "짝 짓지 않은"데이터에 대한 상관 계수입니다.

그룹당 개인이 두 명 이상인 경우에도 그룹 내에서 개인 쌍을 만드는 방법이 더 많다는 점을 제외하고는 ICC에 대해 생각할 수 있습니다. 그런 다음 ICC는 가능한 모든 페어링 사이의 상관 관계입니다 (다시 정렬되지 않은 방식으로).


7

@ 울프 강은 이미 큰 답을 주었다. 나는 값 의 많은 쌍을 무작위로 선택하는 직관적 인 알고리즘을 문자 그대로 구현함으로써 각 예제 데이터 세트에서 0.75의 추정 ICC에 도달 할 수 있음을 보여주기 위해 조금 확장하고 싶습니다 . 같은 그룹-단순히 상관 관계를 계산합니다. 그런 다음 동일한 절차를 모든 크기의 그룹이있는 데이터 세트에 쉽게 적용 할 수 있습니다.y

먼저 @Wolfgang의 데이터 셋을로드합니다 (여기에 표시되지 않음). 이제 data.frame을 가져와 같은 그룹에서 무작위로 선택된 단일 관측 값 쌍을 반환하는 간단한 R 함수를 정의 해 보겠습니다.

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

@Wolfgang의 데이터 세트에서이 함수를 10 번 호출하면 얻을 수있는 예는 다음과 같습니다.

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

이제 ICC를 추정하기 위해이 함수를 여러 번 호출 한 다음 두 열 사이의 상관 관계를 계산합니다.

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

이 동일한 절차는 모든 크기의 그룹이있는 데이터 세트에 전혀 수정없이 적용 할 수 있습니다. 예를 들어 @Wolfgang의 예에서와 같이 실제 ICC가 0.75로 설정된 100 개의 관측치 그룹 100 개로 구성된 데이터 집합을 만들어 보겠습니다.

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

여기에 이미지 설명을 입력하십시오

혼합 모형의 분산 성분을 기반으로 ICC를 추정하면 다음과 같은 이점이 있습니다.

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

랜덤 페어링 절차를 적용하면

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

분산 성분 추정치와 밀접하게 일치합니다.

랜덤 페어링 절차는 직관적이고 실용적으로 유용한 반면 @Wolfgang에 의해 설명 된 방법은 실제로 훨씬 더 똑똑합니다. 크기가 100 * 100 인 이와 같은 데이터 집합의 경우, 그룹 내 고유 한 페어링 (자체 페어링 제외)의 수는 505,000입니다 (크지 만 천문학적 수는 아님). 따라서 상관 관계를 계산할 수 있습니다 데이터 세트에서 무작위로 샘플링 할 필요없이 가능한 모든 페어링 세트를 완전히 소진합니다. 다음은 일반적인 경우에 대한 모든 가능한 쌍을 모든 크기의 그룹과 검색하는 기능입니다.

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

이제이 함수를 100 * 100 데이터 세트에 적용하고 상관 관계를 계산하면 다음과 같은 결과를 얻습니다.

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

다른 두 추정치와 잘 일치하고 랜덤 페어링 절차와 비교할 때 계산 속도가 훨씬 빠르며 분산이 적다는 의미에서보다 효율적인 추정치가되어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.