ABD’deki bir devlet için intihar ölümleriyle ilgili 17 yıl (1995 - 2011) ölüm belgesi verim var. Orada, intiharlar, aylar / mevsimler, çoğu çelişkili ve literatür hakkında birçok mitoloji var. incelendiğimde, kullanılan yöntemlerden net bir anlam alamıyorum ya da sonuçlara güven duymuyorum.
Bu yüzden, veri setim dahilinde herhangi bir ayda intiharların oluşma ihtimalinin daha az mı yoksa daha az mı olacağını tespit edip edemeyeceğimi görmek için yola çıktım. Bütün analizlerim R de yapılır.
Verilerdeki toplam intihar sayısı 13.909.
Yıla en az intiharla bakarsanız, 309/365 günlerde (% 85) görülür. Yıla en çok intiharla bakarsanız, 339/365 günlerde (% 93) görülür.
Bu nedenle, her yıl intiharları olmayan adil bir gün sayısı var. Bununla birlikte, 17 yıl boyunca toplandığında, 29 Şubat da dahil olmak üzere yılın her günü intiharlar vardır (ortalama 38 iken sadece 5 olmasına rağmen).
Yılın her günü intihar sayısını basitçe eklemek net bir mevsimsellik anlamına gelmiyor (gözlerime).
Aylık seviyede toplanan aylık ortalama intiharlar aşağıdakiler arasındadır:
(m = 65, sd = 7.4, ila m = 72, sd = 11.1)
İlk yaklaşımım, tüm yıl boyunca aya göre ayarlanan verileri toplamak ve sıfır hipotezi için beklenen olasılıkları hesapladıktan sonra, aylara göre intihar sayımında sistematik bir değişiklik olmadığı için ki-kare testi yapmaktı. Her ayın olasılıklarını gün sayısını dikkate alarak (ve artık yıllara göre Şubat ayını ayarlayarak) hesapladım.
Ki-kare sonuçları aylara göre önemli bir değişiklik göstermedi:
# So does the sample match expected values?
chisq.test(monthDat$suicideCounts, p=monthlyProb)
# Yes, X-squared = 12.7048, df = 11, p-value = 0.3131
Aşağıdaki resim aylık toplam sayıları göstermektedir. Yatay kırmızı çizgiler sırasıyla Şubat, 30 gün ve 31 gün için beklenen değerlerde konumlandırılmıştır. Ki-kare testi ile uyumlu olarak, hiçbir ay beklenen sayı için% 95 güven aralığının dışında değildir.
Zaman serisi verilerini araştırmaya başlayana kadar bittiğimi sanıyordum. Pek çok insanın yaptığı gibi, stl
istatistik paketindeki işlevi kullanarak parametrik olmayan mevsimsel bozunma yöntemiyle başladım .
Zaman serisi verilerini oluşturmak için toplam aylık verilerle başladım:
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
Ve sonra stl()
ayrışma gerçekleştirdi
# Seasonal decomposition
suicideByMonthFit <- stl(suicideByMonthTs, s.window="periodic")
plot(suicideByMonthFit)
Bu noktada endişelendim çünkü bana hem mevsimsel bir bileşen hem de bir eğilim olduğunu gösteriyor. İnternet araştırmasının ardından Rob Hyndman ve George Athanasopoulos'un talimatlarını, özellikle sezgisel bir ARIMA modelini uygulamak için "Tahmini: ilkeleri ve uygulamaları" başlıklı metinlerinde belirtilen şekilde uygulamaya karar verdim.
Kullandığım adf.test()
ve kpss.test()
değerlendirmek için durağanlık ve çelişkili sonuçlar elde ettim. Her ikisi de boş hipotezi reddetti (zıt hipotezi test ettiklerini belirtti).
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
Daha sonra kitaptaki algoritmayı kullanarak hem trend hem de sezon için yapılması gereken farklılık miktarını tespit edip edemediğimi görmek için kullandım. Ben nd = 1, ns = 0 ile bitirdim.
Sonra koştum auto.arima
; bu, hem “sürüklenme” tipi bir sabit ile birlikte hem trend hem de mevsimsel bir bileşeni olan bir model seçti.
# 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
Sonunda, artıklara uygunluktan baktım ve bunu doğru anlarsam, tüm değerler eşik limitleri dahilinde olduklarından, beyaz gürültü gibi davranıyorlar ve bu nedenle model oldukça makul. Ap üzerinde 0,05 değerinin üzerinde olan metinde açıklandığı gibi bir portmanteau testi yaptım, ancak parametrelerin doğru olduğundan emin değilim.
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
Geri dönüp tekrar arima modelleme bölümünü okuduktan sonra, şimdi auto.arima
trend ve mevsim modellemeyi seçtiğini anlıyorum . Ayrıca tahmin etmenin özellikle yapmam gereken analizin özel olmadığını da biliyorum. Belirli bir ayın (veya daha genel olarak yılın zamanının) yüksek riskli ay olarak işaretlenip işaretlenmeyeceğini bilmek istiyorum. Tahmin literatüründe yer alan araçların son derece uygun olduğu, ancak belki de sorum için en iyisi olmadığı görülüyor. Herhangi ve tüm girdiler çok takdir edilmektedir.
Günlük sayıları içeren bir csv dosyasına bağlantı gönderiyorum. Dosya şöyle görünür:
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
Sayı, o gün olan intiharların sayısı. "t", tablodaki (5533) toplam gün sayısı 1 ila 1 olan sayısal bir sekanstır.
Aşağıdaki yorumları not aldım ve intihar ve mevsimlerin modellenmesi ile ilgili iki şey hakkında düşündüm. İlk olarak, soruma göre, aylar sadece sezonun değişimini belirleyen vekiller, belirli bir ayın diğerlerinden farklı olup olmadığına ilgi duymuyorum (tabii ki ilginç bir soru, ama benim belirttiğim şey bu değil. incelemek). Bu nedenle, intihar sayısının tüm ayların ilk 28 gününden hesaplanmasının anlamlı olduğunu düşünüyorum . İnsanların bu ayarlamanın gerekli olup olmadığı veya zararlı olduğu konusunda iyi bir fikir olup olmadığı hakkında ne düşündükleriyle ilgileniyorum? ayların, tüm ayların ilk 28 gününü kullanarak eşitlenmesinin . Bunu yaptığınızda, mevsimsellik eksikliğine karşı daha fazla kanıt olarak yorumladığım biraz daha kötüye gidiyor. Aşağıdaki çıktıda ilk uygunluk, gerçek gün sayılarıyla ayları kullanarak aşağıdaki cevaptan elde edilen bir reprodüksiyon olup, ardından bir veri kümesi intiharByShortMonth
> 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
Daha önce baktım ikinci şey, mevsim için bir vekil olarak ay kullanma meselesi. Belki de sezonun daha iyi bir göstergesi, bir bölgenin aldığı gündüz saatlerinin sayısıdır. Bu veriler gün ışığında önemli farklılıklar gösteren bir kuzey eyaletinden geliyor. Aşağıda 2002 yılından itibaren gün ışığı grafiği.
Bu verileri yılın ayı yerine kullandığımda, etki hala önemli, ancak etki çok, çok küçük. Artık sapma, yukarıdaki modellerden çok daha büyük. Gündüz saatleri mevsimler için daha iyi bir modelse ve uyum o kadar iyi değilse, bu çok küçük bir mevsimsel etkinin kanıtı mıdır?
> 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
Kimse bununla oynamak isterse gündüz saatlerini yazıyorum. Unutmayın, bu artık bir yıl değildir, bu nedenle artık yıllar için dakikayı koymak istiyorsanız, verileri ekstrapolate edin veya alın.
[ Silinen cevaptan arsa eklemek için düzenleme (umarım rnso, silinen cevaptaki arsa soruyu bu soruya taşımama aldırış etmemi istemez.