Come simulare i risultati multivariati in R?


10

Nella maggior parte dei casi, trattiamo solo una variabile risultato / risposta come . Tuttavia, in alcuni scenari, in particolare nei dati clinici, le variabili di risultato possono essere ad alta dimensione / multivariate. Come , dove contiene , e e questi risultati sono tutti correlati. Se rappresenta il trattamento (sì / no), come posso simulare questo tipo di dati in R?y=a+bx+ϵY=βx+ϵYY1Y2Y3x

Un esempio di vita reale, ogni paziente riceve uno dei 2 tipi di interventi chirurgici di bypass e i ricercatori misurano ogni paziente con dolore, gonfiore, affaticamento ... ecc. Dopo l'intervento di bypass (ogni sintomo è compreso tra 0 e 10). I "presumo" gli esiti (gravità dei sintomi) sono normali multivariati. Spero che questo esempio reale possa chiarire la mia domanda. Molte grazie in anticipo.


Che distribuzione ha ? Se è normale multivariato, dai un'occhiata alla libreria mnormt in R.Y
Macro

Questa domanda è piuttosto ampia perché i "dati multivariati" coprono molto terreno. Quale specifica applicazione hai in mente?
whuber

Aggiungo solo un esempio reale, che dovrebbe essere utile. grazie
Mart.2

Risposte:


9

Simula valori normali multivariati con mvtnorm::rmvnorm. Non sembra funzionare abbastanza come i generatori di numeri casuali univariati, che consentono di specificare vettori di parametri, ma questa limitazione è semplice da aggirare.

Ad esempio, considera il modello

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

dove ha una distribuzione normale multivariata e , e . Specifichiamo questa matrice di covarianza in R: Var ( y i ) = 1 Cov ( y 1 , y 2 ) = Cov ( y 2 , y 3 ) = 0,5 Cov ( y 1 , y 3 ) = 0yVar(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)

Per sperimentare, generiamo alcuni dati per questo modello lasciando che vari da a , con tre repliche ogni volta. Dobbiamo includere anche termini costanti:1 10x110

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

Il modello determina i mezzi:

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

La soluzione alternativa per generare più risultati multivariati consiste nell'utilizzare apply:

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

2

Le reti bayesiane (BN) sono comunemente usate nel contesto che descrivi. Come modello generativo , un BN ti consentirebbe di rappresentare le dipendenze statistiche tra le variabili del tuo dominio, che nel tuo caso possono essere suddivise in 1) pre-trattamento, 2) trattamento e 3) variabili post-trattamento. È possibile addestrare il modello sui dati del paziente esistente e quindi inserire prove (compilare i valori osservati) per un paziente specifico per studiare in che modo i valori osservati influenzano altre variabili (inclusi quelli che sono stati etichettati come risultato, ad esempio post-trattamento).

Un trucco accurato è che puoi effettivamente valutare l'effetto di diversi tipi di trattamento sulle variabili dei risultati. Questo si chiama intervento . Se interessati, abbiamo un documento pertinente qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.