ICC như mối tương quan dự kiến ​​giữa hai đơn vị được rút ngẫu nhiên trong cùng một nhóm


12

Trong mô hình đa cấp, mối tương quan nội hàm thường được tính toán từ hiệu ứng ngẫu nhiên ANOVA

yTôij= =γ00+bạnj+eTôij

trong đó bạnj là phần dư cấp 2 và eTôij là phần dư cấp 1. Sau đó chúng ta có được ước σ^bạn2σ 2 e cho phương sai của u je i j tương ứng, và cắm chúng vào các phương trình sau:σ^e2bạnjeTôij

ρ= =σ^bạn2σ^bạn2+σ^e2

Hox (2002) viết trên p15 rằng

Tương quan nội hàm cũng có thể được hiểu là tương quan dự kiến ​​giữa hai đơn vị được rút ngẫu nhiên trong cùng một nhóm

Có một câu hỏi ở đây đặt ra một câu hỏi nâng cao (tại sao nó lại chính xác bằng câu hỏi này thay vì xấp xỉ bằng nhau) và nhận được câu trả lời nâng cao.

Tuy nhiên, tôi muốn hỏi một câu hỏi đơn giản hơn nhiều.

Câu hỏi: Điều gì thậm chí có nghĩa là gì khi nói về mối tương quan giữa hai đơn vị được rút ngẫu nhiên trong cùng một nhóm?

Tôi có một sự hiểu biết cơ bản về thực tế là mối tương quan nội bộ hoạt động trên các nhóm chứ không phải trên dữ liệu được ghép nối. Tuy nhiên, tôi vẫn không hiểu làm thế nào mối tương quan có thể được tính nếu tất cả chúng ta có là hai đơn vị được rút ngẫu nhiên từ cùng một nhóm. Ví dụ, nếu tôi nhìn vào các ô chấm trên trang Wikipedia cho ICC , chúng tôi có nhiều nhóm và nhiều điểm trong mỗi nhóm.

Câu trả lời:


10

Có thể dễ dàng nhất để thấy sự tương đương nếu bạn xem xét một trường hợp chỉ có hai cá nhân mỗi nhóm. Vì vậy, chúng ta hãy đi qua một ví dụ cụ thể (Tôi sẽ sử dụng R cho việc này):

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

Vì vậy, chúng tôi có 8 nhóm với 2 cá nhân mỗi nhóm. Bây giờ hãy phù hợp với mô hình ANOVA hiệu ứng ngẫu nhiên:

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

Và cuối cùng, hãy tính ICC:

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

Điều này mang lại: 0.7500003(chính xác là 0,75, nhưng có một số ấn tượng số nhỏ trong thủ tục ước tính ở đây).

Bây giờ, hãy định hình lại dữ liệu từ định dạng dài thành định dạng rộng:

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

Nó trông như thế này bây giờ:

   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

Và bây giờ hãy tính toán mối tương quan giữa y.1y.2:

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

Sản lượng này: 0.8161138

Đợi đã, cái gì? Những gì đang xảy ra ở đây? Không phải là 0,75 sao? Không hẳn! Những gì tôi đã tính toán ở trên không phải là ICC ( intraclass hệ số tương quan), nhưng hệ số Pearson sản phẩm thời điểm tương quan bình thường, mà là một interclass hệ số tương quan. Lưu ý rằng trong dữ liệu định dạng dài, hoàn toàn tùy ý ai là người 1 và ai là người 2 - các cặp không có thứ tự. Bạn có thể chia sẻ lại dữ liệu trong các nhóm và bạn sẽ nhận được kết quả tương tự. Nhưng trong dữ liệu định dạng rộng, không phải ai được liệt kê dưới đây y.1và ai được liệt kê dưới đây y.2. Nếu bạn chuyển đổi xung quanh một số cá nhân, bạn sẽ có một mối tương quan khác (trừ khi bạn phải chuyển đổi tất cả chúng - thì điều này tương đương vớicor(dat[,3], dat[,2])mà tất nhiên vẫn cung cấp cho bạn 0.8161138).

Những gì Fisher chỉ ra là một mẹo nhỏ để có được ICC với dữ liệu định dạng rộng. Có mỗi cặp được bao gồm hai lần, trong cả hai đơn hàng, và sau đó tính toán tương quan:

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

Sản lượng này : 0.75.

Vì vậy, như bạn có thể thấy, ICC thực sự là một hệ số tương quan - đối với dữ liệu "chưa ghép cặp" của hai cá nhân trong cùng một nhóm.

Nếu có nhiều hơn hai cá nhân trong mỗi nhóm, bạn vẫn có thể nghĩ về ICC theo cách đó, ngoại trừ việc sẽ có nhiều cách tạo cặp cá nhân trong nhóm. ICC sau đó là mối tương quan giữa tất cả các cặp có thể (một lần nữa theo cách không có thứ tự).


7

y

Đầu tiên chúng tôi tải tập dữ liệu của @ Wolfgang (không hiển thị ở đây). Bây giờ, hãy xác định một hàm R đơn giản lấy data.frame và trả về một cặp quan sát được chọn ngẫu nhiên từ cùng một nhóm:

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

Đây là một ví dụ về những gì chúng ta nhận được nếu chúng ta gọi hàm này 10 lần trên tập dữ liệu của @ Wolfgang:

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

Bây giờ để ước tính ICC, chúng ta chỉ cần gọi hàm này một số lần lớn và sau đó tính toán mối tương quan giữa hai cột.

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

Quy trình tương tự này có thể được áp dụng, hoàn toàn không có sửa đổi đối với các bộ dữ liệu với các nhóm có kích thước bất kỳ. Ví dụ: hãy tạo một bộ dữ liệu bao gồm 100 nhóm 100 quan sát mỗi nhóm, với ICC thực được đặt thành 0,75 như trong ví dụ của @ Wolfgang.

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

nhập mô tả hình ảnh ở đây

Ước tính ICC dựa trên các thành phần phương sai từ một mô hình hỗn hợp, chúng tôi nhận được:

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

Và nếu chúng ta áp dụng quy trình ghép đôi ngẫu nhiên, chúng ta sẽ nhận được

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

mà rất phù hợp với ước tính thành phần phương sai.

Lưu ý rằng mặc dù quy trình ghép nối ngẫu nhiên là loại trực quan và hữu dụng về mặt thực tế, phương pháp được minh họa bởi @Wolfgang thực sự thông minh hơn rất nhiều. Đối với một tập dữ liệu như thế này có kích thước 100 * 100, số lượng các cặp trong nhóm duy nhất (không bao gồm tự ghép) là 505.000 - một con số lớn nhưng không phải là thiên văn - vì vậy chúng tôi hoàn toàn có thể tính toán tương quan của tập hợp đầy đủ tất cả các cặp có thể, thay vì cần lấy mẫu ngẫu nhiên từ bộ dữ liệu. Đây là một chức năng để truy xuất tất cả các cặp có thể có cho trường hợp chung với các nhóm có kích thước bất kỳ:

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

Bây giờ nếu chúng ta áp dụng hàm này cho tập dữ liệu 100 * 100 và tính toán tương quan, chúng ta sẽ nhận được:

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

Điều này cũng phù hợp với hai ước tính còn lại và so với quy trình ghép ngẫu nhiên, tính toán nhanh hơn nhiều và cũng là một ước tính hiệu quả hơn theo nghĩa có ít phương sai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.