Временные ряды для данных счета, с количеством <20

23

Недавно я начал работать в туберкулезной клинике. Мы периодически встречаемся, чтобы обсудить количество случаев туберкулеза, которые мы сейчас лечим, количество проведенных тестов и т. Д. Я хотел бы начать моделировать эти показатели, чтобы мы не просто угадали, является ли что-то необычным или нет. К сожалению, у меня было очень мало тренировок во временных рядах, и большая часть моего знакомства была с моделями для очень непрерывных данных (цены акций) или очень большого количества подсчетов (грипп). Но мы имеем дело с 0-18 случаями в месяц (в среднем 6,68, медиана 7, вар 12,3), которые распределяются следующим образом:

[изображение потеряно в глубине веков]

[изображение съедено grue]

Я нашел несколько статей, в которых рассматриваются подобные модели, но я был бы очень признателен за ваши предложения - как для подходов, так и для пакетов R, которые я мог бы использовать для реализации этих подходов.

РЕДАКТИРОВАТЬ: Ответ mbq заставил меня задуматься о том, что я здесь спрашиваю; Я слишком зациклился на ежемесячных счетах и ​​потерял фактическую направленность вопроса. Что я хотел бы знать: отражает ли (довольно заметное) снижение, скажем, начиная с 2008 года, тенденцию к снижению общего числа случаев? Мне кажется, что число случаев в месяц в период с 2001 по 2007 год отражает стабильный процесс; возможно, некоторая сезонность, но в целом стабильная. С 2008 года по настоящее время похоже, что этот процесс меняется: общее количество случаев уменьшается, хотя ежемесячные подсчеты могут колебаться вверх и вниз из-за случайности и сезонности. Как я могу проверить, есть ли реальные изменения в процессе? И если я могу определить снижение,

Мэтт Паркер
источник
2
Ссылки умерли. Если вы можете получить изображения (или восстановить их), пожалуйста, используйте новую систему, которая хранит их в imgur.
Glen_b
К сожалению, эти участки были от пары рабочих мест назад. Извиняюсь!
Мэтт Паркер
1
Учитывая, что этот пост (# 173) относится ко времени, когда сайт был в бета-версии, это не удивительно - мало кто мог повторить сюжет из постов, которые были так далеко на этом этапе. Спасибо, в любом случае.
Glen_b

Ответы:

15

Чтобы оценить историческую тенденцию, я бы использовал игру с трендовыми и сезонными компонентами. Например

require(mgcv)
require(forecast)
x <- ts(rpois(100,1+sin(seq(0,3*pi,l=100))),f=12)
tt <- 1:100
season <- seasonaldummy(x)
fit <- gam(x ~ s(tt,k=5) + season, family="poisson")
plot(fit)

Затем summary(fit)вам дадут тест значимости изменения тренда, а сюжет даст вам некоторые доверительные интервалы. Здесь предположения заключаются в том, что наблюдения независимы, а условное распределение является пуассоновским. Поскольку среднее значение может изменяться плавно с течением времени, это не особенно сильные предположения.

Прогнозировать сложнее, так как нужно прогнозировать тенденцию на будущее. Если вы готовы согласиться с линейной экстраполяцией тренда в конце данных (что, конечно, довольно сложно, но, вероятно, нормально в течение нескольких месяцев), используйте

fcast <- predict(fit,se.fit=TRUE,
               newdata=list(tt=101:112,season=seasonaldummyf(x,h=12)))

Чтобы увидеть прогнозы на том же графике:

plot(x,xlim=c(0,10.5))
lines(ts(exp(fcast$fit),f=12,s=112/12),col=2)
lines(ts(exp(fcast$fit-2*fcast$se),f=12,s=112/12),col=2,lty=2)
lines(ts(exp(fcast$fit+2*fcast$se),f=12,s=112/12),col=2,lty=2)

Вы можете определить необычные месяцы, ища выбросы в (отклонениях) остатков подгонки.

Роб Хиндман
источник
8

Возможно, вы захотите взглянуть на Strucchange :

Тестирование, мониторинг и датирование структурных изменений в (линейных) регрессионных моделях. Strucchange содержит тесты / методы, основанные на обобщенной структуре теста на флуктуации, а также на основе F-теста (Чоу-теста). Это включает в себя методы подгонки, построения и тестирования процессов флуктуации (например, CUSUM, MOSUM, рекурсивные / скользящие оценки) и F-статистики соответственно. Можно отслеживать поступающие данные онлайн, используя процессы колебаний. Наконец, контрольные точки в регрессионных моделях со структурными изменениями могут быть оценены вместе с доверительными интервалами. Акцент всегда делается на методы визуализации данных ".

PS. Приятная графика;)

Hadley
источник
Я должен буду прочитать это более подробно позже, но да, этот пакет определенно решает проблемы, с которыми я сталкиваюсь здесь. Благодарность! А также, спасибо за добрые слова о заговорах; p
Мэтт Паркер
6

Это действительно нуждается в некоторой продвинутой модели? Исходя из того, что я знаю о туберкулезе, в случае отсутствия эпидемии инфекции представляют собой стохастические акты, и поэтому счетная форма по месяцу N не должна коррелировать со счетом по месяцу N-1. (Вы можете проверить это предположение с автокорреляцией). Если это так, анализ только распределения ежемесячных подсчетов может быть достаточным, чтобы решить, является ли некоторое подсчет значительно выше, чем обычно.
С другой стороны, вы можете искать корреляции с некоторыми другими переменными, такими как сезон, дорожное движение или что-либо, что вы можете себе представить, что может быть коррелировано. Если вы нашли что-то подобное, это можно было бы использовать для нормализации данных.


источник
1
Ваше мнение о количестве N в месяце, которое не обязательно соотносится с N-1, принимается правильно. С медленно растущей болезнью, такой как туберкулез, это то, на что я должен внимательно смотреть, но я уверен, что смогу определить, насколько велика задержка между моментом, когда мы сообщаем об исходном случае, и временем, когда мы сообщаем о любых вторичных случаев.
Мэтт Паркер
1
Однако в основе моего вопроса лежит ваша точка зрения на анализ распределения ежемесячных подсчетов. Определенное снижение заболеваемости туберкулезом наблюдается как в США, так и в моем округе. Например, когда я сравниваю 2009 год с предыдущими годами, таких случаев явно меньше. 2010 год на пути к тому, чтобы иметь еще меньше. То, что я пытаюсь определить (что я плохо объяснил в вопросе), является ли это снижение частью продолжающейся тенденции к снижению или просто колебанием вниз. Спасибо - вы заставили меня задуматься о проблеме более тщательно.
Мэтт Паркер
5

Зачастую такие данные о заболеваниях выполняются с помощью обобщенной линейной модели, поскольку это не обязательно является отличным приложением анализа временных рядов - месяцы часто не всегда связаны между собой.

Если бы мне дали эти данные, вот что я сделал бы (и действительно, сделал бы с данными, подобными этому):

Создайте переменную «время», которая более точно описывается как «Месяцы с 1 января 2000 года», если я правильно проверяю ваши данные. Затем я запустил бы общую линейную модель в R, используя распределение Пуассона (или отрицательный бином) и лог-ссылку примерно следующего вида:

log(Counts) = b0 + b1*t + b2*(t^2) + b3*cos(2pi*w*t) + b4*sin(2pi*w*t)

Где t - время, описанное выше, и w - 1/365 для ежегодного заболевания, такого как грипп. Обычно его 1 / n, где n - длина цикла вашей болезни. Я не знаю, что это за туберкулез.

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

фомиты
источник
4

Возможно, вы захотите применить диаграмму Tukey Control к данным.

babelproofreader
источник
Хех - на самом деле это был один из тех заговоров, которые я не сделал в пост. Проблема, с которой я столкнулся, заключалась в том, чтобы решить, как рассчитать границы - моя первоначальная попытка была с границами Пуассона, когда лямбда была равна среднему значению моих данных, но дисперсия слишком высока, чтобы быть подходящим Пуассоном (достаточно высоким, чтобы иметь значение на практике? не знаю).
Мэтт Паркер
Еще одна проблема заключается в том, что центр распределения может со временем меняться - например, не имеет смысла устанавливать эти границы, используя данные начала 1900-х годов, когда Колорадо был пристанищем для больных туберкулезом. Итак, что является подходящим способом, чтобы держать линии в актуальном состоянии с долгосрочными изменениями в процессе, сохраняя при этом возможность выявлять отклонения?
Мэтт Паркер
4

Вы можете попытаться смоделировать ваши данные с использованием динамической обобщенной линейной модели (DGLM). В R вы можете приспособить этот тип моделей, используя пакеты sspir и KFAS. В некотором смысле это похоже на гам-подход, предложенный Робом, за исключением того, что вместо того, чтобы предполагать, что логарифм пуассоновских наблюдений является гладкой функцией времени, он предполагает, что он следует стохастической динамике.


источник
Круто - я не знал о пакете KFAS. Там также DLM и DSE для государственных космических иш подходов, а также общий обзор для пользователей R здесь: cran.r-project.org/web/views/TimeSeries.html
conjugateprior
2
Я очень рекомендую dlmпакет. DLM не так просты в использовании, как другие решения, но dlmделают его как можно более легким и с приятной виньеткой, которая проведет вас через весь процесс.
Уэйн
2

Я собираюсь оставить основной вопрос в покое, потому что я думаю, что я пойму его неправильно (хотя я слишком анализирую данные для поставщика медицинских услуг, и, если честно, если бы у меня были эти данные, я бы просто проанализировал их, используя стандартные методы и надеюсь на лучшее, они выглядят довольно хорошо для меня).

Что касается пакетов R, я обнаружил, что библиотека TSA и ее книга очень полезны. Команда armasubsets, в частности, я думаю, отлично экономит время.

Крис Били
источник
2

Избавьтесь от традиционной перечислительной статистики, как предложил бы Деминг, и углубитесь в традиционную аналитическую статистику - в данном случае, контрольные диаграммы. См. Любые книги доктора Дональда Уилера, особенно его "Расширенные темы в SPC" для получения дополнительной информации.

GTB
источник
Кто-то только что задал вопрос о диаграммах SPC (он же QC) в R в stats.stackexchange.com/questions/15809/… где я предоставляю некоторые подсказки по пакетам . Я сам не уверен в SPC / QC: мне интересно, было ли это более полезным в докомпьютерную эпоху и для рабочих в цехах, но стоит задуматься.
Уэйн
На самом деле, является ли этот ответ избыточным с @ babelproofreader's?
Уэйн
2

В ответ на ваш прямой вопрос: «Как я могу проверить, есть ли реальные изменения в процессе? И если я могу определить снижение, как я мог бы использовать эту тенденцию и какую бы то ни было сезонность, чтобы оценить количество случаев, которые мы можем видеть в ближайшие месяцы? Разработайте модель передаточной функции (ARMAX), которая легко объясняет зависимость от периода к периоду, включая сезонную структуру ARIMA. Включите любые идентифицируемые сдвиги уровней, сезонные импульсы, тренды местного времени и PUlses, которые могли быть предложены эмпирическими / аналитическими методами, такими как обнаружение вмешательства. ЕСЛИ В ЭТОЙ НАДЕЖНОЙ МОДЕЛИ ВКЛЮЧАЕТСЯ ФАКТОР / СЕРИЯ, совпадающая с «отклонениями», то ваши молитвы получили ответ В альтернативе просто добавьте гипотетическую структуру, например, чтобы проверить изменение временного тренда в точке T1, построить два манекена X1 = 1,1,2,3 ,,,,,, Т и Х2 = 0,0,0,0,0,0,0,1,2,3,4,5, .... ГДЕ НУЛИ ЗАКОНЧИВАЮТСЯ В ПЕРИОД Т1-1. Проверка гипотезы о значительном изменении тренда в период времени T1 будет оцениваться с использованием «значения t» для X2.

Отредактировано 22.09.11

Зачастую такие данные о заболевании имеют ежемесячные последствия, поскольку погода / температура часто являются неопределенной причиной. В опущении истинных каудальных рядов модели ARIMA используют память или сезонные манекены в качестве суррогата. Кроме того, подобные серии могут иметь сдвиги уровней и / или тенденции местного времени, отражающие структурные изменения во времени. Было обнаружено, что использование авторегрессионной структуры в данных, а не навязывание различных артефактов, таких как время и квадрат времени, кубическое время и т. Д., Является весьма полезным и менее предполагаемым и специальным. Следует также позаботиться о том, чтобы выявить «необычные значения», поскольку они часто могут быть полезны при предложении дополнительных переменных причин и, как минимум, приводят к надежным оценкам других параметров модели. Наконец, мы обнаружили, что изменчивость / параметры могут меняться со временем, поэтому эти уточнения модели могут быть в порядке.

IrishStat
источник
Как отрегулировать значение p, чтобы учесть идентификацию T1 post hoc ( то есть , заметив это после просмотра данных)?
whuber
все уточнения, т.е. диагностическая проверка, приводящая к увеличению, обрабатываются так же, как предложенная структура, пока данные были в ящике. Добавление задержки в переменную предиктора на основе диагностической проверки просто добавляет еще одну нулевую гипотезу в список. Это не отличается от удаления незначимого коэффициента.
IrishStat
@ Ириш, я не слежу за этим. T1, похоже, не является лагом: он предусматривает точку изменения. Разве не легко найти «существенные» изменения, если вам разрешено сначала проверить данные, чтобы выбрать, где находится точка изменения?
whuber
@whuber Да, вы правы. Но подумайте о пошаговом процессе вперед в регрессии, где вы исследуете альтернативные (опущенные) переменные для «потенциального включения». Это ничем не отличается в том смысле, что вы решаете, какой «пропущенный тренд» должен быть добавлен в модель, чтобы обработать результирующую ошибку по Гауссу.
IrishStat
@Irish Это яркая аналогия. Если я понимаю, в действительности вы рассматриваете наличие одной потенциальной переменной для каждого периода (обозначение возможного изменения в этот период) и запускаете систематический процесс, чтобы определить, какой из них должен быть включен в модель. Это говорит о том, что некоторые стандартные процедуры настройки уровня p, такие как Bonferroni, могут быть разумно применены. Это будет действительным?
whuber