Séries temporais para dados de contagem, com contagens <20

23

Recentemente, comecei a trabalhar em uma clínica de tuberculose. Nos reunimos periodicamente para discutir o número de casos de TB que estamos tratando atualmente, o número de testes administrados, etc. Gostaria de começar a modelar essas contagens para não ficar apenas imaginando se algo é incomum ou não. Infelizmente, tive muito pouco treinamento em séries temporais e a maior parte da minha exposição foi em modelos de dados muito contínuos (preços das ações) ou um número muito grande de contagens (influenza). Mas lidamos com 0 a 18 casos por mês (média 6,68, mediana 7, var 12,3), que são distribuídos assim:

[imagem perdida pelas brumas do tempo]

[imagem comida por um grue]

Eu encontrei alguns artigos que abordam modelos como este, mas eu gostaria muito de receber sugestões suas - tanto para abordagens quanto para pacotes R que eu poderia usar para implementar essas abordagens.

EDITAR: A resposta da mbq me forçou a pensar com mais cuidado sobre o que estou perguntando aqui; Fiquei muito confuso com as contagens mensais e perdi o foco real da questão. O que eu gostaria de saber é: o declínio (bastante visível) a partir de, digamos, de 2008 em diante reflete uma tendência de queda no número geral de casos? Parece-me que o número de casos mensais de 2001 a 2007 reflete um processo estável; talvez alguma sazonalidade, mas no geral estável. De 2008 até o presente, parece que esse processo está mudando: o número total de casos está diminuindo, mesmo que as contagens mensais possam oscilar devido à aleatoriedade e sazonalidade. Como posso testar se há uma mudança real no processo? E se eu conseguir identificar um declínio,

Matt Parker
fonte
2
Os links morreram. Se você conseguir se apossar das imagens (ou regenerá-las), use o novo sistema que as armazena no imgur.
Glen_b -Reinstala Monica
Infelizmente, esses lotes eram de alguns empregos atrás. Desculpas!
Matt Parker
1
Dado que esta postagem (# 173) é do começo da época em que o site estava na versão beta, isso não é uma surpresa - poucas pessoas poderiam refazer uma trama de postagens tão antigas nesse momento. Obrigado mesmo assim.
Glen_b -Reinstala Monica

Respostas:

15

Para avaliar a tendência histórica, eu usaria um gam com tendência e componentes sazonais. Por exemplo

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)

Então summary(fit), você fará um teste de significância da mudança de tendência e o gráfico fornecerá alguns intervalos de confiança. As suposições aqui são que as observações são independentes e a distribuição condicional é Poisson. Como a média pode mudar suavemente ao longo do tempo, essas não são suposições particularmente fortes.

Prever é mais difícil, pois você precisa projetar a tendência no futuro. Se você deseja aceitar uma extrapolação linear da tendência no final dos dados (o que certamente é desonesto, mas provavelmente aceitável por alguns meses), use

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

Para ver as previsões no mesmo gráfico:

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)

Você pode identificar os meses incomuns procurando discrepantes nos resíduos (desvio) do ajuste.

Rob Hyndman
fonte
8

Você pode dar uma olhada no strucchange :

Teste, monitoramento e datação de mudanças estruturais em modelos de regressão (linear). O strucchange apresenta testes / métodos da estrutura de teste de flutuação generalizada, bem como da estrutura de teste F (teste de Chow). Isso inclui métodos para ajustar, plotar e testar processos de flutuação (por exemplo, CUSUM, MOSUM, estimativas recursivas / móveis) e estatísticas F, respectivamente. É possível monitorar os dados recebidos on-line usando processos de flutuação. Finalmente, os pontos de interrupção nos modelos de regressão com alterações estruturais podem ser estimados juntamente com intervalos de confiança. A ênfase é sempre dada aos métodos para visualizar os dados ".

PS. Belos gráficos;)

Hadley
fonte
Terei de ler mais detalhadamente mais tarde, mas sim, este pacote definitivamente está abordando os tipos de problemas que estou enfrentando aqui. Obrigado! E também, obrigado pelas palavras gentis sobre as parcelas; p
Matt Parker
6

Realmente precisa de algum modelo avançado? Com base no que sei sobre a tuberculose, no caso de não haver epidemia, as infecções são atos estocásticos e, portanto, a contagem do mês N não deve ser correlacionada com a contagem do mês N-1. (Você pode verificar essa suposição com autocorrelação). Nesse caso, analisar apenas a distribuição das contagens mensais pode ser suficiente para decidir se algumas contagens são significativamente maiores que o normal.
Por outro lado, você pode procurar correlações com algumas outras variáveis, como temporada, tráfego de viagens ou qualquer coisa que você possa imaginar que possa estar correlacionada. Se você encontrasse algo parecido com isto, ele poderia ser usado para alguma normalização de dados.


fonte
1
Seu argumento sobre a contagem de N do mês que não está necessariamente sendo correlacionado com o N-1 é bem aceito. Com uma doença de crescimento lento como a tuberculose, é algo que eu precisaria examinar com cuidado, mas tenho certeza de que consegui identificar o quanto de atraso existe entre o momento em que relatamos um caso de origem e o momento em que reportamos qualquer problema secundário. casos.
Matt Parker
1
No entanto, é seu ponto de vista analisar a distribuição das contagens mensais que está no centro da minha pergunta. Há um declínio definitivo da tuberculose, tanto nos EUA quanto no meu distrito. Por exemplo, quando comparo 2009 com os anos anteriores, há decididamente menos casos. 2010 está a caminho de ter menos ainda. O que estou tentando identificar (que fiz um péssimo trabalho de explicar na pergunta) é se esses declínios fazem ou não parte de uma tendência descendente em curso ou apenas uma oscilação descendente. Obrigado - você me fez pensar com muito mais cuidado sobre o problema.
Matt Parker
5

Freqüentemente, dados de doenças como esses são realizados com um modelo linear generalizado, pois não é necessariamente uma ótima aplicação de análise de séries temporais - os meses geralmente não são tão correlacionados entre si.

Se eu recebesse esses dados, eis o que eu faria (e de fato fiz com dados semelhantes):

Crie uma variável "time" que seja descrita com mais precisão como "Meses desde 1/1/2000" se estiver visualizando seus dados corretamente. Então, eu rodaria um modelo linear geral em R usando a distribuição Poisson (ou Binomial Negativo) e um link de log com aproximadamente o seguinte formato:

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

Onde t é o tempo descrito acima ew é 1/365 para uma doença anual como a gripe. Geralmente é 1 / n, onde n é a duração do ciclo da sua doença. Não sei de antemão o que é a tuberculose.

As duas tendências de tempo mostrarão, fora da variação sazonal normal, se você tiver uma variação significativa ao longo do tempo.

Fomite
fonte
4

Você pode aplicar um gráfico do Tukey Control aos dados.

babelproofreader
fonte
Heh - esse foi realmente um dos enredos que fiz que não apareceu no post. O problema que tive foi decidir como calcular os limites - minha tentativa inicial foi com os limites de Poisson, com lambda definido como a média dos meus dados, mas a variação é muito alta para ser um Poisson adequado (alto o suficiente para importar na prática? não sei).
Matt Parker
Um outro problema é que o centro da distribuição pode mudar com o tempo - por exemplo, não faria sentido estabelecer esses limites usando dados do início do século XX, quando o Colorado era um paraíso para pacientes com TB. Então, qual é a maneira apropriada de manter as linhas atualizadas com mudanças de longo prazo no processo, enquanto ainda é capaz de identificar desvios?
Matt Parker
4

Você pode tentar modelar seus dados usando um Modelo Linear Generalizado Dinâmico (DGLM). No R, você pode ajustar esse tipo de modelo usando os pacotes sspir e KFAS. Em certo sentido, isso é semelhante à abordagem gam sugerida por Rob, exceto que, em vez de supor que a média logarítmica das observações de Poisson seja uma função suave do tempo, ela assume que segue uma dinâmica estocástica.


fonte
Legal - eu não conhecia o pacote KFAS. Há também a DLM e dse para abordagens espaço-ish estaduais e uma visão geral para usuários R aqui: cran.r-project.org/web/views/TimeSeries.html
conjugateprior
2
Eu recomendo o dlmpacote. Os DLMs não são tão fáceis de usar quanto as outras soluções, mas o dlmtornam o mais fácil possível e tem uma bela vinheta que o guia pelo processo.
Wayne
2

Vou deixar a questão principal em paz, porque acho que vou errar (embora eu também analise dados para um profissional de saúde e, para ser honesto, se eu tivesse esses dados, eu os analisaria apenas usando técnicas padrão e espero o melhor, eles parecem bem para mim).

Quanto aos pacotes R, encontrei a biblioteca TSA e seu livro acompanhante muito útil. O armasubsetscomando, particularmente, acho que economiza muito tempo.

Chris Beeley
fonte
2

Fuja das estatísticas enumerativas tradicionais, como Deming sugeriria, e se arrisque nas estatísticas analíticas tradicionais - nesse caso, nos gráficos de controle. Veja todos os livros de Donald Wheeler PhD, particularmente seus "Tópicos avançados no SPC" para obter mais informações.

GTB
fonte
Alguém acabou de fazer uma pergunta sobre os gráficos do SPC (também conhecido como QC) no R em stats.stackexchange.com/questions/15809/…, onde forneco algumas dicas de pacotes. Não tenho certeza do SPC / QC: pergunto-me se foi mais útil na era pré-computador e para os trabalhadores da loja, mas vale a pena considerar.
Wayne
Na verdade, essa resposta é redundante com @ babelproofreader's?
Wayne
2

Em resposta à sua pergunta direta "Como posso testar se há uma mudança real no processo? E se consigo identificar um declínio, como posso usar essa tendência e qualquer sazonalidade que possa haver para estimar o número de casos que poderemos ver em os próximos meses? " Desenvolva um Modelo de Função de Transferência (ARMAX) que explique prontamente a dependência de período a período, incluindo a estrutura ARIMA sazonal. Incorpore quaisquer mudanças de nível identificáveis, pulsos sazonais, tendências de horário local e PUlses que possam ter sido sugeridos por métodos empíricos / analíticos como a Detecção de intervenção. SE ESTE MODELO ROBUSTO INCLUIR UM FATOR / SÉRIE combinando com "declínios", então suas orações serão atendidas. Em alternativa, basta adicionar uma estrutura hipotética, por exemplo, para testar uma mudança de tendência temporal no ponto T1, construir dois manequins X1 = 1,1,2,3 ,,,,,, T e X2 = 0,0,0,0,0,0,0,1,2,3,4,5, .... ONDE OS ZEROS TERMINAM NO PERÍODO T1-1. O teste da hipótese de uma mudança significativa de tendência no período T1 será avaliado usando o "valor t" para X2.

Editado em 22/09/11

Frequentemente, dados de doenças como essa têm efeitos mensais, já que o clima / temperatura geralmente é um causal não especificado. Na omissão das verdadeiras séries caudais, os modelos ARIMA usam memória ou manequins sazonais como substitutos. Além disso, séries como essa podem ter mudanças de nível e / ou tendências da hora local, refletindo mudanças estruturais ao longo do tempo. A exploração da estrutura autoregressiva nos dados, em vez de impor vários artefatos, como o tempo, o quadrado do tempo, o tempo cúbico etc., foi considerada bastante útil, menos presuntiva e ad hoc. Também deve-se tomar cuidado para identificar "valores incomuns", pois eles podem ser úteis na sugestão de variáveis ​​de causa adicionais e, no mínimo, levar a estimativas robustas dos outros parâmetros do modelo. Finalmente, descobrimos que a variabilidade / parâmetros pode variar ao longo do tempo, portanto, esses refinamentos do modelo podem estar em ordem.

IrishStat
fonte
Como alguém ajusta o valor-p para levar em conta a identificação de um post hoc em T1 ( ou seja , percebê-lo após revisar os dados)?
whuber
todos os refinamentos, como a verificação de diagnóstico que leva ao aumento, são tratados da mesma maneira que a estrutura sugerida enquanto os dados estavam na gaveta. Adicionar um atraso a uma variável preditora com base na verificação de diagnóstico simplesmente adiciona outra hipótese nula à lista. Isso não difere da exclusão de um coeficiente não significativo.
IrishStat
@ Irish, eu não sigo isso. T1 não parece ser um atraso: estipula um ponto de mudança. Não é fácil encontrar alterações "significativas" se você primeiro pode inspecionar os dados para escolher onde está o ponto de mudança?
whuber
@whuber Sim, você está certo. Mas pense em um processo progressivo em regressão em que você examina as variáveis ​​alternativas (omitidas) para "incorporação potencial". Isso não é diferente no sentido em que você está decidindo qual "tendência omitida" deve ser adicionada ao modelo para tornar gaussiano o processo de erro resultante.
IrishStat
@ Irish Essa é uma analogia esclarecedora. Se eu entendo, na verdade, você considera ter uma variável em potencial para cada período (designando uma possível mudança naquele período) e está invocando um processo sistemático para determinar quais delas devem ser incluídas no modelo. Isso sugere que alguns procedimentos padrão de ajuste de nível p, como o Bonferroni, possam ser razoavelmente aplicados. Isso seria válido?
whuber