Wie simuliere ich multivariate Ergebnisse in R?

10

In den meisten Situationen beschäftigen wir uns nur mit einer Ergebnis- / Antwortvariablen wie . In einigen Szenarien, insbesondere in den klinischen Daten, können die Ergebnisvariablen jedoch hochdimensional / multivariat sein. Beispiel: , wobei die , und enthält und diese Ergebnisse alle korreliert sind. Wenn die Behandlung darstellt (Ja / Nein), wie kann ich diese Art von Daten in R simulieren?Y = β x + ϵ Y Y 1 Y 2 Y 3 xy=ein+bx+ϵY.=βx+ϵY.Y.1Y.2Y.3x

Als Beispiel aus dem wirklichen Leben erhält jeder Patient eine von zwei Arten von Bypass-Operationen, und die Forscher messen jeden Patienten nach der Bypass-Operation auf Schmerzen, Schwellungen, Müdigkeit usw. (jedes Symptom liegt zwischen 0 und 10). Ich gehe davon aus, dass die Ergebnisse (Symptomschweregrade) multivariat normal sind. Hoffe, dieses echte Beispiel kann meine Frage klären. Vielen Dank im Voraus.

Tu.2
quelle
Welche Verteilung hat ? Wenn es multivariat normal ist, werfen Sie einen Blick auf die Mnormt-Bibliothek in R.Y.
Macro
Diese Frage ist ziemlich weit gefasst, da "multivariate Daten" viel Boden abdecken . Welche spezielle Anwendung haben Sie im Sinn?
whuber
Ich füge nur ein echtes Beispiel hinzu, das hilfreich sein sollte. danke
Tu.2

Antworten:

9

Simulieren Sie multivariate Normalwerte mit mvtnorm::rmvnorm. Es scheint nicht ganz so zu funktionieren wie die univariaten Zufallszahlengeneratoren, mit denen Sie Vektoren von Parametern angeben können, aber diese Einschränkung ist einfach zu umgehen.

Betrachten Sie zum Beispiel das Modell

E.(y1,y2,y3)=(- -1+x,2x,1- -3x)

Dabei hat eine multivariate Normalverteilung und , und . Geben wir diese Kovarianzmatrix in R an:yVar(yich)=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)

Lassen Sie uns zum Experimentieren einige Daten für dieses Modell generieren, indem Sie von bis variieren lassen , wobei jedes Mal drei Replikationen durchgeführt werden. Wir müssen auch konstante Begriffe einbeziehen:x110

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

Das Modell bestimmt die Mittelwerte:

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

Die Problemumgehung zum Generieren mehrerer multivariater Ergebnisse besteht darin, Folgendes zu verwenden apply:

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

Bayesianische Netzwerke (BNs) werden häufig in dem von Ihnen beschriebenen Kontext verwendet. Als generatives Modell würde ein BN es Ihnen ermöglichen, die statistischen Abhängigkeiten zwischen Ihren Domänenvariablen darzustellen, die in Ihrem Fall in 1) Vorbehandlungs-, 2) Behandlungs- und 3) Nachbehandlungsvariablen unterteilt werden können. Sie können Ihr Modell auf Ihre vorhandenen Patientendaten trainieren und dann Nachweise (beobachtete Werte eingeben) für einen bestimmten Patienten eingeben, um zu untersuchen, wie sich die beobachteten Werte auf andere Variablen auswirken (einschließlich derjenigen, die Sie als Ergebnis gekennzeichnet haben, dh nach der Behandlung).

Ein guter Trick ist, dass Sie tatsächlich die Auswirkung verschiedener Behandlungstypen auf Ihre Ergebnisvariablen bewerten können. Dies wird als Intervention bezeichnet . Bei Interesse haben wir einen entsprechenden Papier hier .

Zhubarb
quelle