자살 횟수 데이터에서 계절적 영향을 테스트하는 데 적합한 방법입니까?


24

미국의 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)

첫 번째 방법은 모든 해 동안 월 단위로 데이터 세트를 집계하고 귀무 가설에 대한 예상 확률을 계산 한 후 카이 제곱 검정을 수행하여 매월 자살 횟수의 체계적 차이가 없다는 것입니다. 나는 일 수 (및 윤년을 위해 2 월 조정)를 고려하여 매월 확률을 계산했습니다.

카이 제곱 결과는 월별로 큰 변화가 없음을 나타냅니다.

# 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통계 패키지 의 함수를 사용하여 비모수 적 계절 분해 방법으로 시작했습니다 .

시계열 데이터를 만들기 위해 집계 된 월별 데이터로 시작했습니다.

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()하고 사용 하여 상충되는 결과를 얻었습니다. 둘 다 귀무 가설을 기각했습니다 (반대 가설을 검정 함).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

마지막으로, 적합치의 잔차를 살펴 보았습니다.이 값을 올바르게 이해하면 모든 값이 임계 값 한계 내에 있으므로 백색 잡음처럼 동작하므로 모델이 상당히 합리적입니다. 나는 p 값이 0.05보다 훨씬 높은 텍스트에 설명 된대로 portmanteau 테스트 를 실행 했지만 매개 변수가 올바른지 확실하지 않습니다.

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 일을 사용하여 월 을 균등 하게하는 것이 합리적이라고 생각합니다 . 이 작업을 수행하면 약간 더 적합하지 않습니다. 계절성 부족에 대한 더 많은 증거로 해석됩니다. 아래 출력에서 ​​첫 번째 적합은 실제 일수가 포함 된 월을 사용하여 아래의 답변에서 재생산 된 다음 데이터 세트 자살입니다.자살 횟수는 모든 달의 처음 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 년의 일광 그래프입니다.

여기에 이미지 설명을 입력하십시오

이 데이터를 1 년이 아닌 월 단위로 사용할 때 그 효과는 여전히 중요하지만 그 효과는 매우 작습니다. 잔차 이탈은 위의 모델보다 훨씬 큽니다. 일광 시간이 계절에 더 적합한 모델이고 적합도가 좋지 않은 경우 계절 효과가 매우 작은 증거입니까?

> 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, 이것을 추가하지 않으려면 되돌릴 수 있습니다)]

여기에 이미지 설명을 입력하십시오


1
"50 개 주 중 하나"라는 말은 모든 독자가 미국에 속해 있음을 의미합니다. 분명히 많은 외계인도 여기에 숨어 ​​있습니다.
Nick Cox

1
공개 데이터 세트에서 나왔습니까? 주별 또는 일별 데이터를 사용할 수 있습니까?
Elvis

1
@Elvis-일일 카운트 데이터에 대한 링크를 게시했습니다. 이 데이터는 '공공 기록'인 사망 증명서에서 비롯되었지만 획득 프로세스가 필요합니다. 그러나 집계 된 카운트 데이터는 그렇지 않습니다. 추신-링크를 직접 시도했지만 효과가 있었지만 이전에 이런 방식으로 공개 보관 용 폴더에 게시하지 않았으므로 링크가 작동하지 않는 경우 알려주십시오.
svannoy

1
귀하의 데이터는 개수이므로 분산이 평균과 관련이있을 것으로 기대합니다. 일반적인 시계열 모델 (단, 당신이 말을 시도 할 수 있습니다 것을 고려하지 않는 변환 , 아마도 프리먼-Tukey에이 말), 또는 당신은 카운트 데이터 설계 시계열 모델에서 볼 수 있었다. (이 작업을 수행하지 않으면 숫자가 2 배 정도에 불과하기 때문에 큰 문제가되지 않을 수 있습니다.)
Glen_b -Reinstate Monica

1
와이μ바르(와이)=μ

답변:


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

이제 null 모델과 비교하십시오.

> 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
나는 이것이 내가 암시 한 바라고 전적으로 동의한다. "효과가 있습니다"가 아닙니다! 제가 흥미롭게 생각하는 것은이 삼각법 변환입니다. 그것은 매우 자연스럽고 왜 더 자주 보이지 않는지 이해할 수 없습니다. 그러나 이것은 시작점 일뿐입니다. 부트 스트랩, 모델 평가, 할 일이 많습니다.
Elvis

1
문제 없다! 나의 나쁜, 나는 농담을 감지 할 수 없었습니다. :)
usεr11852는 Reinstate Monic이

2
+1. 푸아 송은 푸리에를 만나고 ... 경제학자들과 다른 사람들은 계절성이 급증 할 수 있기 때문에 지표 변수를 강조한다고 생각하지만 삼각법은 종종 도움이됩니다.
Nick Cox

2
과연. 내가 쓴 튜토리얼 리뷰는 stata-journal.com/article.html?article=st0116
Nick Cox

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 또한 요일에 카이 제곱 테스트를 수행했으며 토요일 / 일요일은 예상보다 약간
낮고

6

내 의견에서 언급했듯이 이것은 매우 흥미로운 문제입니다. 계절성을 감지하는 것은 통계적인 운동 만이 아닙니다. 합리적인 접근법은 다음과 같은 이론 및 전문가와 상담하는 것입니다.

  • 심리학자
  • 정신과 의사
  • 사회 학자

"이유"를 이해하기 위해이 문제에 대해 데이터 분석을 보충 할 계절성이있을 것이다. 데이터를 살펴보면 상태 공간 방법의 한 형태 인 UCM (Unobserved Components Model) 이라는 우수한 분해 방법을 사용했습니다 . 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;

서로 다른 구성 요소와 조합을 고려한 여러 번 반복 한 후 다음과 같은 형식의 비유적인 모델로 끝났습니다.

확률 수준 + 결정적 계절성 + 일부 특이 치가 있으며 데이터에 감지 가능한 다른 기능이 없습니다.

여기에 이미지 설명을 입력하십시오

다음은 다양한 구성 요소의 중요성 분석입니다. 내가 사용하는 것을 알 수 삼각법 (인 죄 / PROC UCM의 계절 문에서 COS) @Elvis 및 @Nick 콕스 비슷합니다. UCM에서 더미 코딩 을 사용할 수도 있고 테스트 할 때 비슷한 결과를 얻었습니다. SAS에서 계절성을 모델링하는 두 가지 방법의 차이점에 대해서는이 문서 를 참조하십시오 .

여기에 이미지 설명을 입력하십시오

위에서 볼 수 있듯이 더 심층적 인 다이빙 분석으로 설명 할 수있는 특이 치가 있습니다. 사용의 좋은 기능 Proc UCM은 뛰어난 그래픽 출력을 제공한다는 것입니다.

아래는 계절 성과 결합 된 추세 및 계절성 도표입니다. 남은 것은 소음 입니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

p 값을 사용하고 유의성 테스트를 사용하려는 경우 더 중요한 진단 테스트잔차가 패턴이없고 정규 분포인지 확인 하는 것입니다. 위의 모델에서 UCM을 사용하고 아래의 acf / pacf와 같은 잔차 진단 플롯에 만족됩니다. 다른 사람.

여기에 이미지 설명을 입력하십시오

결론 : UCM을 사용한 데이터 분석 및 유의성 테스트에 따르면 데이터는 계절적인 것으로 보이며 5 월 / 6 월 / 7 월 여름에는 사망자가 많으며 12 월과 2 월에는 겨울에는 사망자가 가장 많습니다.

추가 고려 사항 : 계절 변동의 크기의 실제적인 중요성도 고려하십시오. 허위 주장을 부정하려면 가설을 보완하고 검증하기 위해 도메인 전문가에게 문의하십시오.

나는 이것이 이것이이 문제를 해결하는 유일한 방법이라고 결코 말하지 않습니다. UCM에 대해 좋아하는 기능은 모든 시계열 기능을 명시 적으로 모델링 할 수 있으며 시각적으로도 훌륭하다는 것입니다.


이 답변과 흥미로운 의견에 감사드립니다. 나는 UCM을 모른다, 그것은 매우 흥미로워 보인다, 나는 그것을 명심하려고 노력할 것이다 ...
Elvis

(+1) 재미있는 분석. 결정적인 계절적 패턴이 존재한다는 결론에 여전히주의를 기울여야하지만 결과는이 가능성에 대한 면밀한 검토를 요구합니다. 계절 안정성에 대한 Canova 및 Hansen 테스트가 도움이 될 수 있습니다 (예 : 여기 참조) .
javlacalle

gretlπ/6

1
+1. 많은 흥미롭고 유용한 의견. 심리학자, 정신과 의사, 사회 학자 목록에 기상 학자 / 기후 학자를 추가 할 수 있습니다. 그러한 사람은 강우와 온도주기에서 2 년이 동일하지 않다고 덧붙이고 자합니다. 나는 겨울철에 더 많은 우울증 (날이 짧아지는 길이 등)을 대략 추측했을 것입니다.
Nick Cox

@forecaster 덕분에 이것은 내 학습에 많은 도움이됩니다. 나는 공중 보건 학위를 가진 심리학자입니다. 전염병 학자를 당신의 목록에 추가하겠습니다. 처음에 언급했듯이 계절 추세와 자살에 대한 많은 신화 (일명 이론화)가 있습니다. 계절 추세에 대해 어느 방향 으로든 강력한 논증을 할 수 있으므로 양적 분석이 필요합니다. 공중 보건의 관점에서, 만약 우리가 급격한 불연속을 발견하면 개입을 목표로 삼을 수 있습니다. 나는이 데이터에서 그것을 보지 못했습니다. 자살 이론의 관점에서, 작은 경향조차도 이론 개발에 영향을 줄 수 있습니다.
svannoy

1

초기 시각적 추정을 위해 다음 그래프를 사용할 수 있습니다. 황토 곡선과 95 % 신뢰 구간으로 월간 데이터를 작성하면 6 월 중반 상승이 정점에 도달 한 것으로 보입니다. 다른 요인들로 인해 데이터의 분포가 넓어 질 수 있으므로이 원시 데이터 황토도에서 계절 추세가 가려 질 수 있습니다. 데이터 포인트가 흔들 렸습니다.

여기에 이미지 설명을 입력하십시오

편집 : 다음 그림은 전월의 숫자에서 사례 수의 변화에 ​​대한 황토 곡선 및 신뢰 구간을 보여줍니다.

여기에 이미지 설명을 입력하십시오

이는 또한 상반기에 몇 달 동안 사례 수가 계속 증가하는 반면 하반기에는 감소하고 있음을 보여줍니다. 이것은 또한 중년의 최고점을 암시합니다. 그러나 신뢰 구간은 넓고 1 년 내내 0을 통과합니다. 즉 통계적 유의성이 부족함을 나타냅니다.

한 달의 숫자 차이를 이전 3 개월의 평균 값과 비교할 수 있습니다.

여기에 이미지 설명을 입력하십시오

이는 5 월의 숫자 증가와 10 월의 감소를 보여줍니다.


(-1)이 질문에 대한 세 가지 고품질 답변이 이미 있습니다. 귀하의 답변 은 게시 된 질문에 대한 답변도하지 않습니다 . 의견 으로 게시 할 수 있습니다. 이 데이터를 분석 할 수있는 방법에 대한 답변은 제공하지 않습니다.

이전에 여기에 의견을 게시했지만 (아래 질문 참조) 의견에 그림을 게시 할 수 없습니다.
rnso

나는 여기서 편집을 이해하지만 @rnso는 잠재적 계절 성분을 잘 보여주는 멋진 그래프를 제공했으며 원래 게시물의 일부 였어야한다고 말할 것입니다.
svannoy

나는 그것을 이해하고 동의하지만 여전히 이것은 대답이 아니라 의견 이나 개선입니다. @rnso는 그러한 음모를 보거나 포함 할 수있는 의견을 통해 제안 할 수 있습니다.
Tim

@Glen_b, @ Tim : 유용하고 주석을 달 수없는 다른 줄거리를 추가했습니다.
rnso
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.