미국의 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
카운트는 그날 발생한 자살의 수입니다. "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
누군가가 이것으로 놀고 싶어하는 경우 일광 시간을 게시하고 있습니다. 윤년이 아니므로 윤년을 분 단위로 입력하려면 데이터를 추정하거나 검색하십시오.
[ 삭제 된 답변에서 줄거리를 추가하려면 편집하십시오 (바람직하게는 rnso는 삭제 된 답변의 줄거리를 여기 질문으로 옮기는 것을 신경 쓰지 않습니다. svannoy, 이것을 추가하지 않으려면 되돌릴 수 있습니다)]