Як моделювати багаторазові результати в R?


9

@whuber продемонстрував, як імітувати багатоваріантні результати ( , та ) за один момент часу.y1y2y3

Як ми знаємо, поздовжні дані часто зустрічаються в медичних дослідженнях. Моє запитання - як імітувати багаторазові результати в R? Наприклад, ми неодноразово вимірюємо , і у 5 різних часових точках для двох різних груп лікування.y1y2y3

Відповіді:


2

Для генерації багатоваріантних нормальних даних із заданою кореляційною структурою потрібно побудувати матрицю коріантності дисперсії та обчислити її розклад Холеського за допомогою cholфункції. Продукт розкладу Холеського потрібної матриці vcov та незалежних випадкових нормальних векторів спостережень дасть випадкові нормальні дані з цією дисперсійною коваріаційною матрицею.

v <- matrix(c(2,.3,.3,2), 2)
cv <- chol(v)

o <- replicate(1000, {
  y <- cv %*% matrix(rnorm(100),2)

  v1 <- var(y[1,])
  v2 <- var(y[2,])
  v3 <- cov(y[1,], y[2,])

  return(c(v1,v2,v3))
})

## MCMC means should estimate components of v
rowMeans(o)

2

Використовуйте функцію rmvnorm (), вона займає 3 аргументи: матриця коваріації дисперсії, засоби та кількість рядків.

Сигма матиме 3 * 5 = 15 рядків і стовпців. По одному на кожне спостереження кожної змінної. Існує багато способів встановлення цих 15 ^ 2 параметрів (ар, двостороння симетрія, неструктурованість ...). Однак ви заповнюючи цю матрицю, майте на увазі припущення, особливо коли ви встановлюєте кореляцію / коваріацію до нуля або коли два варіації встановлюєте рівними. Для початкової точки матриця сигми може виглядати приблизно так:

 sigma=matrix(c(
    #y1             y2             y3 
    3 ,.5, 0, 0, 0, 0, 0, 0, 0, 0,.5,.2, 0, 0, 0,
    .5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2, 0, 0,
    0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2, 0,
    0 , 0,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2,
    0 , 0, 0,.5, 3, 0, 0, 0, 0, 0, 0, 0, 0,.2,.5,
    0 ,0 ,0 ,0 , 0, 3,.5, 0, 0, 0, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3, 0, 0, 0, 0, 0,
    .5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0, 3,.5, 0, 0, 0,
    .2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0,
    0 ,.2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0,
    0 ,0 ,.2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5,
    0 ,0 ,0 ,.2,.5,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3

    ),15,15)

Отже, сигма [1,12] дорівнює .2, а це означає, що коваріація між першим спостереженням Y1 та другим спостереженням Y3 дорівнює .2, умовна для всіх інших 13 змінних. Діагональні рядки не всі повинні бути однаковими цифрами: це спрощене припущення, яке я зробив. Іноді це має сенс, іноді - ні. Взагалі це означає, що співвідношення між 3-м спостереженням і 4-м є таким же, як кореляція між 1-м і другим.

Вам також потрібні засоби. Це може бути так само просто

 meanTreat=c(1:5,51:55,101:105)
 meanControl=c(1,1,1,1,1,50,50,50,50,50,100,100,100,100,100)

Тут перші 5 - це засоби для 5 спостережень Y1, ..., останні 5 - спостереження Y3

то отримайте 2000 спостережень за вашими даними за допомогою:

sampleT=rmvnorm(1000,meanTreat,sigma)
sampleC=rmvnorm(1000,meanControl,sigma)
 sample=data.frame(cbind(sampleT,sampleC) )
  sample$group=c(rep("Treat",1000),rep("Control",1000) )

colnames(sample)=c("Y11","Y12","Y13","Y14","Y15",
                   "Y21","Y22","Y23","Y24","Y25",
                   "Y31","Y32","Y33","Y34","Y35")

Де Y11 - це перше спостереження Y1, ..., Y15 - це 5-е місце Y1 ...


1
Для створення матриці , як і в першому прикладі, Сет, спробуйте наступне: n <- 3*5; sigma <- diag(1, nrow=n, ncol=n); sigma[rbind(cbind(1:n-1,1:n),cbind(1:n,1:n-1))] <- 1/2. Подібний підхід створить другий приклад. Однак у них є спільна проблема: ви втратили коваріації середyпротягом кожного періоду - ці матриці не відображають структури повторних заходів.
whuber

@whuber ваш синтаксис корисний, але відрізняється від написаного мною. Я думаю, що різниця трохи важлива. Я думаю про те, що я написав як AR (1), і ви маєте запис у перехресній кореляції між останнім спостереженням однієї змінної та першим спостереженням наступної змінної. Іншими словами, я думаю, що сигма [5,6] має бути 0.
Сет

Ага, тепер я бачу, що ви робите: ви створюєте три серії AR (1) на першому прикладі. Я пропустив це, оскільки вважаю, що ОП стурбована також співвідношеннями між серіями: саме так розуміють "багатовимірні результати". З цієї точки зору, схоже, ви хочете розглянути ці кореляційні матриці як такі, що є5 від 5 блокувати матриці з кожним записом a 3 від 3 матриця, а не як 3 від 3 блок-матриця з 5 від 5блоки.
whuber

Я подумав, що моя друга сигма - простий приклад того, щоб варіація між Y1 та Y3 була позитивною. Я трохи відредагував відповідь, щоб зрозуміти, що матриця може бути налаштована залежно від процесу генерації даних. Однозначно існує багато способів зняти шкіру з цією кішкою.
Сет

Досить справедливо, але ваш підхід створює труднощі, тому що поєднувати багатоваріантну кореляцію між двома не тривіально yiз моделлю AR. Наприклад, чи знали ви, що друга матриця не може бути позитивно визначеною? ("Дисперсія" c (-102, 177, -204, 177, -102, 0, 0, 0, 0, 0, 102, -177, 204, -177, 102) від'ємна.)
whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.