Szeregi czasowe dla danych zliczających, z liczbą <20

23

Niedawno zacząłem pracować w klinice gruźlicy. Spotykamy się okresowo w celu omówienia liczby przypadków gruźlicy, które obecnie leczymy, liczby przeprowadzonych testów itp. Chciałbym zacząć modelować te liczby, aby nie tylko zgadywać, czy coś jest niezwykłe, czy nie. Niestety, miałem niewiele szkoleń w szeregach czasowych i większość mojej ekspozycji dotyczyła modeli bardzo ciągłych danych (ceny akcji) lub bardzo dużej liczby przypadków (grypa). Ale mamy do czynienia z 0-18 przypadkami na miesiąc (średnia 6,68, mediana 7, var 12.3), które są dystrybuowane w następujący sposób:

[obraz zagubiony w mgle czasu]

[obraz zjedzony przez grue]

Znalazłem kilka artykułów, które dotyczą takich modeli, ale bardzo doceniam sugestie użytkowników - zarówno dotyczące podejść, jak i pakietów R, których mógłbym użyć do wdrożenia tych podejść.

EDYTOWAĆ: Odpowiedź mbq zmusiła mnie do dokładniejszego zastanowienia się nad tym, o co tu pytam; Byłem zbyt rozczochrany w obliczeniach miesięcznych i straciłem koncentrację na pytaniu. Chciałbym wiedzieć: czy (dość widoczny) spadek, powiedzmy od 2008 r., Odzwierciedla tendencję spadkową w ogólnej liczbie przypadków? Wydaje mi się, że liczba spraw miesięcznych od 2001-2007 odzwierciedla stabilny proces; może trochę sezonowości, ale ogólnie stabilna. Od 2008 r. Do chwili obecnej wygląda na to, że ten proces się zmienia: ogólna liczba przypadków maleje, mimo że miesięczne liczby mogą chybotać w górę i w dół z powodu losowości i sezonowości. Jak mogę sprawdzić, czy w procesie nastąpiła prawdziwa zmiana? A jeśli mogę zidentyfikować spadek,

Matt Parker
źródło
2
Linki zniknęły. Jeśli możesz zdobyć obrazy (lub je zregenerować), skorzystaj z nowego systemu, który przechowuje je w imgur.
Glen_b
Niestety, te działki pochodziły z kilku zleceń temu. Przeprosiny!
Matt Parker,
1
Biorąc pod uwagę, że ten post (# 173) pochodzi z czasów, gdy strona była w fazie beta, nie jest to niespodzianką - niewiele osób mogło przerobić fabułę z postów z tak daleko w tym momencie. W każdym razie dzięki.
Glen_b

Odpowiedzi:

15

Aby ocenić trend historyczny, użyłbym gry z trendem i składnikami sezonowymi. Na przykład

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)

Następnie summary(fit)przeprowadzi test istotności zmiany trendu, a wykres przedstawi przedziały ufności. Zakłada się tutaj, że obserwacje są niezależne, a rozkład warunkowy ma postać Poissona. Ponieważ średnia może zmieniać się płynnie w czasie, założenia te nie są szczególnie mocne.

Prognozowanie jest trudniejsze, ponieważ musisz prognozować trend w przyszłości. Jeśli chcesz zaakceptować liniową ekstrapolację trendu na końcu danych (co z pewnością jest niejasne, ale prawdopodobnie wystarcza na kilka miesięcy), użyj

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

Aby zobaczyć prognozy na tym samym wykresie:

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)

Możesz dostrzec nietypowe miesiące, szukając wartości odstających w (odchyleniu) resztek dopasowania.

Rob Hyndman
źródło
8

Możesz rzucić okiem na strucchange :

Testowanie, monitorowanie i datowanie zmian strukturalnych w modelach regresji (liniowej). Strucchange zawiera testy / metody z ogólnej ramy testu fluktuacji, a także z ramy testu F (test Chow). Obejmuje to metody dopasowania, wykreślania i testowania procesów fluktuacji (np. CUSUM, MOSUM, rekurencyjne / ruchome oszacowania) oraz statystyki F. Możliwe jest monitorowanie przychodzących danych online za pomocą procesów wahań. Wreszcie wartości graniczne w modelach regresji ze zmianami strukturalnymi można oszacować wraz z przedziałami ufności. Nacisk kładziony jest zawsze na metody wizualizacji danych. ”

PS. Ładna grafika;)

Hadley
źródło
Później będę musiał go dokładniej przeczytać, ale tak, ten pakiet zdecydowanie rozwiązuje problemy, z którymi się tu spotykam. Dzięki! A także dzięki za miłe słowa o fabułach; p
Matt Parker
6

Czy naprawdę potrzebuje jakiegoś zaawansowanego modelu? Na podstawie tego, co wiem o gruźlicy, w przypadku, gdy nie ma epidemy, infekcje są aktami stochastycznymi, więc liczba z miesiąca N nie powinna być skorelowana z liczbą z miesiąca N-1. (Możesz sprawdzić to założenie za pomocą autokorelacji). Jeśli tak, analiza samego rozkładu miesięcznych liczb może być wystarczająca, aby zdecydować, czy niektóre liczby są znacznie wyższe niż normalnie.
Z drugiej strony możesz szukać korelacji z niektórymi innymi zmiennymi, takimi jak pora roku, ruch w podróży lub cokolwiek, co możesz sobie wyobrazić, co może być skorelowane. Jeśli znajdziesz coś takiego, można go następnie wykorzystać do normalizacji danych.


źródło
1
Twoja opinia o tym, że liczba N w miesiącu niekoniecznie jest skorelowana z N-1, jest dobrze przyjęta. W przypadku wolno rozwijającej się choroby, takiej jak gruźlica, muszę na to uważnie przyjrzeć się, ale jestem prawie pewien, że mógłbym określić, jak duże jest opóźnienie między momentem zgłoszenia przypadku źródłowego a czasem zgłoszenia wtórnego skrzynie
Matt Parker
1
Jednak Twoim celem jest przeanalizowanie rozkładu miesięcznych liczb, które stanowią sedno mojego pytania. Nastąpił wyraźny spadek gruźlicy, zarówno w Stanach Zjednoczonych, jak iw moim okręgu. Na przykład, gdy porównuję rok 2009 do lat poprzednich, przypadków jest zdecydowanie mniej. 2010 jest na dobrej drodze, aby było jeszcze mniej. Próbuję zidentyfikować (czego nie udało mi się wyjaśnić w pytaniu), czy te spadki są częścią trwającego trendu spadkowego, czy tylko chybotaniem się w dół. Dzięki - zmusiłeś mnie do dokładniejszego przemyślenia problemu.
Matt Parker
5

Często takie dane chorobowe są wykonywane za pomocą uogólnionego modelu liniowego, ponieważ niekoniecznie jest to świetne zastosowanie analizy szeregów czasowych - miesiące często nie są ze sobą skorelowane.

Gdybym otrzymał te dane, oto co bym zrobił (i rzeczywiście zrobiłbym z danymi podobnymi):

Utwórz zmienną „czasową”, która jest dokładniej opisana jako „Miesiące od 1/1/2000”, jeśli prawidłowo sprawdzam twoje dane. Następnie uruchomiłbym ogólny model liniowy w R, używając rozkładu Poissona (lub ujemnego dwumianowego) i linku logarytmicznego o mniej więcej następującej formie:

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

Gdzie t jest czasem opisanym powyżej, a w wynosi 1/365 dla rocznej choroby, takiej jak grypa. Zasadniczo jest to 1 / n, gdzie n jest długością cyklu choroby. Nie wiem od razu, co to jest dla TB.

Te dwa trendy czasowe pokażą Ci - poza normalną zmiennością sezonową - jeśli masz znaczącą zmienność w czasie.

Fomite
źródło
4

Możesz rozważyć zastosowanie tabeli kontrolnej Tukey do danych.

czytnik babelproofreader
źródło
Heh - to była jedna z fabuł, które stworzyłem, ale nie trafiły na pocztę. Problemem było podjęcie decyzji, jak obliczyć granice - moją pierwszą próbą były granice Poissona, z lambda ustawioną na średnią z moich danych, ale wariancja jest zbyt duża, aby być właściwym Poissonem (wystarczająco wysokim, by mieć znaczenie w praktyce? 'nie wiem).
Matt Parker
Kolejny problem polega na tym, że centrum dystrybucji może się zmieniać w czasie - na przykład ustalanie tych granic przy użyciu danych z początku XX wieku, gdy Colorado było rajem dla pacjentów z gruźlicą, nie miałoby sensu. Jaki jest zatem odpowiedni sposób na utrzymanie aktualności linii przy długofalowych zmianach w procesie, przy jednoczesnym rozpoznaniu odchyleń?
Matt Parker
4

Możesz spróbować modelować swoje dane przy użyciu dynamicznego uogólnionego modelu liniowego (DGLM). W R można dopasować tego rodzaju modele za pomocą pakietów sspir i KFAS. W pewnym sensie jest to podobne do podejścia do gry sugerowanego przez Roba, z tym wyjątkiem, że zamiast zakładać, że średnia logiczna z obserwacji Poissona będzie gładką funkcją czasu, zakłada, że ​​podąża ona za stochastyczną dynamiką.


źródło
Fajnie - nie wiedziałem o pakiecie KFAS. Dostępne są również dlm i dse dla podejść do przestrzeni stanów oraz ogólny przegląd dla użytkowników R tutaj: cran.r-project.org/web/views/TimeSeries.html
conjugateprior
2
Bardzo polecam dlmpaczkę. DLM nie są tak łatwe w użyciu jak inne rozwiązania, ale dlmsprawiają, że jest to tak proste, jak to możliwe i ma ładną winietę przeprowadzającą cię przez proces.
Wayne
2

Główne pytanie pozostawiam w spokoju, ponieważ myślę, że popełniam błąd (chociaż również analizuję dane dla świadczeniodawcy opieki zdrowotnej i, szczerze mówiąc, gdybym je miał, po prostu analizowałbym je przy użyciu standardowych technik i mam nadzieję, że dla mnie wyglądają całkiem dobrze).

Jeśli chodzi o pakiety R, znalazłem bibliotekę TSA i jej towarzysząca książka jest naprawdę bardzo przydatna. Wydaje armasubsetsmi się, że polecenie to szczególnie oszczędza czas.

Chris Beeley
źródło
2

Ucieczka od tradycyjnych statystyk wyliczeniowych, jak sugerowałaby Deming, i zapuszczenie się w tradycyjne statystyki analityczne - w tym przypadku wykresy kontrolne. Aby uzyskać więcej informacji, zobacz dowolne książki dr Donalda Wheelera, w szczególności jego „Tematy zaawansowane w SPC”.

GTB
źródło
Ktoś właśnie zadał pytanie o wykresy SPC (aka QC) w R w stats.stackexchange.com/questions/15809/…, gdzie podam kilka wskazówek dotyczących pakietów. Sam nie jestem pewien SPC / QC: zastanawiam się, czy byłby on bardziej użyteczny w erze przed komputerem i dla pracowników w hali produkcyjnej, ale warto to rozważyć.
Wayne
Czy ta odpowiedź jest zbędna w przypadku @ babelproofreader?
Wayne,
2

W odpowiedzi na twoje bezpośrednie pytanie: „Jak mogę sprawdzić, czy w procesie nastąpiła prawdziwa zmiana? A jeśli mogę zidentyfikować spadek, jak mogę wykorzystać ten trend i jakąkolwiek sezonowość, aby oszacować liczbę przypadków, które możemy zobaczyć w nadchodzące miesiące? ” Opracuj model funkcji przenoszenia (ARMAX), który łatwo wyjaśnia zależność między okresami, w tym strukturę sezonową ARIMA. Uwzględnij wszelkie możliwe do zidentyfikowania przesunięcia poziomu, sezonowe impulsy, trendy czasu lokalnego i PUlses, które mogły być sugerowane metodami empirycznymi / analitycznymi, takimi jak wykrywanie interwencji. JEŚLI TEN SOLIDNY ​​MODEL ZAWIERA CZYNNIK / SERIE pasujące do „odmów”, wtedy twoje modlitwy zostały wysłuchane. Alternatywnie po prostu dodaj hipotetyczną strukturę, np. Aby przetestować zmianę trendu czasowego w punkcie T1 skonstruuj dwa manekiny X1 = 1,1,2,3 ,,,,,, T i X2 = 0,0,0,0,0,0,0,1,1,2,3,4,5, .... GDZIE ZERO ZNAJDUJĄ SIĘ W OKRESIE T1-1. Test hipotezy znaczącej zmiany trendu w okresie T1 zostanie oceniony przy użyciu „wartości t” dla X2.

Edytowano 22.09.11

Często takie dane o chorobach mają comiesięczny wpływ, ponieważ pogoda / temperatura są często nieokreślonymi przyczynami. Pomijając prawdziwą serię ogonową, modele ARIMA wykorzystują pamięć lub sezonowe manekiny jako surogat. Dodatkowo w podobnych seriach mogą występować przesunięcia poziomów i / lub lokalne trendy czasowe odzwierciedlające zmiany strukturalne w czasie. Wykorzystanie struktury autoregresyjnej w danych zamiast narzucania różnych artefaktów, takich jak czas i kwadrat i czas sześcienny itp., Okazało się dość użyteczne i mniej domniemane i doraźne. Należy również dołożyć starań, aby zidentyfikować „nietypowe wartości”, ponieważ często mogą one być przydatne w sugerowaniu dodatkowych zmiennych przyczyn i w minimalnym stopniu prowadzić do wiarygodnych oszacowań innych parametrów modelu. Wreszcie stwierdziliśmy, że zmienność / parametry mogą się zmieniać w czasie, więc te udoskonalenia modelu mogą być w porządku.

IrishStat
źródło
W jaki sposób dostosowuje się wartość p do konta w celu identyfikacji post hoc T1 ( tj. Zauważenia jej po przejrzeniu danych)?
whuber
wszystkie udoskonalenia, tj. sprawdzanie diagnostyczne prowadzące do powiększenia, są traktowane tak samo, jak sugerowana struktura, gdy dane znajdowały się w szufladzie. Dodanie opóźnienia do zmiennej predykcyjnej opartej na sprawdzeniu diagnostycznym po prostu dodaje kolejną hipotezę zerową do listy. Nie różni się to od usunięcia nieistotnego współczynnika.
IrishStat
@Irish Nie podążam za tym. T1 nie wydaje się opóźnieniem: określa punkt zmiany. Czy nie jest łatwo znaleźć „znaczące” zmiany, jeśli możesz najpierw sprawdzić dane, aby wybrać miejsce zmiany?
whuber
@whuber Tak masz rację. Pomyśl jednak o procesie stopniowego przekazywania w regresji, w którym badasz alternatywne (pominięte) zmienne pod kątem „potencjalnego włączenia”. Nie inaczej jest w tym sensie, że decydujesz, który „pominięty trend” należy dodać do modelu, aby renderować wynikowy proces błędu Gaussa.
IrishStat
@Irish To pouczająca analogia. Jeśli rozumiem, w efekcie rozważasz posiadanie jednej potencjalnej zmiennej na każdy okres (wyznaczenie możliwej zmiany w tym okresie) i odwołujesz się do systematycznego procesu w celu ustalenia, która z nich powinna zostać uwzględniona w modelu. Sugeruje to, że można rozsądnie zastosować niektóre standardowe procedury dostosowywania na poziomie p, takie jak Bonferroni. Czy to byłoby ważne?
Whuber