Jak symulować wyniki na wielu odmianach w R?

10

W większości sytuacji mamy do czynienia tylko z jedną zmienną wynik / odpowiedź, taką jak y=a+bx+ϵ. Jednak w niektórych scenariuszach, szczególnie w danych klinicznych, zmienne wynikowe mogą być wielowymiarowe / wielowymiarowe. Jak na przykładY=βx+ϵ, gdzie Y zawiera Y1, Y2 i Y3zmienne i te wyniki są ze sobą skorelowane. Gdybyx oznacza otrzymywanie leczenia (tak / nie), jak mogę zasymulować ten typ danych w R?

Przykład z życia, każdy pacjent otrzymuje jeden z 2 rodzajów operacji bypassu, a badacze mierzą każdego pacjenta pod kątem bólu, obrzęku, zmęczenia ... itd. Po operacji bypassu (każdy wskaźnik objawów od 0 do 10). „Zakładam”, że wyniki (nasilenie objawów) są wielowymiarowe normalne. Mam nadzieję, że ten prawdziwy przykład może wyjaśnić moje pytanie. Z góry bardzo dziękuję.

Tu.2
źródło
Co robi dystrybucja Ymieć? Jeśli jest to normalna wielowymiarowa, zajrzyj do biblioteki mnormt w R.
Macro
To pytanie jest dość szerokie, ponieważ „dane wielowymiarowe” obejmują wiele podstaw. Jakie konkretne aplikacje masz na myśli?
whuber
Dodam tylko prawdziwy przykład, który powinien być pomocny. dzięki
Tu.2

Odpowiedzi:

9

Symuluj wielowymiarowe wartości normalne za pomocą mvtnorm::rmvnorm. Wydaje się, że nie działa całkiem jak jednoczynnikowe generatory liczb losowych, które pozwalają określić wektory parametrów, ale to ograniczenie jest łatwe do obejścia.

Rozważmy na przykład model

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

gdzie y ma wielowymiarowy rozkład normalny i Var(yi)=1, Cov(y1,y2)=Cov(y2,y3)=0.5, i Cov(y1,y3)=0. Określmy tę macierz kowariancji w R:

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

Aby eksperymentować, wygenerujmy dane dla tego modelu, pozwalając x różni się 1 przez 10, z trzema powtórzeniami za każdym razem. Musimy również uwzględnić stałe warunki:

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

Model określa środki:

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

Obejściem generowania wielu wyników na wielu odmianach jest użycie apply:

library(mvtnorm) # Contains rmvnorm
sample <- t(apply(means, 1, function(m) rmvnorm(1, mean=m, sigma=sigma)))
Whuber
źródło
2

Sieci bayesowskie (BN) są powszechnie używane w opisywanym kontekście. Jako model generatywny BN pozwoliłby przedstawić zależności statystyczne między zmiennymi domenowymi, które w twoim przypadku można podzielić na 1) wstępne leczenie, 2) leczenie i 3) zmienne po leczeniu. Możesz wytrenować swój model na istniejących danych pacjenta, a następnie wprowadzić dowody (wypełnić obserwowane wartości) dla konkretnego pacjenta, aby zbadać, w jaki sposób zaobserwowane wartości wpływają na inne zmienne (w tym te oznaczone jako wynik, tj. Po leczeniu).

Jedną z ciekawych sztuczek jest to, że faktycznie można ocenić wpływ różnych rodzajów leczenia na zmienne wyniku. To się nazywa interwencja . Jeżeli zainteresowany, mamy odpowiedni papier tutaj .

Zhubarb
źródło