escalc и rma (metafor) для объединения ставок с положительными и отрицательными значениями в R - PullRequest
0 голосов
/ 18 октября 2018

У меня есть данные, которые являются оценочными показателями госпитализации по конкретному заболеванию.Тарифы рассчитываются с использованием GAM, отдельно для 6 сайтов.Я хотел бы рассчитать объединенную оценку, суммирующую показатель для всего региона.Я использую escalc, чтобы получить вектор значений для передачи в rma в пакете metafor для вычисления сводной оценки.

У меня есть вопросы, обоснование которых и MWE изложены после вопросов:

  1. Какой вариант measure= следует использовать в escalc для объединения ставок, которые могут принимать отрицательные иположительные значения?
  2. Если я использую measure="COR", где yi - векторная граница между -1 и 1 путем деления моих скоростей на некоторый делитель, почему мои объединенные скорости варьируются в зависимости от того, какой делитель я использую?

Пример данных, которые я обрабатываю, таков:

rates <- c(32.691314, 89.236488, 59.954874, 28.832000,  9.530486, 12.590196)
pop <- c(6175139,  218932, 3888834,  425415, 4784373, 2061030)

Сначала я попытался обобщить их, используя опцию measure="PR" в escalc:

library(metafor)
div.pr <- 100000  #divisor used for PR measures.  This is denominator for the reported rates
no <- rates/div.pr * pop   #to get a whole number 
no[no<0] <- 0 # replace neg with 0, since cannot handle negative rates
dat.pr1 <- escalc(measure="PR", xi=no, ni=pop, append=TRUE) # calculate state-weighted estimate
res.pr1 <- rma(yi, vi, data = dat.pr1) #random effects summary estimate of the 5 rates
pooled.dat.pr1 <- res.pr1$b+c(0,-1,1)*1.96*res.pr1$se  #estimate with 95%CI converted back to the rate scale ie.per 100,000 population
pr.est1 <- pooled.dat.pr1 * div.pr

Однако, некоторые из моих оценок отрицательны.Это связано с тем, что они связаны с заболеваемостью, и иногда заболевание может предотвратить госпитализацию, а не вызвать ее.Поскольку опция measure="PR" не может обрабатывать отрицательные ставки, все отрицательные числа должны быть заменены на NA, и поэтому итоговая оценка смещена в пользу того, чтобы только когда-либо видеть повышенную ставку (а не пониженную ставку).

Итак, мне посоветовали вместо этого использовать корреляцию в качестве показателя результата;т. е. используя measure="COR" и задайте для коэффициентов значение от -1 до 1. Когда я делаю это с этими данными (т.е. делим на 100), это дает несколько сравнимую оценку с параметром PR:

div.cor1 <- 100
dat.cor1 <- escalc(measure="COR", ri=rates/div.cor1, ni=pop, append=TRUE)
res.cor1 <- rma(yi, vi, data = dat.cor1)
pooled.dat.cor1 <- res.cor1$b+c(0,-1,1)*1.96*res.cor1$se
cor.est1 <- pooled.dat.cor1 * div.cor1

rbind(pr.est1,cor.est1)

дает

              [,1]     [,2]     [,3]
pr.est    38.44942 14.35175 62.54709
cor.est1  38.80594 14.34719 63.26469

Это выглядит нормально, я думаю.

Как и ожидалось, объединенные оценки отличаются (COR> PR), когда существуют отрицательные значения, поскольку PR игнорирует отрицательные значения;например, если я вместо этого использую этот вектор ставок: rates2 <- c(32.691314, 89.236488, 59.954874, 28.832000, -9.530486, 12.590196), где 5-й элемент теперь отрицательный, я получу:

             [,1]      [,2]     [,3]
pr.est2  36.89265 11.133870 62.65143
cor.est2 35.62909  7.702166 63.55602

Итак, все это казалось нормальным, пока мне не пришлось делить на что-то> 100 доограничить скорость между -1 и 1 (например, когда скорости были в 100 или 1000 вместо 10).Когда я делаю это, RMA оценки могут быть совершенно разными;например, при делении вышеуказанного набора ставок на 100, 1000 или 100000 получаются следующие результаты:

              [,1]       [,2]     [,3]
div100    35.62909   7.702166 63.55602
div1000   35.60032   7.695190 63.50545
div100000 25.47503 -21.306178 72.25625

И когда мне нужно объединить сильно разнородные ставки, все становится по-другому.(И да, я понимаю, что обобщение разнородных данных может быть неразумным, но я хочу проиллюстрировать свою точку зрения.)

rates4 <- c(26.50879,  853.48396, -142.67102,  371.09702, -632.73573, -497.44352)
pop4 <- c(48451,  1932, 30824,  3120, 36447, 16073)

div.cor5 <- 1000
dat.cor5 <- escalc(measure="COR", ri=rates4/div.cor5, ni=pop4, append=TRUE)
res.cor5 <- rma(yi, vi, data = dat.cor5)
pooled.dat.cor5 <- res.cor5$b+c(0,-1,1)*1.96*res.cor5$se
(cor.est5 <- pooled.dat.cor5 * div.cor5)

dat.cor6 <- escalc(measure="COR", ri=rates4/div.pr, ni=pop4, append=TRUE)
res.cor6 <- rma(yi, vi, data = dat.cor6)
pooled.dat.cor6 <- res.cor6$b+c(0,-1,1)*1.96*res.cor6$se
(cor.est6 <- pooled.dat.cor6 * div.pr)

дает

                [,1]      [,2]     [,3]
cor.est5   -3.678168 -447.0409 439.6845
cor.est6 -229.202430 -759.0382 300.6333

Итак, я решил использоватьопция measure="PR", с отрицательными значениями, замененными на 0, но я хотел бы знать, есть ли лучший вариант для этих данных и почему опция "COR" изменяется так сильно в зависимости от делителя.Благодаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...