Como simular resultados multivariados em R?

10

Na maioria das situações, lidamos apenas com uma variável de resultado / resposta como . No entanto, em alguns cenários, especialmente nos dados clínicos, as variáveis ​​de resultado podem ser de alta dimensão / multivariada. Tais como Y = β x + ϵ , onde Y contém variáveis Y 1 , Y 2 e Y 3 e todos esses resultados estão correlacionados. Se x representa o recebimento de tratamento (sim / não), como posso simular esse tipo de dados em R?y=a+bx+ϵY=βx+ϵYY1Y2Y3x

Um exemplo da vida real, cada paciente recebe um dos 2 tipos de cirurgias de ponte de safena e os pesquisadores medem cada paciente sobre dor, inchaço, fadiga ... etc. após a cirurgia de ponte de safena (cada sintoma varia de 0 a 10). Eu "suponho" que os resultados (gravidade dos sintomas) sejam multivariados normais. Espero que este exemplo real possa esclarecer minha pergunta. Muito obrigado antecipadamente.

Tu.2
fonte
Que distribuição tem? Se for multivariada normal, dê uma olhada na biblioteca mnormt em R.Y
Macro
Essa questão é bastante ampla, porque "dados multivariados" cobrem muito terreno. Que aplicação específica você tem em mente?
whuber
Acabei de adicionar um exemplo real, que deve ser útil. graças
Tu.2

Respostas:

9

Simule valores normais multivariados com mvtnorm::rmvnorm. Parece não funcionar como os geradores de números aleatórios univariados, que permitem especificar vetores de parâmetros, mas essa limitação é fácil de contornar.

Por exemplo, considere o modelo

E(y1,y2,y3)=(1+x,2x,13x)

yVar(yi)=1Cov(y1,y2)=Cov(y2,y3)=0.5Cov(y1,y3)=0

sigma <- matrix(c(1,   0.5, 0,  
                  0.5, 1,   0.5,
                  0,   0.5, 1  ), 3, 3)

x110

data <- cbind(rep(1,10*3), rep(1:10,3))

O modelo determina os meios:

beta <- matrix(c(-1,1,  0,2,  1,-3), 2, 3)
means <- data %*% beta

A solução alternativa para gerar vários resultados multivariados é usar apply:

library(mvtnorm) # Contains rmvnorm
sample <- t(apply(means, 1, function(m) rmvnorm(1, mean=m, sigma=sigma)))
whuber
fonte
2

Redes Bayesianas (BNs) são comumente usadas no contexto que você descreve. Como modelo generativo , um BN permitiria representar as dependências estatísticas entre as variáveis ​​do seu domínio, que no seu caso podem ser sub-agrupadas em 1) pré-tratamento, 2) tratamento e 3) pós-tratamento. Você pode treinar seu modelo nos dados existentes do paciente e inserir evidências (preencha os valores observados) para um paciente específico para investigar como os valores observados afetam outras variáveis ​​(incluindo aquelas que você rotulou como resultado, ou seja, pós-tratamento).

Um truque interessante é que você pode avaliar o efeito de diferentes tipos de tratamento nas variáveis ​​de resultado. Isso é chamado de intervenção . Se estiver interessado, temos um documento relevante aqui .

Zhubarb
fonte