Apakah ini metode yang tepat untuk menguji efek musiman dalam data jumlah bunuh diri?

24

Saya memiliki 17 tahun (1995 hingga 2011) data sertifikat kematian yang terkait dengan kematian bunuh diri untuk sebuah negara bagian di AS. Ada banyak mitologi di luar sana tentang bunuh diri dan bulan / musim, banyak di antaranya kontradiktif, dan literatur saya. Sudah diulas, saya tidak mendapatkan pemahaman yang jelas tentang metode yang digunakan atau kepercayaan pada hasil.

Jadi saya telah menetapkan untuk melihat apakah saya dapat menentukan apakah bunuh diri lebih atau kurang mungkin terjadi pada bulan tertentu dalam kumpulan data saya. Semua analisis saya dilakukan dalam R.

Jumlah total kasus bunuh diri dalam data adalah 13.909.

Jika Anda melihat tahun dengan bunuh diri paling sedikit, itu terjadi pada 309/365 hari (85%). Jika Anda melihat tahun dengan bunuh diri terbanyak, mereka terjadi pada 339/365 hari (93%).

Jadi ada cukup banyak hari setiap tahun tanpa bunuh diri. Namun, ketika dikumpulkan di seluruh 17 tahun, ada bunuh diri pada setiap hari sepanjang tahun, termasuk 29 Februari (meskipun hanya 5 ketika rata-rata 38).

masukkan deskripsi gambar di sini

Cukup menambahkan jumlah bunuh diri pada setiap hari dalam setahun tidak menunjukkan musim yang jelas (bagi saya).

Diagregasi pada tingkat bulanan, rata-rata bunuh diri per bulan berkisar dari:

(m = 65, sd = 7.4, hingga m = 72, sd = 11.1)

Pendekatan pertama saya adalah untuk mengumpulkan kumpulan data berdasarkan bulan untuk semua tahun dan melakukan uji chi-square setelah menghitung probabilitas yang diharapkan untuk hipotesis nol, bahwa tidak ada varians sistematis dalam jumlah bunuh diri berdasarkan bulan. Saya menghitung probabilitas untuk setiap bulan dengan mempertimbangkan jumlah hari (dan menyesuaikan Februari untuk tahun kabisat).

Hasil chi-square menunjukkan tidak ada variasi yang signifikan berdasarkan bulan:

# So does the sample match  expected values?
chisq.test(monthDat$suicideCounts, p=monthlyProb)
# Yes, X-squared = 12.7048, df = 11, p-value = 0.3131

Gambar di bawah ini menunjukkan jumlah total per bulan. Garis merah horizontal diposisikan pada nilai yang diharapkan untuk bulan Februari, 30 hari, dan 31 hari masing-masing. Konsisten dengan uji chi-square, tidak ada bulan di luar interval kepercayaan 95% untuk jumlah yang diharapkan. masukkan deskripsi gambar di sini

Saya pikir saya sudah selesai sampai saya mulai menyelidiki data deret waktu. Seperti yang saya bayangkan banyak orang lakukan, saya mulai dengan metode dekomposisi musiman non-parametrik menggunakan stlfungsi dalam paket statistik.

Untuk membuat data deret waktu, saya mulai dengan data bulanan teragregasi:

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")

masukkan deskripsi gambar di sini

     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

Dan kemudian dilakukan stl()dekomposisi

# Seasonal decomposition
suicideByMonthFit <- stl(suicideByMonthTs, s.window="periodic")
plot(suicideByMonthFit)

masukkan deskripsi gambar di sini

Pada titik ini saya menjadi khawatir karena saya melihat ada komponen musiman dan tren. Setelah banyak riset internet, saya memutuskan untuk mengikuti instruksi Rob Hyndman dan George Athanasopoulos sebagaimana tercantum dalam teks on-line mereka "Peramalan: prinsip dan praktik", khususnya untuk menerapkan model ARIMA musiman.

Saya menggunakan adf.test()dan kpss.test()untuk menilai stasioneritas dan mendapatkan hasil yang bertentangan. Mereka berdua menolak hipotesis nol (mencatat bahwa mereka menguji hipotesis sebaliknya).

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

Saya kemudian menggunakan algoritma dalam buku ini untuk melihat apakah saya dapat menentukan jumlah perbedaan yang perlu dilakukan untuk tren dan musim. Saya berakhir dengan nd = 1, ns = 0.

Saya kemudian berlari auto.arima, yang memilih model yang memiliki tren dan komponen musiman bersama dengan konstanta tipe "drift".

# 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

masukkan deskripsi gambar di sini

> 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

Akhirnya, saya melihat residu dari fit dan jika saya memahami ini dengan benar, karena semua nilai berada dalam batas ambang, mereka berperilaku seperti white noise dan dengan demikian modelnya cukup masuk akal. Saya menjalankan tes portmanteau seperti yang dijelaskan dalam teks, yang memiliki nilai ap jauh di atas 0,05, tetapi saya tidak yakin bahwa saya memiliki parameter yang benar.

Acf(residuals(bestFit))

masukkan deskripsi gambar di sini

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

Setelah kembali dan membaca bab tentang pemodelan arima lagi, saya menyadari sekarang bahwa auto.arimamemang memilih untuk memodelkan tren dan musim. Dan saya juga menyadari bahwa peramalan tidak secara khusus analisis yang mungkin harus saya lakukan. Saya ingin tahu apakah bulan tertentu (atau lebih umum waktu dalam setahun) harus ditandai sebagai bulan berisiko tinggi. Tampaknya alat dalam literatur perkiraan sangat relevan, tetapi mungkin bukan yang terbaik untuk pertanyaan saya. Setiap dan semua input sangat dihargai.

Saya memposting tautan ke file csv yang berisi jumlah harian. File terlihat seperti ini:

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

Hitung adalah jumlah bunuh diri yang terjadi pada hari itu. "t" adalah urutan numerik dari 1 hingga total jumlah hari dalam tabel (5533).

Saya telah mencatat komentar di bawah ini dan memikirkan dua hal yang berkaitan dengan pemodelan bunuh diri dan musim. Pertama, sehubungan dengan pertanyaan saya, bulan hanyalah proksi untuk menandai pergantian musim, saya tidak tertarik pada apakah bulan tertentu berbeda dari yang lain (yang tentu saja merupakan pertanyaan yang menarik, tapi bukan itu yang saya maksudkan untuk menyelidiki). Oleh karena itu, saya pikir masuk akal untuk menyamakan bulan dengan hanya menggunakan 28 hari pertama dari semua bulan. Ketika Anda melakukan ini, Anda mendapatkan kecocokan sedikit lebih buruk, yang saya tafsirkan sebagai lebih banyak bukti terhadap kurangnya musim. Pada output di bawah, fit pertama adalah reproduksi dari jawaban di bawah ini menggunakan bulan dengan jumlah hari sebenarnya, diikuti oleh set data bunuh diriByShortMonthdi mana jumlah bunuh diri dihitung dari 28 hari pertama dari semua bulan. Saya tertarik dengan pendapat orang tentang apakah penyesuaian ini adalah ide yang baik, tidak perlu, atau berbahaya?

> 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

Hal kedua yang saya lihat lebih dalam adalah masalah menggunakan bulan sebagai proxy untuk musim. Mungkin indikator musim yang lebih baik adalah jumlah jam siang hari yang diterima suatu daerah. Data ini berasal dari negara bagian utara yang memiliki variasi substansial di siang hari. Di bawah ini adalah grafik siang hari dari tahun 2002.

masukkan deskripsi gambar di sini

Ketika saya menggunakan data ini daripada bulan dalam setahun, efeknya masih signifikan, tetapi efeknya sangat, sangat kecil. Penyimpangan residual jauh lebih besar daripada model di atas. Jika siang hari adalah model yang lebih baik untuk musim, dan kecocokannya tidak sebaik, apakah ini lebih banyak bukti efek musiman yang sangat kecil?

> 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

Saya memposting jam siang kalau-kalau ada yang ingin bermain-main dengan ini. Catatan, ini bukan tahun kabisat, jadi jika Anda ingin memasukkan menit untuk tahun kabisat, ekstrapolasi atau ambil data.

state.daylight.2002.csv

[ Sunting untuk menambahkan plot dari jawaban yang dihapus (mudah-mudahan juga tidak keberatan saya memindahkan plot dalam jawaban yang dihapus di sini ke pertanyaan. Svannoy, jika Anda tidak ingin ini ditambahkan, Anda dapat mengembalikannya)]

masukkan deskripsi gambar di sini

svannoy
sumber
1
Kata-kata "salah satu dari 50 negara kami" menyiratkan bahwa semua pembaca milik Amerika Serikat. Secara nyata banyak alien yang mengintai di sini juga.
Nick Cox
1
Apakah itu dari dataset publik? Bisakah Anda membuat data minggu demi hari atau bahkan hari demi hari tersedia?
Elvis
1
@ Elvis - Saya telah memasang tautan ke data jumlah harian. Data berasal dari sertifikat kematian yang merupakan 'catatan publik' tetapi membutuhkan proses untuk mendapatkan; Namun, data jumlah agregat tidak. PS - Saya mencoba tautannya sendiri dan berhasil, tetapi saya belum memposting ke folder dropbox publik dengan cara ini sebelumnya, jadi tolong beri tahu saya jika tautannya tidak berfungsi.
svannoy
1
Karena data Anda dihitung, saya berharap varians terkait dengan mean. Model deret waktu yang biasa tidak memperhitungkan hal itu (namun, Anda dapat mencoba mengatakan transformasi , mungkin Freeman-Tukey , katakan), atau Anda dapat melihat model deret waktu yang dirancang untuk menghitung data. (Jika Anda tidak melakukan ini, itu mungkin bukan masalah besar karena jumlahnya hanya berkisar pada faktor dua atau lebih.)
Glen_b -Reinstate Monica
1
ytμtVar(yt)=μt

Jawaban:

13

Bagaimana dengan regresi Poisson?

Saya membuat kerangka data yang berisi data Anda, ditambah indeks tuntuk waktu (dalam bulan) dan variabel monthdaysuntuk jumlah hari di setiap bulan.

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

Jadi terlihat seperti ini:

> 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

Sekarang mari kita bandingkan model dengan efek waktu dan efek beberapa hari dengan model di mana kita menambahkan efek bulan:

> a0 <- glm( suicides ~ t + monthdays, family="poisson", data = U )
> a1 <- glm( suicides ~ t + monthdays + month, family="poisson", data = U )

Berikut ini ringkasan model "kecil":

> 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

Anda dapat melihat bahwa kedua variabel memiliki efek marginal yang sangat besar. Sekarang lihat model yang lebih besar:

> 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

Yah, tentu saja monthdaysefeknya menghilang; itu bisa diperkirakan hanya berkat tahun kabisat !! Menyimpannya dalam model (dan memperhitungkan tahun kabisat) memungkinkan untuk menggunakan penyimpangan residual untuk membandingkan kedua model.

> 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πt12)dosa(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

Sekarang bandingkan dengan model nol:

> 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

Jadi, orang dapat mengatakan bahwa ini menunjukkan efek musiman ...

Elvis
sumber
2
hal
2
Saya sepenuhnya setuju, itulah yang saya maksudkan :) "Orang pasti dapat mengatakan bahwa ini menunjukkan efek"; dan bukan "Ada efek"! Yang menurut saya menarik adalah transformasi trigonometri ini, sangat alami dan saya tidak mengerti mengapa itu tidak terlihat lebih sering. Tapi ini hanya titik awal ... bootstrap, menilai model ... banyak yang harus dilakukan.
Elvis
1
Tidak masalah! Sayangnya saya, saya tidak dapat mendeteksi lelucon. :)
usεr11852 mengatakan Reinstate Monic
2
+1. Poisson bertemu dengan Fourier .... Saya pikir para ekonom dan beberapa yang lain menekankan variabel indikator karena musiman bisa sangat tipis, tetapi pendekatan trigonometri sering membantu.
Nick Cox
2
Memang. Ulasan tutorial yang saya tulis dapat diakses di stata-journal.com/article.html?article=st0116
Nick Cox
8

Tes chi-square adalah pendekatan yang baik sebagai pandangan awal untuk pertanyaan Anda.

The stldekomposisi dapat menyesatkan sebagai alat untuk menguji keberadaan musiman. Prosedur ini berhasil mengembalikan pola musiman yang stabil bahkan jika white noise (sinyal acak tanpa struktur) dilewatkan sebagai input. Coba misalnya:

plot(stl(ts(rnorm(144), frequency=12), s.window="periodic"))

Melihat pesanan yang dipilih oleh prosedur pemilihan model ARIMA otomatis juga agak berisiko karena model ARIMA musiman tidak selalu melibatkan musiman (untuk detail lihat diskusi ini ). Dalam kasus ini, model yang dipilih menghasilkan siklus musiman dan komentar oleh @RichardHardy masuk akal, namun, wawasan lebih lanjut diperlukan untuk menyimpulkan bahwa bunuh diri didorong oleh pola musiman.

Di bawah, saya merangkum beberapa hasil berdasarkan analisis dari seri bulanan yang Anda posting. Ini adalah komponen musiman yang diestimasi berdasarkan model deret waktu struktural dasar:

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)

estimasi komponen musiman

Komponen serupa diekstraksi menggunakan perangkat lunak TRAMO-SEATS dengan opsi default. Kita dapat melihat bahwa pola musiman yang diperkirakan tidak stabil sepanjang waktu dan, karenanya, tidak mendukung hipotesis pola berulang dalam jumlah bunuh diri di bulan selama periode sampel. Menjalankan perangkat lunak X-13ARIMA-SEATS dengan opsi default, tes gabungan untuk musiman menyimpulkan bahwa musiman yang dapat diidentifikasi tidak ada.

Sunting (lihat jawaban ini dan komentar saya di bawah ini untuk definisi musiman yang dapat diidentifikasi ).

Mengingat sifat data Anda, ada baiknya melengkapi analisis ini berdasarkan metode deret waktu dengan model untuk menghitung data (misalnya model Poisson) dan menguji signifikansi musiman pada model itu. Menambahkan data jumlah tag ke pertanyaan Anda dapat menghasilkan lebih banyak tampilan dan kemungkinan jawaban dalam arah ini.

javlacalle
sumber
Terima kasih @javiacalle, saya akan menyelidiki metode yang Anda sarankan. Bolehkah saya bertanya tentang kesimpulan Anda dari grafik yang Anda poskan, apakah fakta bahwa amplitudo meningkat seiring kemajuan tahun yang menjadi dasar dari komentar Anda, "kita dapat melihat bahwa pola musiman yang diperkirakan tidak stabil sepanjang waktu", atau apakah itu termasuk pengamatan yang lebih halus bahwa bentuk setiap puncak sedikit berbeda? Saya anggap yang pertama, tetapi kita tahu di mana asumsi membawa kita.
svannoy
2
χ2
@svannoy Kesimpulan utama berdasarkan metode deret waktu yang digunakan dalam jawaban saya adalah bahwa tidak ada pola musiman yang jelas dalam data sampel. Meskipun siklus musiman menjelaskan bagian dari variabilitas data, pola musiman tidak dapat diidentifikasi dengan andal karena dikaburkan oleh fluktuasi tidak beraturan tingkat tinggi (ini juga dapat diperiksa dengan menampilkan fungsi gain dari model ARIMA yang dipilih yang ditunjukkan dalam pertanyaan) .
javlacalle
@ oDDsKooL Saya juga telah melakukan tes chi-square pada hari minggu, Sabtu / Minggu sedikit di bawah ekspektasi dan Senin / Selasa tepat di atas ....
svannoy
6

Seperti disebutkan dalam komentar saya, ini adalah masalah yang sangat menarik. Mendeteksi musiman bukanlah latihan statistik saja. Pendekatan yang masuk akal adalah berkonsultasi dengan teori dan pakar seperti:

  • Psikolog
  • Psikiater
  • Sosiolog

pada masalah ini untuk memahami "mengapa" akan ada musiman untuk melengkapi analisis data. Datang ke data, saya menggunakan metode dekomposisi yang sangat baik yang disebut unobserved components model (UCM) yang merupakan bentuk metode state space. Lihat juga artikel yang sangat mudah diakses oleh Koopman ini. Pendekatan saya mirip dengan @Javlacalle. Itu tidak hanya menyediakan alat untuk menguraikan data deret waktu tetapi juga secara obyektif menilai ada atau tidaknya musiman melalui pengujian signifikansi. Saya bukan penggemar pengujian signifikansi pada data non-eksperimental, tetapi saya tidak tahu prosedur lain yang dapat Anda uji hipotesis Anda tentang ada / tidaknya musiman pada data time series.

Banyak yang mengabaikan tetapi fitur yang sangat penting yang ingin dipahami adalah jenis musiman:

  1. Stochastic - berubah secara acak dan sulit diprediksi
  2. Deterministik - tidak berubah, dapat diprediksi dengan sempurna. Anda dapat menggunakan dummy atau trigonometri (sin / cos dll,) untuk membuat model

Untuk data seri waktu yang panjang seperti milik Anda, ada kemungkinan bahwa musiman mungkin berubah seiring waktu. Sekali lagi UCM adalah satu-satunya pendekatan yang saya tahu yang dapat mendeteksi musiman stokastik / deterministik ini. UCM dapat menguraikan masalah Anda menjadi "komponen" berikut:

Time Series Data = level + Slope + Seasonality + Cycle + Causal + Error(Noise).

Anda juga dapat menguji apakah level, kemiringan, siklus adalah deterministik atau stokastik. Harap perhatikan itu level + slope = trend. Di bawah ini saya menyajikan beberapa analisis pada data Anda menggunakan UCM. Saya menggunakan SAS untuk melakukan analisis.

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;

Setelah beberapa iterasi mempertimbangkan komponen dan kombinasi yang berbeda, saya mengakhiri dengan model pelit dari bentuk berikut:

Ada tingkat stokastik + musiman deterministik + beberapa outlier dan data tidak memiliki fitur lain yang terdeteksi.

masukkan deskripsi gambar di sini

Di bawah ini adalah analisis signifikansi berbagai komponen. Perhatikan bahwa saya menggunakan trigonometri (yaitu sin / cos dalam pernyataan musiman di PROC UCM) yang mirip dengan @Elvis dan @Nick Cox. Anda juga bisa menggunakan dummy coding di UCM dan ketika saya menguji keduanya memberikan hasil yang sama. Lihat dokumentasi ini untuk perbedaan antara dua cara untuk memodelkan musiman di SAS.

masukkan deskripsi gambar di sini

Seperti yang ditunjukkan di atas, Anda memiliki outlier: dua pulsa dan satu tingkat pergeseran pada tahun 2009 (Apakah gelembung ekonomi / perumahan berperan setelah 2009 ??) yang dapat dijelaskan dengan analisis menyelam lebih dalam. Fitur yang baik untuk digunakan Proc UCMadalah memberikan output grafis yang luar biasa.

Di bawah ini adalah musiman dan tren gabungan dan plot musiman. Apa pun yang tersisa adalah kebisingan .

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Tes diagnostik yang lebih penting jika Anda ingin menggunakan nilai p dan pengujian signifikansi adalah untuk memeriksa apakah residu Anda kurang pola dan terdistribusi normal yang dipenuhi dalam model di atas menggunakan UCM dan seperti yang ditunjukkan di bawah ini dalam plot diagnostik residual seperti acf / pacf dan lain-lain.

masukkan deskripsi gambar di sini

Kesimpulan : Berdasarkan analisis data menggunakan UCM dan pengujian signifikansi data tampaknya memiliki musiman dan kami melihat jumlah kematian yang tinggi di bulan-bulan musim panas Mei / Juni / Juli dan terendah di bulan-bulan musim dingin di bulan Desember dan Februari.

Pertimbangan Tambahan : Harap pertimbangkan juga arti praktis dari besarnya variasi musiman. Untuk meniadakan argumen kontrafaktual, silakan berkonsultasi dengan pakar domain untuk lebih melengkapi dan memvalidasi hipotesis Anda.

Saya sama sekali tidak mengatakan bahwa ini adalah satu-satunya pendekatan untuk menyelesaikan masalah ini. Fitur yang saya sukai tentang UCM adalah fitur ini memungkinkan Anda untuk memodelkan semua fitur deret waktu secara eksplisit dan juga sangat visual.

peramal cuaca
sumber
Terima kasih atas jawaban ini dan untuk komentar yang menarik. Saya tidak tahu UCM, sepertinya sangat menarik, saya akan mencoba mengingatnya ...
Elvis
(+1) Analisis yang menarik. Saya masih akan berhati-hati untuk menyimpulkan adanya pola musiman deterministik yang signifikan, tetapi hasil Anda membutuhkan untuk melihat lebih dekat kemungkinan ini. Uji Canova dan Hansen untuk stabilitas musiman dapat membantu, hal ini dijelaskan sebagai contoh di sini .
javlacalle
gretlπ/6
1
+1. Banyak komentar menarik dan bermanfaat. Dalam daftar psikolog, psikiater, sosiolog Anda dapat ditambahkan ahli meteorologi / klimatologi. Orang seperti itu ingin menambahkan bahwa tidak ada dua tahun yang identik dalam siklus curah hujan dan suhu. Saya akan menebak dengan kasar pada lebih banyak depresi di musim dingin (panjang hari yang lebih pendek, dll.), Tetapi begitu banyak tebakan yang diberikan beberapa data.
Nick Cox
Terima kasih @forecaster, ini menambah banyak pembelajaran saya. Saya seorang psikolog, dengan gelar kesehatan masyarakat. Saya akan menambahkan ahli epidemiologi ke daftar Anda. Seperti yang saya sebutkan di awal, ada banyak mitologi (alias berteori) tentang tren musiman dan bunuh diri. Seseorang dapat membuat argumen yang kuat untuk tren musiman, ke arah mana pun sehingga kita perlu analisis kuantitatif untuk mengkonfirmasi. Dari sudut pandang kesehatan masyarakat, jika kami menemukan diskontinuitas yang tajam, kami dapat menargetkan intervensi. Saya tidak melihat itu di data ini. Dari sudut pandang teori bunuh diri, mengkonfirmasikan bahkan tren kecil dapat menginformasikan perkembangan teori.
svannoy
1

Untuk estimasi visual awal, grafik berikut dapat digunakan. Merencanakan data bulanan dengan kurva loess dan interval kepercayaan 95%, tampak bahwa ada kenaikan pertengahan tahun memuncak pada Juni. Faktor-faktor lain mungkin menyebabkan data memiliki distribusi yang luas, maka tren musiman mungkin tertutupi dalam plot loess data mentah ini. Poin data telah gugup.

masukkan deskripsi gambar di sini

Sunting: Plot berikut menunjukkan kurva loess dan interval kepercayaan untuk perubahan jumlah kasus dari jumlah di bulan sebelumnya:

masukkan deskripsi gambar di sini

Ini juga menunjukkan bahwa selama bulan-bulan di paruh pertama tahun ini, jumlah kasus terus meningkat, sementara mereka turun di paruh kedua tahun ini. Ini juga menunjukkan puncaknya di pertengahan tahun. Namun, interval kepercayaan yang luas dan melampaui 0, yaitu tidak ada perubahan, sepanjang tahun, menunjukkan kurangnya signifikansi statistik.

Perbedaan angka satu bulan dapat dibandingkan dengan rata-rata nilai 3 bulan sebelumnya:

masukkan deskripsi gambar di sini

Ini menunjukkan peningkatan yang jelas dalam jumlah di bulan Mei dan penurunan di bulan Oktober.

juga
sumber
(-1) Sudah ada tiga jawaban berkualitas tinggi untuk pertanyaan ini. Jawaban Anda juga tidak menjawab pertanyaan yang diposting - Anda dapat mempostingnya sebagai komentar . Anda tidak memberikan jawaban bagaimana data ini dapat dianalisis.
Tim
Saya sebelumnya mengirim komentar di sini (lihat pertanyaan di bawah), tetapi saya tidak dapat memposting angka di komentar.
rnso
Meskipun saya mengerti editorial di sini, saya akan mengatakan bahwa @rnso telah menyediakan grafik yang bagus yang menggambarkan komponen musiman potensial dengan baik dan seharusnya menjadi bagian dari posting asli saya.
svannoy
Saya mengerti dan setuju, tapi tetap saja ini bukan jawaban melainkan komentar atau perbaikan. @rnso dapat menyarankan kepada Anda melalui komentar agar Anda dapat melihat atau memasukkan plot tersebut.
Tim
@Glen_b, @ Tim: Saya telah menambahkan plot lain yang mungkin berguna dan saya tidak bisa memberikan komentar.
rnso