计数数据的时间序列,计数<20


23

我最近开始为结核病诊所工作。我们会定期开会,讨论我们目前正在治疗的结核病病例数,进行的检测数目等。我想开始对这些计数进行建模,以便我们不只是猜测是否有异常。不幸的是,我几乎没有时间序列方面的培训,并且我大部分时间都在接触非常连续的数据(股价)或大量计数(流感)的模型。但是我们每月处理0-18例(平均6.68,中位数7,变量12.3),分布情况如下:

[图像迷失在时间的迷雾中]

[被烟灰吞噬的图像]

我已经找到了一些有关此类模型的文章,但我非常感谢听到您的建议-无论是方法还是我可以用来实现这些方法的R包。

编辑: mbq的回答迫使我对我在这里要问的问题进行更仔细的思考。我对每月的工作太挂了,失去了问题的实际重点。我想知道的是:(从2008年开始)(明显可见)的下降是否反映了案件总数的下降趋势?在我看来,2001-2007年间每月的案件数量反映了一个稳定的过程;也许有些季节性,但总体稳定。从2008年至今,情况似乎正在发生变化:案件总数正在下降,尽管由于随机性和季节性,每月的案件数可能会上下波动。如何测试流程中是否存在真正的变化?如果我能确定下降,


2
链接已终止。如果您能够保留图像(或重新生成图像),请使用将图像存储在imgur的新系统。
Glen_b-恢复莫妮卡2015年

不幸的是,这些地块是从几份工作中获得的。道歉!
马特·帕克

1
鉴于此帖子(#173)早在该网站处于Beta版时就不足为奇了-很少有人可以从那时的早些时候重新发布这些情节。不管怎么说,还是要谢谢你。
Glen_b-恢复莫妮卡2015年

Answers:


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检验(Chow检验)框架的检验/方法。这包括分别拟合,绘制和测试波动过程(例如CUSUM,MOSUM,递归/移动估计)和F统计量的方法。使用波动过程可以在线监视传入数据。最后,可以估计具有结构变化的回归模型中的断点以及置信区间。始终强调可视化数据的方法。”

PS。漂亮的图形;)


稍后,我将不得不更彻底地阅读它,但是,是的,此软件包肯定可以解决我在这里面临的各种问题。谢谢!另外,还要感谢您对这些情节的客气话; p
Matt Parker 2010年

6

真的需要一些高级模型吗?根据我对结核病的了解,在没有流行病的情况下,感染是随机行为,因此,N个月的计数不应与N-1个月的计数相关。(您可以使用自相关检查此假设)。如果是这样,仅分析月度计数的分布就足以确定某个计数是否显着高于正常水平。
另一方面,您可以寻找与其他变量的相关性,例如季节,旅行流量或您可以想象的任何相关性。如果您发现类似的内容,则可以将其用于某些数据标准化。


1
关于月份N的计数不一定与N-1相关的观点是很容易理解的。对于像TB这样的缓慢增长的疾病,我必须仔细研究,但是我敢肯定,我可以确定在报告源病例与报告任何继发病例之间有多大滞后案件。
马特·帕克

1
但是,您要分析的是我的问题的核心,即分析月度计数的分布。无论是在美国还是在我所在地区,结核病的发病率都有所下降。例如,当我将2009年与前几年进行比较时,肯定会减少案例。2010年有望减少。我要确定的是(这些问题在解释问题上做得很差)是这些下降是否是持续下降趋势的一部分,或者仅仅是下降趋势。谢谢-您让我更加仔细地考虑了这个问题。
马特·帕克

5

通常,这样的疾病数据是使用广义线性模型执行的,因为它不一定是时间序列分析的重要应用-月份通常彼此之间并不总是相互关联的。

如果我得到了这些数据,这就是我会做的(实际上,已经完成了与之类似的数据):

如果我正确地查看了您的数据,请创建一个更准确地描述为“自2000年1月1日以来的月份”的“时间”变量。然后,我将使用泊松分布(或负二项式)和一个具有以下形式的对数链接在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控制图应用于数据。


嘿-这实际上是我制作的未纳入职位的情节之一。我遇到的问题是决定如何计算界限-我最初的尝试是使用Poisson界限,将lambda设置为数据的均值,但是方差太大以致无法成为合适的Poisson(在实践中足够高,可以起作用吗?不知道)。
马特·帕克

另一个问题是分布的中心会随时间变化-例如,使用1900年代初的数据(科罗拉多州是结核病患者的避风港)来设定这些界限是没有意义的。那么,在保持过程中长期变化的同时又能够发现偏差的一种合适方法是什么?
马特·帕克

4

您可以尝试使用动态广义线性模型(DGLM)对数据建模。在R中,您可以使用sspir和KFAS软件包来拟合此类模型。从某种意义上讲,这与Rob提出的gam方法类似,不同之处在于它不是假设Poisson观测值的对数均值是时间的平滑函数,而是假定它遵循随机动力学。


太酷了-我不知道KFAS软件包。还有用于状态空间的方法的dlm和dse,以及此处的R用户的一般概述:cran.r-project.org/web/views/TimeSeries.html
conjugateprior

2
我强烈推荐这个dlm包装。DLM并不像其他解决方案那样易于使用,但是dlm使其尽可能简单,并且具有很好的插图,可指导您完成整个过程。
韦恩

2

我将不理会主要问题,因为我认为我会弄错的(尽管我也分析了医疗服务提供者的数据,老实说,如果我有这些数据,我只会使用标准技术来分析它们,希望最好,他们对我来说还不错)。

至于R包,我发现TSA库及其随附的确实非常有用。该armasubsets命令尤其是我认为可以节省大量时间。


2

正如Deming所建议的那样,摆脱了传统的枚举统计,并涉足传统的分析统计-在这种情况下,是控制图。有关更多信息,请参阅Donald Wheeler博士的任何书籍,尤其是他的“ SPC中的高级主题”。


有人在stats.stackexchange.com/questions/15809/…中问了有关R中SPC(又名QC)图表的问题,在此我提供了一些软件包提示。我不确定SPC / QC:我想知道它在预计算机时代和车间工人中是否更有用,但是值得考虑。
韦恩

其实,这个答案对@babelproofreader来说是多余的吗?
韦恩

2

回答您的直接问题“我如何才能测试过程中是否存在真正的变化?如果我能够确定下降趋势,那么我将如何利用这一趋势以及可能存在的季节性因素来估计我们可能会看到的病例数未来几个月?” 开发一个传递函数模型(ARMAX),该模型可以轻松解释周期对周期的依赖性,包括季节性ARIMA结构。结合经验/分析方法(例如干预检测)建议的任何可识别的水平变化,季节性脉动,本地时间趋势和目标。如果此健壮模型包含与“拒绝”匹配的一个或多个因子,则您的祈祷已被回答。在替代方案中,只需添加一个假设的结构,例如以测试T1点的时间趋势变化,构造两个虚拟对象X1 = 1,1,2,3 ,,,,, T和X2 = 0,0,0,0,0,0,0,1,2,3,4,5,....零结束于T1-1的时间。将使用X2的“ t值”来评估在时间段T1发生明显趋势变化的假设检验。

编辑的9/22/11

通常,这样的疾病数据每月都会有影响,因为天气/温度通常是不确定的因果关系。省略了真正的尾鳍系列,ARIMA模型使用记忆或季节性假人作为替代。此外,类似的序列可能会发生电平变化和/或本地时间趋势,反映出结构随时间的变化。已经发现,在数据中利用自回归结构而不是施加各种工件(例如时间和时间平方以及时间立方等)非常有用,而且推定和临时性较低。还应小心识别“异常值”,因为它们通常可以用于建议其他原因变量,并且至少可以对其他模型参数进行可靠的估计。最终,我们发现变异性/参数可能会随时间变化,因此这些模型优化可能是有序的。


如何调整p值以说明事后识别T1 (在检查数据后注意到)?
ub

所有改进,即导致扩展的诊断检查,都与数据在抽屉中时所建议的结构相同。根据诊断检查将延迟添加到预测变量中,只会向列表中添加另一个无效假设。这与删除不重要的系数没有什么不同。
IrishStat

@爱尔兰,我不遵守。T1似乎并不滞后:它规定了一个变更点。如果首先允许您检查数据以选择更改点在哪里,那么发现“重大”更改难道不是很容易吗?
ub

@whuber是的,您是对的。但是考虑一下回归中的逐步前进过程,您将在其中检查“潜在合并”的备选(省略)变量。从这个意义上说,这是相同的,您可以确定应将哪个“遗漏趋势”添加到模型中,以使结果误差过程呈高斯分布。
IrishStat,

@爱尔兰这是一个启发性的比喻。据我了解,实际上,您打算在每个时期内都有一个潜在变量(指定那个时期可能发生的变化),并且正在调用系统的过程来确定应在模型中包括哪些变量。这表明可以合理地使用某些标准的p级调整程序,例如Bonferroni。那会有效吗?
ub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.