Це відповідний метод для перевірки сезонних наслідків даних про кількість самогубств?


24

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

Тож я вирішив визначити, чи можу я визначити, чи є більш суттєвими випадки самогубств у будь-який місяць у моєму наборі даних. Всі мої аналізи робляться в Р.

Загальна кількість самогубств у даних - 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

Нарешті, я подивився на залишки, що підходять, і якщо я це правильно зрозумів, оскільки всі значення знаходяться в порогових межах, вони поводяться як білий шум, і тому модель є досить розумною. Я провів тест на портманто, як описано в тексті, який мав значення 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

Я розміщую світловий день на випадок, якщо хтось захоче пограти з цим. Зауважте, що це не високосний рік, тому, якщо ви хочете скласти протокол за високосні роки, або екстраполюйте, або отримайте дані.

держ.денне світло.2002.csv

[ Редагувати, щоб додати сюжет із видаленої відповіді (сподіваємось, rnso не проти мені перемістити сюжет у видаленій відповіді сюди на питання. Svannoy, якщо ви все-таки не хочете, щоб це було додано, ви можете відновити його]]

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


1
Формулювання "один з наших 50 штатів" означає, що всі читачі належать до Сполучених Штатів. Тут явно ховається багато іноземців.
Нік Кокс

1
Це з загальнодоступних даних? Чи можете ви зробити доступні дані по тижнях чи навіть по днях?
Елвіс

1
@Elvis - я опублікував посилання на дані щоденного підрахунку. Дані надходять із свідоцтв про смерть, які є "державними записами", але потребують процесу їх отримання; однак, узагальнені дані підрахунку не відповідають. PS - Я сам спробував посилання, і воно спрацювало, але раніше я не публікував у загальнодоступній папці випуску, тому, будь ласка, повідомте мене, якщо посилання не працює.
svannoy

1
Оскільки ваші дані підраховані, я очікую, що відхилення будуть пов'язані із середнім значенням. Звичайні моделі часових рядів цього не враховують (однак, ви можете спробувати сказати про перетворення , можливо , скажімо, Фріман-Тукі ), або ви можете подивитися модель часових рядів, розроблену для підрахунку даних. (Якщо ви цього не зробите, це може не бути величезною проблемою, оскільки кількість становить лише коефіцієнт два або більше.)
Glen_b -Встановіть Моніку

1
прогноз - тому що в підрахунку поширення даних пов'язане із середнім значенням. наприклад, розгляньте число Пуассона , із середнім . У цьому випадку , так як середня збільшується, дисперсія (і так само розкид) збільшується. [Дійсно, часто ви виявляєте, що поширення так чи інакше пов'язане для майже будь-яких даних, що мають верхню або нижню межу; є чіткі причини, чому цього можна було б очікувати в цих випадках.]μ t Var ( y t ) = μ tутмктВар(ут)=мкт
Glen_b -Встановити Моніку

Відповіді:


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

cos(2πт12)гріх(2πт12)

> 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
p

2
Я повністю погоджуюся, саме це я мав на увазі :) "Можна точно сказати, що це говорить про ефект"; а не "Є ефект"! Що мені здається цікавим - це тригонометричне перетворення, це дуже природно, і я не розумію, чому його не бачать частіше. Але це лише відправна точка ... завантаження, оцінка моделі ... багато чого робити.
Елвіс

1
Жодних проб! Моє погано тоді, я не зміг виявити жарт. :)
usεr11852 повідомляє Відновити Монік

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

2
Справді. Опис
Нік Кокс

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, я буду досліджувати запропоновані вами методи. Чи можу я запитати про ваш висновок опублікованого вами графіка, чи це той факт, що амплітуда збільшується в міру прогресування років, що є основою вашого коментаря? "Ми можемо бачити, що прогнозована сезонна структура не стабільна протягом часу", чи це включіть більш тонке спостереження, що форма кожного піку трохи відрізняється? Я припускаю, що колишній, але ми знаємо, куди нас припускають.
svannoy

2
χ2

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

@oDDsKooL Я також зробив тест на квадрат чи в день тижня, субота / неділя трохи нижче очікувань, а понеділок / вівторок трохи вище ....
svannoy

6

Як зазначалося в моєму коментарі, це дуже цікава проблема. Виявлення сезонності не є лише статистичним вправою. Доцільним є підхід до консультацій з теорією та експертами, такими як

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

щодо цієї проблеми, щоб зрозуміти "чому", було б додатковістю до аналізу даних сезонність. Доходячи до даних, я застосував відмінний метод декомпозиції під назвою модель неспостережуваних компонентів (UCM), яка є формою простору методу стану. Дивіться також цю дуже доступну статтю Коопмана. Мій підхід схожий на @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, це додає моєму навчанню. Я психолог, маючи ступінь громадського здоров’я. Я додам епідеміолога до вашого списку. Як я вже згадував на початку, існує багато міфології (також теоретизуючи) про сезонні тенденції та самогубства. Можна наводити вагомі аргументи щодо сезонних тенденцій у будь-якому напрямку, тому нам потрібні кількісні аналізи для (не) підтвердження. З точки зору охорони здоров'я, якщо ми виявили різкі розриви, ми могли б націлитись на втручання. Я не бачу цього в цих даних. З точки зору теорії самогубства, підтвердження навіть невеликих тенденцій може сприяти розвитку теорії.
svannoy

1

Для початкової візуальної оцінки може бути використаний наступний графік. Зображуючи місячні дані з кривою льосу та її 95% -ним довірчим інтервалом, виявляється, що в червні спостерігається зростання середнього року. Інші фактори можуть спричиняти широке розповсюдження даних, отже, сезонна тенденція може бути замаскована у цій необґрунтованій схемі лесових даних. Точки даних були розмиті.

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

Редагувати: Наступний графік показує криву льосу та довірчий інтервал для зміни кількості випадків від числа у попередньому місяці:

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

Це також показує, що протягом місяців у першій половині року кількість випадків продовжує зростати, в той час як вони зменшуються у другій половині року. Це також говорить про пік у середині року. Однак інтервали довіри широкі і становлять 0, тобто не змінюються протягом року, що свідчить про відсутність статистичної значущості.

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

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

Це свідчить про явне збільшення чисельності в травні та падіння в жовтні.


(-1) На це питання вже є три якісні відповіді. Ваша відповідь також не відповідає на розміщене запитання - ви можете опублікувати її як коментар . Ви не надаєте відповіді, як ці дані могли бути проаналізовані.
Тім

Я раніше тут публікував коментар (див. Нижче питання), але не можу розміщувати фігуру в коментарях.
rnso

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

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

@Glen_b, @ Tim: Я додав ще один сюжет, який може бути корисним і не можу розмістити коментар.
rnso
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.