R에서 반복 측정 다변량 결과를 시뮬레이션하는 방법은 무엇입니까?


9

@whuber는 한 시점에서 다변량 결과 ( , , ) 를 시뮬레이션 하는 방법을 보여주었습니다 .y1y2y3

아시다시피, 세로 데이터는 의료 연구에서 종종 발생합니다. 내 질문은 R에서 반복 측정 다변량 결과를 시뮬레이션하는 방법입니다. 예를 들어, 두 개의 다른 치료 그룹에 대해 5 개의 다양한 시점에서 , 및 을 반복적으로 측정 합니다.y1y2y3

답변:


2

지정된 상관 구조로 다변량 정규 데이터를 생성하려면 분산 공분산 행렬을 구성하고 chol함수를 사용하여 hole 레 스키 분해를 계산해야 합니다. 원하는 vcov 행렬의 Cholesky 분해와 관측치의 독립적 인 랜덤 법선 벡터는 해당 공분산 행렬로 랜덤 법선 데이터를 생성합니다.

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

rmvnorm () 함수를 사용하십시오. 분산 공분산 행렬, 평균 및 행 수의 세 가지 인수가 필요합니다.

시그마에는 3 * 5 = 15 개의 행과 열이 있습니다. 각 변수의 관측치마다 하나씩. 이 15 ^ 2 매개 변수를 설정하는 방법에는 여러 가지가 있습니다 (ar, bilateral symmetry, unstructured ...). 그러나 특히 상관 관계 / 공분산을 0으로 설정하거나 두 분산을 동일하게 설정 한 경우이 행렬을 채우십시오. 시작점의 경우 시그마 행렬은 다음과 같습니다.

 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)

따라서 시그마 [1,12]는 .2이며 이는 Y1의 첫 번째 관측치와 Y3의 두 번째 관측치 간의 공분산이 0.2라는 것을 의미 합니다. 대각선 행이 모두 같은 숫자 일 필요는 없습니다. 그것은 제가 만든 간단한 가정입니다. 때로는 의미가 있고 때로는 그렇지 않습니다. 일반적으로 이는 3 차 관측치와 4 차 관측치 간의 상관 관계가 1 차 및 2 차 관측기의 상관 관계와 동일 함을 의미합니다.

또한 수단이 필요합니다. 그것은 간단 할 수 있습니다

 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)

여기서 첫 번째 5는 Y1의 5 개 관측치에 대한 수단입니다. ..., 마지막 5 개는 Y3의 관측치입니다.

그런 다음 다음을 사용하여 데이터를 2000 회 관찰하십시오.

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

Y11이 Y1의 첫 번째 관측치 인 경우 ... Y15는 Y1의 5 번째 관측치입니다 ...


1
첫 번째 예제 인 Seth에서와 같이 행렬을 만들려면 다음을 시도하십시오 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/2. 비슷한 접근 방식이 두 번째 예를 생성합니다. 그러나 공통적 인 문제가 있습니다. 각 기간 동안 간의 공분산을 잃어 버렸습니다. 이러한 행렬에는 반복되는 측정 구조가 반영되지 않습니다. y
whuber

@ whuber 구문이 도움이되지만 내가 쓴 것과 다릅니다. 차이가 조금 중요하다고 생각합니다. 필자가 AR (1)이라고 쓴 것을 생각하고 한 변수의 마지막 관측치와 다음 변수의 첫 관측치 사이의 상호 상관 관계에 항목이 있습니다. 다시 말해 나는 sigma [5,6]가 0이어야한다고 생각합니다.
Seth

아, 이제 나는 당신이하고있는 것을 보았습니다 : 당신은 첫 번째 예에서 3 개의 AR (1) 시리즈를 만들고 있습니다. OP가 시리즈 간의 상관 관계에 대해서도 우려하고 있기 때문에 이것을 놓쳤습니다 . 그것이 "다변량 결과"의 의미입니다. 당신이되는 이러한 상관 관계 행렬을 보려는 것처럼 이러한 관점에서 보인다 에 의해 각 항목에 블록 행렬 에 의해 오히려 같은보다 매트릭스 에 의해 와 블록 매트릭스 에 의해 블록. 55333355
whuber

두 번째 시그마는 Y1과 Y3의 분산이 양수가되도록하는 간단한 예라고 생각했습니다. 데이터 생성 프로세스에 따라 매트릭스가 구성되어 있음을 분명히하기 위해 답변을 약간 편집했습니다. 이 고양이를 껍질을 벗기는 방법은 여러 가지가 있습니다.
세스

, 간의 다변량 상관 관계를 AR 모델과 결합하는 것은 쉽지 않기 때문에 접근 방식이 어려움을 겪습니다 . 예를 들어, 두 번째 행렬이 양의 정점이 아니라는 것을 알고 있습니까? (c (-102, 177, -204, 177, -102, 0, 0, 0, 0, 0, 102, -177, 204, -177, 102)의 "분산"은 음수입니다.yi
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.