Отрицательная биномиальная регрессия месячного тренда - PullRequest
0 голосов
/ 22 февраля 2019

Я прочитал статью об отрицательной биномиальной регрессии: «Мы смоделировали число инфекций кровотока Ecoli и ИМП кишечной палочки в месяц, используя отрицательную биномиальную регрессию (включая избыточную дисперсию), предполагая, что та же основная популяция (без смещения)».Цифра в следующем виде: enter image description here

У меня также есть набор данных, я хочу изобразить инфекцию, например, цифру с месяцем / годом, как я могу это сделать?большое спасибо

df <- structure(list(Year = c(2013, 2013, 2013, 2013, 2013, 2013, 2013, 
2013, 2013, 2013, 2013, 2013, 2014, 2014, 2014, 2014, 2014, 2014, 
2014, 2014, 2014, 2014, 2014, 2014, 2015, 2015, 2015, 2015, 2015, 
2015, 2015, 2015, 2015, 2015, 2015, 2015), Month = c(1, 2, 3, 
4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), Incidence = c(2.25538216197745, 
3.49502862307924, 2.76311704439615, 2.9836483329794, 3.09375, 
3.0368028900429, 3.82920688208141, 3.9154960734432, 3.33517393705135, 
3.54593329432417, 3.27586206896552, 3.25655281969817, 3.35912052117264, 
3.21672101986362, 2.78237182605312, 2.58435732397113, 2.72516428295323, 
3.1227603153476, 2.6300688599847, 2.66324718879463, 2.62653374233129, 
2.45256358498183, 2.39520958083832, 3.58683926645092, 3.41995942421022, 
3.61001317523057, 2.62718158187895, 2.86944045911047, 2.77978993118435, 
2.89282762420792, 2.69410829432029, 3.22232223222322, 3.39818882811799, 
3.36725958337297, 2.90030211480363, 3.20789124668435), Inpatient = c(8779, 
6638, 9663, 9418, 9600, 8858, 9532, 9041, 9055, 8545, 9280, 10072, 
9824, 6746, 10279, 10254, 10348, 9767, 10456, 10138, 10432, 9908, 
9853, 11124, 10351, 7590, 10772, 11152, 11044, 10889, 11321, 
11110, 11153, 10513, 11585, 12064), infection = c(198, 232, 267, 
281, 297, 269, 365, 354, 302, 303, 304, 328, 330, 217, 286, 265, 
282, 305, 275, 270, 274, 243, 236, 399, 354, 274, 283, 320, 307, 
315, 305, 358, 379, 354, 336, 387)), row.names = c(NA, -36L), class = c("tbl_df", 
"tbl", "data.frame"))

ссылка: Vihta KD, Stoesser N, Llewelyn MJ, et al.Тенденции с течением времени в отношении инфекций кровотока Escherichia coli, инфекций мочевыводящих путей и восприимчивости к антибиотикам в Оксфордшире, Великобритания, 1998–2016 гг .: исследование электронных медицинских карт [J].Инфекционные болезни Ланцета, 2018, 18 (10): 1138-1149.

1 Ответ

0 голосов
/ 22 февраля 2019

Используя данные выше, можно сделать следующее:

library(MASS) # for function glm.nb
library(ggplot2)
library(broom) # for tidy model outputs

Создать дату, чтобы упростить построение графика

df$t <- as.Date(paste("01", df$Month, df$Year, sep = "-"), format = "%d-%m-%Y")

Построить данные.geom_smooth добавляет линию тренда и доверительные интервалы, используя дату в качестве предиктора.

p <- ggplot(data = df, aes(x = t, y = infection)) + 
  geom_point() + 
  geom_smooth(method = "glm.nb")
p

Чтобы выполнить регрессию, установите число инфекций в качестве зависимой переменной и n-й месяц в качестве независимой переменной,ниже month_as_integer.

df$month_as_integer <- seq_along(df$Month)
m1 <- glm.nb(infection ~ month_as_integer, data = df)

используя tidy из пакета метлы, можно получить оценочные и доверительные интервалы в виде фрейма данных.

out1 <- as.data.frame(tidy(m1, exponentiate = TRUE, conf.int = TRUE) )

out1
              term  estimate   std.error  statistic     p.value   conf.low  conf.high
1      (Intercept) 264.44399 0.048006493 116.184897 0.000000000 240.943378 290.556355
2 month_as_integer   1.00697 0.002250993   3.085763 0.002030303   1.002569   1.011394
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...