这是测试自杀计数数据中季节性影响的合适方法吗?

机器算法验证 r 卡方检验 有马 计数数据 季节性
2022-02-10 17:10:14

我有 17 年(1995 年到 2011 年)与美国一个州的自杀死亡相关的死亡证明数据。关于自杀和月份/季节有很多神话,其中大部分是矛盾的,而我的文献复习过,我对所使用的方法或对结果的信心没有清晰的认识。

因此,我开始着手查看我是否可以确定在我的数据集中的任何给定月份中自杀的可能性是否更大。我所有的分析都是在 R 中完成的。

数据中的自杀总数为 13,909 人。

如果您查看自杀次数最少的一年,它们发生在 309/365 天 (85%)。如果您查看自杀最多的一年,它们发生在 339/365 天 (93%)。

所以每年有相当多的日子没有自杀。然而,将所有 17 年汇总起来,一年中的每一天都会发生自杀事件,包括 2 月 29 日(虽然平均为 38 岁时只有 5 起)。

在此处输入图像描述

简单地将一年中每一天的自杀人数相加并不能表明明显的季节性(在我看来)。

按月汇总,每月平均自杀人数为:

(m=65, sd=7.4, 到 m=72, sd=11.1)

我的第一种方法是按月汇总所有年份的数据集,并在计算零假设的预期概率后进行卡方检验,即按月计算的自杀人数没有系统性差异。我计算了每个月的概率,并考虑了天数(并为闰年调整了二月)。

卡方结果表明按月没有显着变化:

# So does the sample match  expected values?
chisq.test(monthDat$suicideCounts, p=monthlyProb)
# Yes, X-squared = 12.7048, df = 11, p-value = 0.3131

下图显示了每月的总计数。水平红线分别位于 2 月、30 天月和 31 天月的预期值。与卡方检验一致,没有月份超出预期计数的 95% 置信区间。 在此处输入图像描述

我以为我已经完成了,直到我开始研究时间序列数据。stl正如我想象的许多人所做的那样,我从使用stats 包中的函数的非参数季节性分解方法开始。

为了创建时间序列数据,我从汇总的每月数据开始:

suicideByMonthTs <- ts(suicideByMonth$monthlySuicideCount, start=c(1995, 1), end=c(2011, 12), frequency=12) 

# Plot the monthly suicide count, note the trend, but seasonality?
plot(suicideByMonthTs, xlab="Year",
  ylab="Annual  monthly  suicides")

在此处输入图像描述

     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1995  62  47  55  74  71  70  67  69  61  76  68  68
1996  64  69  68  53  72  73  62  63  64  72  55  61
1997  71  61  64  63  60  64  67  50  48  49  59  72
1998  67  54  72  69  78  45  59  53  48  65  64  44
1999  69  64  65  58  73  83  70  73  58  75  71  58
2000  60  54  67  59  54  69  62  60  58  61  68  56
2001  67  60  54  57  51  61  67  63  55  70  54  55
2002  65  68  65  72  79  72  64  70  59  66  63  66
2003  69  50  59  67  73  77  64  66  71  68  59  69
2004  68  61  66  62  69  84  73  62  71  64  59  70
2005  67  53  76  65  77  68  65  60  68  71  60  79
2006  65  54  65  68  69  68  81  64  69  71  67  67
2007  77  63  61  78  73  69  92  68  72  61  65  77
2008  67  73  81  73  66  63  96  71  75  74  81  63
2009  80  68  76  65  82  69  74  88  80  86  78  76
2010  80  77  82  80  77  70  81  89  91  82  71  73
2011  93  64  87  75 101  89  87  78 106  84  64  71

然后进行stl()分解

# Seasonal decomposition
suicideByMonthFit <- stl(suicideByMonthTs, s.window="periodic")
plot(suicideByMonthFit)

在此处输入图像描述

在这一点上,我开始担心,因为在我看来,既有季节性因素又有趋势。经过大量互联网研究后,我决定按照 Rob Hyndman 和 George Athanasopoulos 的在线文本“预测:原则和实践”中的说明进行操作,特别是应用季节性 ARIMA 模型。

我使用adf.test()andkpss.test()来评估平稳性并得到相互矛盾的结果。他们都拒绝了原假设(注意他们检验了相反的假设)。

adfResults <- adf.test(suicideByMonthTs, alternative = "stationary") # The p < .05 value 
adfResults

    Augmented Dickey-Fuller Test

data:  suicideByMonthTs
Dickey-Fuller = -4.5033, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary

kpssResults <- kpss.test(suicideByMonthTs)
kpssResults

    KPSS Test for Level Stationarity

data:  suicideByMonthTs
KPSS Level = 2.9954, Truncation lag parameter = 3, p-value = 0.01

然后,我使用书中的算法来查看是否可以确定趋势和季节需要进行的差分量。我以 nd = 1,ns = 0 结束。

然后我运行了auto.arima,它选择了一个既有趋势分量又有季节性分量以及“漂移”类型常数的模型。

# Extract the best model, it takes time as I've turned off the shortcuts (results differ with it on)
bestFit <- auto.arima(suicideByMonthTs, stepwise=FALSE, approximation=FALSE)
plot(theForecast <- forecast(bestFit, h=12))
theForecast

在此处输入图像描述

> summary(bestFit)
Series: suicideByMonthFromMonthTs 
ARIMA(0,1,1)(1,0,1)[12] with drift         

Coefficients:
          ma1    sar1     sma1   drift
      -0.9299  0.8930  -0.7728  0.0921
s.e.   0.0278  0.1123   0.1621  0.0700

sigma^2 estimated as 64.95:  log likelihood=-709.55
AIC=1429.1   AICc=1429.4   BIC=1445.67

Training set error measures:
                    ME    RMSE     MAE       MPE     MAPE     MASE       ACF1
Training set 0.2753657 8.01942 6.32144 -1.045278 9.512259 0.707026 0.03813434

最后,我查看了拟合的残差,如果我理解正确,因为所有值都在阈值范围内,它们的行为就像白噪声,因此模型相当合理。我按照文中的描述运行了一个portmanteau 测试,它的 ap 值远高于 0.05,但我不确定我的参数是否正确。

Acf(residuals(bestFit))

在此处输入图像描述

Box.test(residuals(bestFit), lag=12, fitdf=4, type="Ljung")

    Box-Ljung test

data:  residuals(bestFit)
X-squared = 7.5201, df = 8, p-value = 0.4817

回头再看华宇建模那一章,我才意识到,我auto.arima确实选择了趋势和季节建模。而且我也意识到预测并不是我应该做的具体分析。我想知道是否应将特定月份(或更一般的一年中的某个时间)标记为高风险月份。预测文献中的工具似乎非常相关,但对于我的问题可能不是最好的。非常感谢任何和所有输入。

我正在发布一个指向包含每日计数的 csv 文件的链接。该文件如下所示:

head(suicideByDay)

        date year month day_of_month t count
1 1995-01-01 1995    01           01 1     2
2 1995-01-03 1995    01           03 2     1
3 1995-01-04 1995    01           04 3     3
4 1995-01-05 1995    01           05 4     2
5 1995-01-06 1995    01           06 5     3
6 1995-01-07 1995    01           07 6     2

daily_suicide_data.csv

计数是当天发生的自杀人数。“t”是从 1 到表中总天数的数字序列 (5533)。

我注意到下面的评论,并考虑了与建模自杀和季节有关的两件事。首先,关于我的问题,月份只是标记季节变化的代理,我对某个特定月份是否与其他月份不同不感兴趣(这当然是一个有趣的问题,但这不是我想要的调查)。因此,我认为通过简单地使用所有月份的前 28 天来平衡月份是有意义的。当你这样做时,你的拟合度会稍差一些,我将其解释为缺乏季节性的更多证据。在下面的输出中,第一个拟合是从下面的答案中复制出来的,使用月份及其真实天数,然后是数据集自杀ByShortMonth其中自杀人数是从所有月份的前 28 天开始计算的。我感兴趣的是人们对这种调整是否是个好主意、不必要还是有害的看法?

> summary(seasonFit)

Call:
glm(formula = count ~ t + days_in_month + cos(2 * pi * t/12) + 
    sin(2 * pi * t/12), family = "poisson", data = suicideByMonth)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.4782  -0.7095  -0.0544   0.6471   3.2236  

Coefficients:
                     Estimate Std. Error z value Pr(>|z|)    
(Intercept)         2.8662459  0.3382020   8.475  < 2e-16 ***
t                   0.0013711  0.0001444   9.493  < 2e-16 ***
days_in_month       0.0397990  0.0110877   3.589 0.000331 ***
cos(2 * pi * t/12) -0.0299170  0.0120295  -2.487 0.012884 *  
sin(2 * pi * t/12)  0.0026999  0.0123930   0.218 0.827541    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 302.67  on 203  degrees of freedom
Residual deviance: 190.37  on 199  degrees of freedom
AIC: 1434.9

Number of Fisher Scoring iterations: 4

> summary(shortSeasonFit)

Call:
glm(formula = shortMonthCount ~ t + cos(2 * pi * t/12) + sin(2 * 
    pi * t/12), family = "poisson", data = suicideByShortMonth)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-3.2414  -0.7588  -0.0710   0.7170   3.3074  

Coefficients:
                     Estimate Std. Error z value Pr(>|z|)    
(Intercept)         4.0022084  0.0182211 219.647   <2e-16 ***
t                   0.0013738  0.0001501   9.153   <2e-16 ***
cos(2 * pi * t/12) -0.0281767  0.0124693  -2.260   0.0238 *  
sin(2 * pi * t/12)  0.0143912  0.0124712   1.154   0.2485    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 295.41  on 203  degrees of freedom
Residual deviance: 205.30  on 200  degrees of freedom
AIC: 1432

Number of Fisher Scoring iterations: 4

我研究的第二件事是使用月份作为季节代理的问题。也许一个更好的季节指标是一个地区接收的日光小时数。该数据来自北部一个日光变化很大的州。下面是 2002 年的日光图。

在此处输入图像描述

当我使用这个数据而不是一年中的月份时,效果仍然很显着,但效果非常非常小。残余偏差远大于上述模型。如果白天时间是一个更好的季节模型,并且拟合度不太好,这是否更多地证明了非常小的季节效应?

> summary(daylightFit)

Call:
glm(formula = aggregatedDailyCount ~ t + daylightMinutes, family = "poisson", 
    data = aggregatedDailyNoLeap)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-3.0003  -0.6684  -0.0407   0.5930   3.8269  

Coefficients:
                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)      3.545e+00  4.759e-02  74.493   <2e-16 ***
t               -5.230e-05  8.216e-05  -0.637   0.5244    
daylightMinutes  1.418e-04  5.720e-05   2.479   0.0132 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 380.22  on 364  degrees of freedom
Residual deviance: 373.01  on 362  degrees of freedom
AIC: 2375

Number of Fisher Scoring iterations: 4

如果有人想玩这个,我会发布白天的时间。请注意,这不是闰年,因此如果您想输入闰年的分钟数,请推断或检索数据。

state.daylight.2002.csv

[编辑以从已删除的答案中添加情节(希望 rnso 不介意我将已删除答案中的情节移至该问题。svannoy,如果您毕竟不想添加此内容,则可以还原它)]

在此处输入图像描述

4个回答

泊松回归呢?

我创建了一个数据框,其中包含您的数据、t时间索引(以月为单位)和monthdays每个月天数的变量。

T <- read.table("suicide.txt", header=TRUE)
U <- data.frame( year = as.numeric(rep(rownames(T),each=12)), 
         month = rep(colnames(T),nrow(T)), 
         t = seq(0, length = nrow(T)*ncol(T)), 
         suicides = as.vector(t(T)))
U$monthdays <- c(31,28,31,30,31,30,31,31,30,31,30,31)
U$monthdays[ !(U$year %% 4) & U$month == "Feb" ] <- 29

所以它看起来像这样:

> head(U,14)
   year month  t suicides monthdays
1  1995   Jan  0       62        31
2  1995   Feb  1       47        28
3  1995   Mar  2       55        31
4  1995   Apr  3       74        30
5  1995   May  4       71        31
6  1995   Jun  5       70        30
7  1995   Jul  6       67        31
8  1995   Aug  7       69        31
9  1995   Sep  8       61        30
10 1995   Oct  9       76        31
11 1995   Nov 10       68        30
12 1995   Dec 11       68        31
13 1996   Jan 12       64        31
14 1996   Feb 13       69        29

现在让我们将具有时间效应和天数效应的模型与添加了月份效应的模型进行比较:

> a0 <- glm( suicides ~ t + monthdays, family="poisson", data = U )
> a1 <- glm( suicides ~ t + monthdays + month, family="poisson", data = U )

以下是“小”模型的总结:

> summary(a0)

Call:
glm(formula = suicides ~ t + monthdays, family = "poisson", data = U)

Deviance Residuals:
    Min       1Q   Median       3Q      Max
-2.7163  -0.6865  -0.1161   0.6363   3.2104

Coefficients:
             Estimate Std. Error z value Pr(>|z|)
(Intercept) 2.8060135  0.3259116   8.610  < 2e-16 ***
t           0.0013650  0.0001443   9.461  < 2e-16 ***
monthdays   0.0418509  0.0106874   3.916 9.01e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 302.67  on 203  degrees of freedom
Residual deviance: 196.64  on 201  degrees of freedom
AIC: 1437.2

Number of Fisher Scoring iterations: 4

您可以看到这两个变量具有很大的边际效应。现在看看更大的模型:

> summary(a1)

Call:
glm(formula = suicides ~ t + monthdays + month, family = "poisson",
    data = U)

Deviance Residuals:
     Min        1Q    Median        3Q       Max
-2.56164  -0.72363  -0.05581   0.58897   3.09423

Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept)  1.4559200  2.1586699   0.674    0.500
t            0.0013810  0.0001446   9.550   <2e-16 ***
monthdays    0.0869293  0.0719304   1.209    0.227
monthAug    -0.0845759  0.0832327  -1.016    0.310
monthDec    -0.1094669  0.0833577  -1.313    0.189
monthFeb     0.0657800  0.1331944   0.494    0.621
monthJan    -0.0372652  0.0830087  -0.449    0.653
monthJul    -0.0125179  0.0828694  -0.151    0.880
monthJun     0.0452746  0.0414287   1.093    0.274
monthMar    -0.0638177  0.0831378  -0.768    0.443
monthMay    -0.0146418  0.0828840  -0.177    0.860
monthNov    -0.0381897  0.0422365  -0.904    0.366
monthOct    -0.0463416  0.0830329  -0.558    0.577
monthSep     0.0070567  0.0417829   0.169    0.866
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 302.67  on 203  degrees of freedom
Residual deviance: 182.72  on 190  degrees of freedom
AIC: 1445.3

Number of Fisher Scoring iterations: 4

好吧,monthdays效果当然消失了;只有闰年才能估计!!将其保留在模型中(并考虑闰年)允许使用剩余偏差来比较两个模型。

> anova(a0, a1, test="Chisq")
Analysis of Deviance Table

Model 1: suicides ~ t + monthdays
Model 2: suicides ~ t + monthdays + month
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1       201     196.65
2       190     182.72 11   13.928    0.237

那么,没有(显着的)月份效应?但是季节性影响呢?我们可以尝试使用两个变量来捕捉季节性:cos(2πt12)sin(2πt12)

> a2 <- glm( suicides ~ t + monthdays + cos(2*pi*t/12) + sin(2*pi*t/12),
             family="poisson", data = U )
> summary(a2)

Call:
glm(formula = suicides ~ t + monthdays + cos(2 * pi * t/12) +
    sin(2 * pi * t/12), family = "poisson", data = U)

Deviance Residuals:
    Min       1Q   Median       3Q      Max
-2.4782  -0.7095  -0.0544   0.6471   3.2236

Coefficients:
                     Estimate Std. Error z value Pr(>|z|)
(Intercept)         2.8676170  0.3381954   8.479  < 2e-16 ***
t                   0.0013711  0.0001444   9.493  < 2e-16 ***
monthdays           0.0397990  0.0110877   3.589 0.000331 ***
cos(2 * pi * t/12) -0.0245589  0.0122658  -2.002 0.045261 *
sin(2 * pi * t/12)  0.0172967  0.0121591   1.423 0.154874
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 302.67  on 203  degrees of freedom
Residual deviance: 190.37  on 199  degrees of freedom
AIC: 1434.9

Number of Fisher Scoring iterations: 4

现在将其与空模型进行比较:

> anova(a0, a2, test="Chisq")
Analysis of Deviance Table

Model 1: suicides ~ t + monthdays
Model 2: suicides ~ t + monthdays + cos(2 * pi * t/12) + sin(2 * pi *
    t/12)
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1       201     196.65                   
2       199     190.38  2   6.2698   0.0435 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

所以,可以肯定地说,这表明了季节性效应......

卡方检验是一种很好的方法,可以作为您问题的初步观点。

stl作为测试季节性存在的工具,分解可能会产生误导即使将白噪声(没有结构的随机信号)作为输入传递,此过程也设法返回稳定的季节性模式。尝试例如:

plot(stl(ts(rnorm(144), frequency=12), s.window="periodic"))

查看由自动 ARIMA 模型选择程序选择的订单也有点冒险,因为季节性 ARIMA 模型并不总是涉及季节性(有关详细信息,请参阅此讨论)。在这种情况下,所选模型会产生季节性周期,@RichardHardy 的评论是合理的,但是,需要进一步了解才能得出自杀是由季节性模式驱动的结论。

下面,我根据对您发布的月度系列的分析总结了一些结果。这是根据基本结构时间序列模型估计的季节性分量:

require(stsm)
m <- stsm.model(model = "llm+seas", y = x)
fit <- stsmFit(m, stsm.method = "maxlik.td.scoring")
plot(tsSmooth(fit)$states[,2], ylab = "")
mtext(text = "seasonal component", side = 3, adj = 0, font = 2)

估计的季节性成分

使用带有默认选项的软件 TRAMO-SEATS 提取了一个类似的组件。我们可以看到,估计的季节性模式随着时间的推移并不稳定,因此不支持样本期间跨月自杀人数反复出现模式的假设。使用默认选项运行软件 X-13ARIMA-SEATS,季节性组合测试得出的结论是不存在可识别的季节性。

编辑( 有关可识别季节性的定义,请参见下面的此答案和我的评论)。

鉴于您的数据的性质,值得使用计数数据模型(例如泊松模型)来补充基于时间序列方法的分析,并测试该模型中季节性的重要性。将标签计数数据添加到您的问题可能会在这个方向上产生更多视图和潜在答案。

正如我在评论中指出的,这是一个非常有趣的问题。检测季节性不仅仅是一项统计工作。一个合理的方法是咨询理论和专家,例如:

  • 心理学家
  • 精神科医生
  • 社会学家

对这个问题要了解“为什么”会有季节性来补充数据分析。谈到数据,我使用了一种出色的分解方法,称为未观察组件模型(UCM),它是状态空间方法的一种形式。另请参阅 Koopman 的这篇非常易于理解的文章我的方法类似于@Javlacalle。它不仅提供了分解时间序列数据的工具,而且还通过显着性检验客观地评估了季节性的存在与否。不是对非实验数据进行显着性测试的忠实粉丝,但我不知道有任何其他程序可以测试您对时间序列数据是否存在季节性的假设。

许多人忽略了一个非常重要的特征,人们想要了解的是季节性的类型:

  1. 随机 - 随机变化且难以预测
  2. 确定性 - 不会改变,完全可以预测。您可以使用虚拟或三角函数(正弦/余弦等)来建模

对于像您这样的冗长时间序列数据,季节性可能会随着时间而改变。同样,UCM 是我所知道的唯一可以检测这些随机/确定性季节性的方法。UCM 可以将您的问题分解为以下“组件”:

Time Series Data = level + Slope + Seasonality + Cycle + Causal + Error(Noise).

您还可以测试水平、斜率、周期是确定性的还是随机的。请注意level + slope = trend. 下面我将使用 UCM 对您的数据进行一些分析。我使用SAS进行分析。

data input;
format date mmddyy10.;
date = intnx( 'month', '1jan1995'd, _n_-1 );
      input deaths@@;
datalines;
62    47  55  74  71  70  67  69  61  76  68  68
64    69  68  53  72  73  62  63  64  72  55  61
71    61  64  63  60  64  67  50  48  49  59  72
67    54  72  69  78  45  59  53  48  65  64  44
69    64  65  58  73  83  70  73  58  75  71  58
60    54  67  59  54  69  62  60  58  61  68  56
67    60  54  57  51  61  67  63  55  70  54  55
65    68  65  72  79  72  64  70  59  66  63  66
69    50  59  67  73  77  64  66  71  68  59  69
68    61  66  62  69  84  73  62  71  64  59  70
67    53  76  65  77  68  65  60  68  71  60  79
65    54  65  68  69  68  81  64  69  71  67  67
77    63  61  78  73  69  92  68  72  61  65  77
67    73  81  73  66  63  96  71  75  74  81  63
80    68  76  65  82  69  74  88  80  86  78  76
80    77  82  80  77  70  81  89  91  82  71  73
93    64  87  75  101 89  87  78  106 84  64  71
;
run;

ods graphics on;
 proc ucm data = input plots=all; 
      id date interval = month; 
      model deaths ; 
      irregular ; 
      level checkbreak; 
      season length = 12 type=trig var = 0 noest; * Note I have used trigonometry to model seasonality;
   run;

   ods graphics off;

在考虑了不同的组件和组合的几次迭代之后,我以以下形式的简约模型结束:

存在随机水平 + 确定性季节性 + 一些异常值,并且数据没有任何其他可检测的特征。

在此处输入图像描述

以下是各种成分的显着性分析。请注意,我使用了类似于@Elvis 和@Nick Cox 的三角函数(即 PROC UCM 中季节性语句中的 sin/cos)。您也可以在 UCM 中使用虚拟编码,当我测试时,两者都给出了相似的结果。有关在 SAS 中建模季节性的两种方法之间的差异,请参阅此文档。

在此处输入图像描述

如上所示,您有异常值:2009 年的两个脉冲和一个水平转变(经济/房地产泡沫在 2009 年之后发挥了作用吗??)这可以通过进一步的深入分析来解释。使用的一个很好的特点Proc UCM是它提供了出色的图形输出。

以下是季节性以及趋势和季节性的组合图。剩下的就是噪音

在此处输入图像描述 在此处输入图像描述

如果要使用 p 值和显着性测试,更重要的诊断测试是检查残差是否无模式且正态分布,这在使用 UCM 的上述模型中得到满足,如下面的残差诊断图中所示,如 acf/pacf和别的。

在此处输入图像描述

结论:基于使用 UCM 的数据分析和显着性检验,数据似乎具有季节性,我们看到 5 月/6 月/7 月的夏季死亡人数较多,而冬季 12 月和 2 月的死亡人数最低。

其他注意事项:还请考虑季节性变化幅度的实际意义。要否定反事实论点,请咨询领域专家以进一步补充和验证您的假设。

我绝不是说这是解决这个问题的唯一方法。我喜欢 UCM 的特点是它允许您显式地对所有时间序列特征进行建模,并且还具有高度的可视性。

对于初始视觉估计,可以使用下图。用黄土曲线及其 95% 的置信区间绘制月度数据,似乎有一个在 6 月达到峰值的年中上涨。其他因素可能导致数据分布广泛,因此季节性趋势可能在此原始数据黄土图中被掩盖。数据点已经抖动。

在此处输入图像描述

编辑:下图显示黄土曲线和上个月病例数变化的置信区间:

在此处输入图像描述

这也表明,在上半年的几个月里,病例数一直在上升,而在下半年则在下降。这也暗示了年中的一个高峰。然而,置信区间很宽并且跨越0,即全年没有变化,表明缺乏统计学意义。

一个月数字的差异可以与前 3 个月的平均值进行比较:

在此处输入图像描述

这表明 5 月份数量明显增加,10 月份数量下降。