Làm thế nào để mô phỏng các biện pháp lặp lại kết quả đa biến trong R?


9

@whuber đã trình diễn cách mô phỏng các kết quả đa biến ( , y 2y 3 ) cho một thời điểm.y1y2y3

Như chúng ta biết, dữ liệu theo chiều dọc thường xảy ra trong các nghiên cứu y khoa. Câu hỏi của tôi là làm thế nào để mô phỏng các biện pháp lặp lại kết quả đa biến trong R? Ví dụ, chúng tôi liên tục đo , y 2y 3 tại 5 điểm thời gian khác nhau cho hai nhóm điều trị khác nhau.y1y2y3

Câu trả lời:


2

Để tạo dữ liệu thông thường đa biến với cấu trúc tương quan đã chỉ định, bạn cần xây dựng ma trận hiệp phương sai và tính toán phân tách Cholesky của nó bằng cholhàm. Sản phẩm của sự phân tách Cholesky của ma trận vcov mong muốn và các vectơ bình thường ngẫu nhiên độc lập sẽ mang lại dữ liệu bình thường ngẫu nhiên với ma trận hiệp phương sai đó.

v <- matrix(c(2,.3,.3,2), 2)
cv <- chol(v)

o <- replicate(1000, {
  y <- cv %*% matrix(rnorm(100),2)

  v1 <- var(y[1,])
  v2 <- var(y[2,])
  v3 <- cov(y[1,], y[2,])

  return(c(v1,v2,v3))
})

## MCMC means should estimate components of v
rowMeans(o)

2

Sử dụng hàm rmvnorm (), Nó có 3 đối số: ma trận hiệp phương sai, phương tiện và số lượng hàng.

Sigma sẽ có 3 * 5 = 15 hàng và cột. Một cho mỗi quan sát của từng biến. Có nhiều cách để thiết lập 15 ^ 2 tham số này (ar, đối xứng song phương, không cấu trúc ...). Tuy nhiên, bạn điền vào ma trận này, hãy lưu ý đến các giả định, đặc biệt khi bạn đặt tương quan / hiệp phương sai về 0 hoặc khi bạn đặt hai phương sai bằng nhau. Đối với điểm bắt đầu, ma trận sigma có thể trông giống như thế này:

 sigma=matrix(c(
    #y1             y2             y3 
    3 ,.5, 0, 0, 0, 0, 0, 0, 0, 0,.5,.2, 0, 0, 0,
    .5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2, 0, 0,
    0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2, 0,
    0 , 0,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2,
    0 , 0, 0,.5, 3, 0, 0, 0, 0, 0, 0, 0, 0,.2,.5,
    0 ,0 ,0 ,0 , 0, 3,.5, 0, 0, 0, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3, 0, 0, 0, 0, 0,
    .5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0, 3,.5, 0, 0, 0,
    .2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0,
    0 ,.2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0,
    0 ,0 ,.2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5,
    0 ,0 ,0 ,.2,.5,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3

    ),15,15)

Vậy sigma [1,12] là .2 và điều đó có nghĩa là hiệp phương sai giữa lần quan sát đầu tiên của Y1 và lần quan sát thứ 2 của Y3 là .2, có điều kiện trên tất cả 13 biến số khác. Các hàng chéo không phải cùng một số: đó là một giả định đơn giản hóa mà tôi đã thực hiện. Đôi khi nó có ý nghĩa, đôi khi nó không. Nói chung, nó có nghĩa là mối tương quan giữa quan sát thứ 3 và thứ 4 giống như mối tương quan giữa thứ 1 và thứ hai.

Bạn cũng cần phương tiện. Nó có thể đơn giản như

 meanTreat=c(1:5,51:55,101:105)
 meanControl=c(1,1,1,1,1,50,50,50,50,50,100,100,100,100,100)

Ở đây 5 đầu tiên là phương tiện cho 5 quan sát của Y1, ..., 5 cuối cùng là các quan sát của Y3

sau đó nhận 2000 quan sát dữ liệu của bạn với:

sampleT=rmvnorm(1000,meanTreat,sigma)
sampleC=rmvnorm(1000,meanControl,sigma)
 sample=data.frame(cbind(sampleT,sampleC) )
  sample$group=c(rep("Treat",1000),rep("Control",1000) )

colnames(sample)=c("Y11","Y12","Y13","Y14","Y15",
                   "Y21","Y22","Y23","Y24","Y25",
                   "Y31","Y32","Y33","Y34","Y35")

Trong đó Y11 là quan sát đầu tiên của Y1, ..., Y15 là quan sát thứ 5 của Y1 ...


1
n <- 3*5; sigma <- diag(1, nrow=n, ncol=n); sigma[rbind(cbind(1:n-1,1:n),cbind(1:n,1:n-1))] <- 1/2y

@whuber cú pháp của bạn rất hữu ích, nhưng khác với những gì tôi đã viết. Tôi nghĩ rằng sự khác biệt là một chút quan trọng. Tôi nghĩ về những gì tôi đã viết là AR (1) và bạn có một mục trong mối tương quan chéo giữa lần quan sát cuối cùng của một biến và quan sát đầu tiên về biến tiếp theo. Nói cách khác, tôi nghĩ sigma [5,6] phải là 0.
Seth

55333355

Tôi nghĩ rằng sigma thứ hai của tôi là một ví dụ đơn giản cho phép phương sai giữa Y1 và Y3 là dương. Tôi đã chỉnh sửa câu trả lời một chút để làm rõ hơn rằng ma trận ở đó sẽ được cấu hình tùy thuộc vào quá trình tạo dữ liệu. Chắc chắn có nhiều cách để da con mèo này.
Seth

yi
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.