Comment simuler des résultats multivariés dans R?

10

La plupart des situations, nous ne traitons qu'avec une variable de résultat / réponse telle que . Cependant, dans certains scénarios, en particulier dans les données cliniques, les variables de résultat peuvent être de grande dimension / multivariées. Tels que , où contient les , et et ces résultats sont tous corrélés. Si représente le traitement reçu (oui / non), comment puis-je simuler ce type de données dans R?y=a+bx+ϵY=βx+ϵYY1Y2Y3x

Un exemple réel, chaque patient reçoit l'un des 2 types de chirurgies de pontage et les chercheurs mesurent chaque patient sur la douleur, l'enflure, la fatigue, etc. après la chirurgie de pontage (chaque symptôme varie de 0 à 10). Je «suppose» que les résultats (gravité des symptômes) sont normaux à plusieurs variables. J'espère que ce véritable exemple pourra clarifier ma question. Merci d'avance.

Tu.2
la source
Quelle est la distribution de ? S'il est normal à plusieurs variables, jetez un œil à la bibliothèque mnormt dans R.Y
Macro
Cette question est assez large car les «données multivariées» couvrent beaucoup de terrain. Quelle application spécifique avez-vous en tête?
whuber
J'ajoute juste un exemple réel, qui devrait être utile. merci
Tu.2

Réponses:

9

Simulez des valeurs normales multivariées avec mvtnorm::rmvnorm. Il ne semble pas fonctionner tout à fait comme les générateurs de nombres aléatoires univariés, qui vous permettent de spécifier des vecteurs de paramètres, mais cette limitation est simple à contourner.

Par exemple, considérons le modèle

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

où a une distribution normale multivariée et , , et . Précisons cette matrice de covariance dans R: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)

Pour expérimenter, générons des données pour ce modèle en laissant varier de à , avec trois répétitions à chaque fois. Nous devons également inclure des termes constants:x110

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

Le modèle détermine les moyens:

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

La solution de contournement pour générer plusieurs résultats multivariés consiste à utiliser apply:

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

Les réseaux bayésiens (BN) sont couramment utilisés dans le contexte que vous décrivez. En tant que modèle génératif , un NE vous permettrait de représenter les dépendances statistiques entre vos variables de domaine, qui dans votre cas peuvent être sous-groupées en 1) prétraitement, 2) traitement et 3) post-traitement. Vous pouvez former votre modèle sur vos données patient existantes, puis saisir des preuves (remplir les valeurs observées) pour un patient spécifique afin d'étudier comment les valeurs observées affectent d'autres variables (y compris celles que vous avez étiquetées comme résultats, c'est-à-dire post-traitement).

Une astuce intéressante est que vous pouvez réellement évaluer l'effet de différents types de traitement sur vos variables de résultat. C'est ce qu'on appelle une intervention . Si vous êtes intéressé, nous avons un article pertinent ici .

Zhubarb
la source