Является ли этот метод подходящим для проверки сезонных эффектов в данных о количестве самоубийств?


24

У меня есть 17 лет (с 1995 по 2011) данных свидетельств о смерти, связанных со смертями от самоубийств для штата в США. Существует много мифологий о самоубийствах и месяцах / сезонах, большая часть которых противоречива, и литературы, которую я ' После проверки я не получил четкого представления о применяемых методах или уверенности в результатах.

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

Общее количество самоубийств в данных 13,909.

Если вы посмотрите на год с наименьшим количеством самоубийств, они происходят в 309/365 дней (85%). Если вы посмотрите на год с наибольшим количеством самоубийств, они происходят в течение 339/365 дней (93%).

Таким образом, каждый год существует достаточное количество дней без самоубийств. Однако при агрегировании за все 17 лет самоубийства происходят каждый день в году, включая 29 февраля (хотя только 5, когда в среднем 38).

введите описание изображения здесь

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

Среднемесячные самоубийства в месяц в совокупности варьируются от:

(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

Изображение ниже показывает общее количество в месяц. Горизонтальные красные линии расположены в ожидаемых значениях для февраля, 30-дневного месяца и 31-дневного месяца соответственно. В соответствии с критерием хи-квадрат ни один месяц не выходит за пределы 95% доверительного интервала для ожидаемых значений. введите описание изображения здесь

Я думал, что закончил, пока не начал исследовать данные временных рядов. Как и многие другие, я начал с непараметрического метода сезонной декомпозиции, используя stlфункцию из пакета статистики.

Чтобы создать данные временных рядов, я начал с агрегированных ежемесячных данных:

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)

введите описание изображения здесь

В этот момент я забеспокоился, потому что мне кажется, что есть и сезонная составляющая, и тенденция. После долгих интернет-исследований я решил следовать указаниям Роба Хиндмана и Джорджа Атанасопулоса, изложенным в их тексте онлайн «Прогнозирование: принципы и практика», в частности, чтобы применить сезонную модель ARIMA.

Я использовал adf.test()и kpss.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 дней всех месяцев. Когда вы делаете это, вы становитесь немного хуже, что я интерпретирую как еще одно свидетельство отсутствия сезонности. В приведенных ниже выходных данных первое совпадение представляет собой воспроизведение из ответа ниже с использованием месяцев с их истинным числом дней, за которым следует набор данных suicideByShortMonthв котором число самоубийств рассчитывалось с первых 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 не возражает, чтобы я переместил заговор в удаленном ответе здесь на вопрос. Сванной, если вы не хотите, чтобы это добавлялось в конце концов, вы можете отменить его)]

введите описание изображения здесь


1
Формулировка «один из наших 50 штатов» подразумевает, что все читатели принадлежат США. Очевидно, что здесь также скрывается много пришельцев.
Ник Кокс

1
Это из общедоступного набора данных? Могли бы вы сделать доступными еженедельные или даже дневные данные?
Элвис

1
@ Элвис - я разместил ссылку на данные ежедневного подсчета. Данные поступают из свидетельств о смерти, которые являются «общедоступными», но требуют процесса получения; однако агрегированные данные подсчета нет. PS - Я попробовал ссылку сам, и она сработала, но я раньше не публиковал в общедоступной папке Dropbox, поэтому, пожалуйста, дайте мне знать, если ссылка не работает.
сванной,

1
Поскольку ваши данные рассчитаны, я ожидаю, что дисперсия будет связана со средним значением. Обычные модели временных рядов этого не учитывают (однако, вы можете попытаться, скажем, преобразование , скажем , Freeman-Tukey ), или вы можете взглянуть на модель временного ряда, которая предназначена для подсчета данных. (Если вы этого не сделаете, это не будет большой проблемой, поскольку число колеблется только в два раза или более).
Glen_b -Reinstate Monica

1
YTμTVar(YT)знак равноμT

Ответы:


13

Как насчет регрессии Пуассона?

Я создал фрейм данных, содержащий ваши данные, а также индекс 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

соз(2πT12)грех(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

Так что можно с уверенностью сказать, что это говорит о сезонном эффекте ...


2
п

2
Я полностью согласен, это то, что я имел в виду :) «Можно с уверенностью сказать, что это предполагает эффект»; а не "есть эффект"! Что мне кажется интересным, так это тригонометрическое преобразование, оно очень естественное, и я не понимаю, почему его не видят чаще. Но это только отправная точка ... начальная загрузка, оценка модели ... много работы.
Элвис

1
Нет проблем! Мой плохой тогда, я не смог обнаружить шутку. :)
usεr11852 говорит восстановить Monic

2
+1. Пуассон встречается с Фурье .... Я думаю, что экономисты и некоторые другие подчеркивают переменные показателя, потому что сезонность может быть быстрой, но часто помогает тригонометрический подход.
Ник Кокс

2
Верно. Обзор учебника, который я написал, доступен по адресу stata-journal.com/article.html?article=st0116
Ник Кокс,

8

Тест хи-квадрат - это хороший подход в качестве предварительного взгляда на ваш вопрос.

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 с опциями по умолчанию, комбинированный тест на сезонность показал, что идентифицируемой сезонности нет.

Изменить (см. Этот ответ и мой комментарий ниже для определения идентифицируемой сезонности ).

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


Спасибо @javiacalle, я буду исследовать методы, которые вы предлагаете. Могу ли я спросить о вашем заключении на графике, который вы опубликовали, является ли тот факт, что амплитуда увеличивается с ростом лет, является основой вашего комментария: «мы можем видеть, что предполагаемая сезонная картина не стабильна во времени», или это так? включить более тонкое наблюдение, что форма каждого пика немного отличается? Я предполагаю первое, но мы знаем, куда нас ведут предположения.
сванной

2
χ2

@svannoy Основной вывод, основанный на методах временных рядов, использованных в моем ответе, заключается в том, что в выборочных данных нет четкой сезонной закономерности. Несмотря на то, что сезонные циклы объясняют часть изменчивости данных, сезонная структура не может быть надежно идентифицирована, поскольку она скрыта высокой степенью нерегулярных колебаний (это также можно проверить, отображая функцию усиления выбранной модели ARIMA, показанной в вопросе) ,
Javlacalle

@oDDsKooL Я также провел тест хи-квадрат в день недели, суббота / воскресенье немного ниже ожиданий, а понедельник / вторник чуть выше ....
svannoy

6

Как отмечается в моем комментарии, это очень интересная проблема. Выявление сезонности - это не только статистическое упражнение. Разумным подходом было бы консультироваться с теорией и экспертами, такими как:

  • Психолог
  • Психиатр
  • Социолог

по этой проблеме, чтобы понять «почему» будет сезонность, чтобы дополнить анализ данных. Что касается данных, я использовал отличный метод декомпозиции, называемый моделью ненаблюдаемых компонентов (UCM), который является формой метода пространства состояний. Смотрите также эту очень доступную статью Koopman. Мой подход похож на @Javlacalle. Он не только предоставляет инструмент для разложения данных временных рядов, но также объективно оценивает наличие или отсутствие сезонности посредством проверки значимости. я не большой поклонник тестирования значимости неэкспериментальных данных, но я не знаю ни одной другой процедуры, чтобы вы могли проверить свою гипотезу о наличии / отсутствии сезонности на данных временных рядов.

Многие игнорируют, но очень важная особенность, которую хотелось бы понять, это тип сезонности:

  1. Стохастик - меняется случайным образом и сложно предсказать
  2. Детерминированный - не меняется, совершенно предсказуем. Вы можете использовать пустышку или тригонометрию (sin / cos и т. Д.) Для моделирования

Для длинных данных временного ряда, таких как ваш, возможно, что сезонность могла бы измениться с течением времени. Опять же, 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;

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

Существует стохастический уровень + детерминированная сезонность + некоторые выбросы, и у данных нет никаких других обнаруживаемых признаков.

введите описание изображения здесь

Ниже приведен анализ значимости различных компонентов. Обратите внимание, что я использовал тригонометрию (это sin / cos в выражении сезонности в PROC UCM), аналогично @Elvis и @Nick Cox. Вы также можете использовать фиктивное кодирование в UCM, и когда я тестировал, оба дали схожие результаты. См. Эту документацию для различий между двумя способами моделирования сезонности в SAS.

введите описание изображения здесь

Как показано выше, у вас есть выбросы: два импульса и одно смещение уровня в 2009 году (сыграла ли роль экономика / жилищный пузырь после 2009 года ??), что можно объяснить дальнейшим глубоким анализом погружений. Хорошая особенность использованияProc UCM является то, что он обеспечивает превосходный графический вывод.

Ниже представлена ​​сезонность и комбинированный тренд и сезонность сюжета. Все, что осталось, это шум .

введите описание изображения здесь введите описание изображения здесь

Более важным диагностическим тестом, если вы хотите использовать значения p и тестирование значимости, является проверка того, являются ли ваши остатки без шаблонов и нормально ли распределены, что удовлетворяется в приведенной выше модели с использованием UCM и как показано ниже на графиках остаточных значений, таких как acf / pacf и другие.

введите описание изображения здесь

Вывод : на основе анализа данных с использованием UCM и тестирования значимости данные, как представляется, имеют сезонность, и мы видим большое количество смертей в летние месяцы май / июнь / июль и самое низкое в зимние месяцы декабрь и февраль.

Дополнительные соображения : Просьба также учитывать практическую значимость величины сезонных колебаний. Чтобы опровергнуть противоречивые аргументы, проконсультируйтесь с экспертами в предметной области, чтобы дополнительно дополнить и подтвердить свою гипотезу.

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


Спасибо за этот ответ и за интересные комментарии. Я не знаю UCM, это кажется очень интересным, я постараюсь помнить об этом ...
Элвис

(+1) Интересный анализ. Я все еще буду осторожен с заключением о наличии значительной детерминированной сезонной модели, но ваши результаты требуют более тщательного изучения этой возможности. Может быть полезным тест Кановы и Хансена на сезонную стабильность, он описан, например, здесь .
Javlacalle

gretlπ/6

1
+1. Много интересных и полезных комментариев. К вашему списку психологов, психиатров, социологов можно добавить метеоролог / климатолог. Такой человек хотел бы добавить, что никакие два года не идентичны в циклах осадков и температуры. Я бы грубо догадался о большей депрессии зимой (более короткая продолжительность дня и т. Д.), Но так много для предположения, учитывая некоторые данные.
Ник Кокс

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

1

Для первоначальной визуальной оценки можно использовать следующий график. Построение ежемесячных данных с кривой лёсса и 95% -ным доверительным интервалом показывает, что в июне наблюдается пик роста в середине года. Другие факторы могут быть причиной того, что данные будут иметь широкое распространение, поэтому сезонный тренд может маскироваться на этом графике лёсса необработанных данных. Точки данных были повреждены.

введите описание изображения здесь

Изменить: На следующем графике показаны кривая лёсса и доверительный интервал для изменения количества случаев от числа в предыдущем месяце:

введите описание изображения здесь

Это также показывает, что в течение месяцев в первой половине года число случаев продолжает расти, в то время как во второй половине года они снижаются. Это также говорит о пике в середине года. Однако доверительные интервалы широки и пересекают 0, т.е. не меняются в течение года, что указывает на отсутствие статистической значимости.

Разницу в количестве месяцев можно сравнить со средними значениями за предыдущие 3 месяца:

введите описание изображения здесь

Это показывает явный рост числа в мае и падение в октябре.


(-1) На этот вопрос уже есть три качественных ответа. Ваш ответ также не отвечает на опубликованный вопрос - вы можете опубликовать его как комментарий . Вы не предоставляете ответ, как эти данные могут быть проанализированы.
Тим

Я ранее разместил здесь комментарий (см. Ниже вопрос), но не могу опубликовать рисунок в комментариях.
rnso

Хотя я понимаю редакционную статью здесь, я скажу, что @rnso предоставил хороший график, который хорошо иллюстрирует потенциальную сезонную составляющую и должен был быть частью моего исходного поста.
сванной

Я понимаю это и согласен, но все же это не ответ, а скорее комментарий или улучшение. @rnso мог бы предложить вам через комментарий, что вы можете посмотреть или включить такой сюжет.
Тим

@Glen_b, @ Тим: я добавил еще один сюжет, который может быть полезен и который я не могу добавить в комментарий.
15:34
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.