Đây có phải là một phương pháp thích hợp để kiểm tra các tác động theo mùa trong dữ liệu đếm tự tử?


24

Tôi có 17 năm (1995 đến 2011) dữ liệu giấy chứng tử liên quan đến cái chết tự tử cho một tiểu bang ở Mỹ Có rất nhiều huyền thoại về những vụ tự tử và những tháng / mùa, phần lớn là mâu thuẫn và về tài liệu tôi ' đã xem xét, tôi không hiểu rõ về các phương pháp được sử dụng hoặc tin tưởng vào kết quả.

Vì vậy, tôi đã đặt ra để xem liệu tôi có thể xác định liệu các vụ tự tử có ít nhiều khả năng xảy ra trong bất kỳ tháng nào trong tập dữ liệu của mình không. Tất cả các phân tích của tôi được thực hiện trong R.

Tổng số vụ tự tử trong dữ liệu là 13.909.

Nếu bạn nhìn vào năm có ít vụ tự tử nhất, chúng xảy ra vào 309/365 ngày (85%). Nếu bạn nhìn vào năm có nhiều vụ tự tử nhất, chúng xảy ra vào 339/365 ngày (93%).

Vì vậy, có một số ngày hợp lý mỗi năm mà không có vụ tự tử. Tuy nhiên, khi tổng hợp trong tất cả 17 năm, có những vụ tự tử vào mỗi ngày trong năm, bao gồm cả ngày 29 tháng 2 (mặc dù chỉ có 5 khi trung bình là 38).

nhập mô tả hình ảnh ở đây

Đơn giản chỉ cần thêm số vụ tự tử vào mỗi ngày trong năm không cho thấy tính thời vụ rõ ràng (trong mắt tôi).

Tổng hợp ở cấp độ hàng tháng, tự tử trung bình mỗi tháng trong khoảng từ:

(m = 65, sd = 7.4, đến m = 72, sd = 11.1)

Cách tiếp cận đầu tiên của tôi là tổng hợp dữ liệu được thiết lập theo tháng trong tất cả các năm và thực hiện kiểm tra chi bình phương sau khi tính toán xác suất dự kiến ​​cho giả thuyết null, rằng không có sự khác biệt có hệ thống về số lần tự tử theo tháng. Tôi đã tính toán xác suất cho mỗi tháng có tính đến số ngày (và điều chỉnh tháng 2 cho năm nhuận).

Các kết quả chi bình phương cho thấy không có sự thay đổi đáng kể theo tháng:

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

Hình ảnh dưới đây cho thấy tổng số lượng mỗi tháng. Các đường màu đỏ nằm ngang được định vị ở các giá trị dự kiến ​​cho tháng 2, tháng 30 và tháng 31 tương ứng. Phù hợp với kiểm tra chi bình phương, không có tháng nào nằm ngoài khoảng tin cậy 95% cho số lượng dự kiến. nhập mô tả hình ảnh ở đây

Tôi nghĩ rằng tôi đã hoàn thành cho đến khi tôi bắt đầu điều tra dữ liệu chuỗi thời gian. Như tôi tưởng tượng nhiều người làm, tôi bắt đầu với phương pháp phân rã theo mùa không tham số bằng cách sử dụng stlhàm trong gói thống kê.

Để tạo dữ liệu chuỗi thời gian, tôi bắt đầu với dữ liệu hàng tháng được tổng hợp:

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

nhập mô tả hình ảnh ở đây

     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

Và sau đó thực hiện stl()phân tách

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

nhập mô tả hình ảnh ở đây

Lúc này tôi trở nên lo lắng vì dường như có cả thành phần theo mùa và xu hướng. Sau nhiều nghiên cứu trên internet, tôi quyết định làm theo hướng dẫn của Rob Hyndman và George Athanasopoulos như được trình bày trong văn bản trực tuyến "Dự báo: nguyên tắc và thực hành", đặc biệt là áp dụng mô hình ARIMA theo mùa.

Tôi đã sử dụng adf.test()kpss.test()để đánh giá sự ổn định và nhận được kết quả mâu thuẫn. Cả hai đều bác bỏ giả thuyết khống (lưu ý rằng họ kiểm tra giả thuyết ngược lại).

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

Sau đó, tôi đã sử dụng thuật toán trong cuốn sách để xem liệu tôi có thể xác định mức độ khác biệt cần thực hiện cho cả xu hướng và mùa hay không. Tôi đã kết thúc với nd = 1, ns = 0.

Sau đó tôi chạy auto.arima, trong đó chọn một mô hình có cả xu hướng và thành phần theo mùa cùng với hằng số loại "trôi".

# 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

nhập mô tả hình ảnh ở đây

> 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

Cuối cùng, tôi đã xem xét các phần dư từ sự phù hợp và nếu tôi hiểu điều này một cách chính xác, vì tất cả các giá trị đều nằm trong giới hạn ngưỡng, chúng hoạt động giống như nhiễu trắng và do đó mô hình khá hợp lý. Tôi đã chạy thử nghiệm portmanteau như được mô tả trong văn bản, có giá trị ap cao hơn 0,05, nhưng tôi không chắc rằng mình có các tham số chính xác.

Acf(residuals(bestFit))

nhập mô tả hình ảnh ở đây

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

Quay trở lại và đọc chương về mô hình arima một lần nữa, tôi nhận ra rằng bây giờ auto.arimađã chọn mô hình theo xu hướng và mùa. Và tôi cũng nhận ra rằng dự báo không phải là phân tích cụ thể mà tôi nên làm. Tôi muốn biết liệu một tháng cụ thể (hay nói chung là thời gian trong năm) nên được gắn cờ là tháng có rủi ro cao. Có vẻ như các công cụ trong tài liệu dự báo rất phù hợp, nhưng có lẽ không phải là tốt nhất cho câu hỏi của tôi. Bất kỳ và tất cả các đầu vào được nhiều đánh giá cao.

Tôi đang đăng một liên kết đến một tệp csv có chứa số lượng hàng ngày. Các tập tin trông như thế này:

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

Đếm là số vụ tự tử xảy ra vào ngày hôm đó. "T" là một chuỗi số từ 1 đến tổng số ngày trong bảng (5533).

Tôi đã lưu ý các ý kiến ​​dưới đây và nghĩ về hai điều liên quan đến mô hình tự tử và các mùa. Đầu tiên, đối với câu hỏi của tôi, tháng chỉ đơn giản là proxy để đánh dấu sự thay đổi của mùa, tôi không quan tâm đến thời tiết hay không một tháng cụ thể nào khác với những người khác (tất nhiên đó là một câu hỏi thú vị, nhưng đó không phải là điều tôi đặt ra điều tra). Do đó, tôi nghĩ việc cân bằng các tháng bằng cách sử dụng 28 ngày đầu tiên của tất cả các tháng là hợp lý. Khi bạn làm điều này, bạn sẽ có một sự phù hợp tồi tệ hơn một chút, mà tôi đang diễn giải như nhiều bằng chứng cho việc thiếu tính thời vụ. Trong kết quả đầu ra bên dưới, sự phù hợp đầu tiên là sự sao chép từ câu trả lời bên dưới bằng cách sử dụng tháng với số ngày thực sự của họ, theo sau là một tập hợp dữ liệu tự tửByShortMonthtrong đó số người tự tử được tính từ 28 ngày đầu tiên của tất cả các tháng. Tôi quan tâm đến những gì mọi người nghĩ về thời tiết hay không sự điều chỉnh này là một ý tưởng tốt, không cần thiết hay có hại?

> 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

Điều thứ hai tôi đã xem xét nhiều hơn là vấn đề sử dụng tháng làm proxy cho mùa vụ. Có lẽ một chỉ báo tốt hơn về mùa là số giờ ban ngày mà một khu vực nhận được. Dữ liệu này đến từ một tiểu bang phía bắc có sự thay đổi đáng kể về ánh sáng ban ngày. Dưới đây là biểu đồ của ánh sáng ban ngày từ năm 2002.

nhập mô tả hình ảnh ở đây

Khi tôi sử dụng dữ liệu này thay vì tháng trong năm, hiệu quả vẫn rất đáng kể, nhưng hiệu quả rất nhỏ. Độ lệch còn lại lớn hơn nhiều so với các mô hình trên. Nếu giờ ban ngày là một mô hình tốt hơn cho các mùa và sự phù hợp là không tốt, thì đây có phải là bằng chứng về hiệu ứng theo mùa rất nhỏ?

> 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

Tôi đang đăng các giờ ban ngày trong trường hợp bất cứ ai muốn chơi xung quanh với điều này. Lưu ý, đây không phải là năm nhuận, vì vậy nếu bạn muốn đưa vào biên bản cho năm nhuận, hãy ngoại suy hoặc truy xuất dữ liệu.

bang.daylight.2002.csv

[ Chỉnh sửa để thêm cốt truyện từ câu trả lời đã bị xóa

nhập mô tả hình ảnh ở đây


1
Từ ngữ "một trong 50 tiểu bang của chúng tôi" ngụ ý rằng tất cả các độc giả thuộc về Hoa Kỳ. Manifestly nhiều người ngoài hành tinh ẩn nấp ở đây quá.
Nick Cox

1
Có phải đó là từ một bộ dữ liệu công cộng? Bạn có thể cung cấp dữ liệu hàng tuần hoặc thậm chí hàng ngày không?
Elvis

1
@Elvis - Tôi đã đăng một liên kết đến dữ liệu đếm hàng ngày. Dữ liệu đến từ giấy chứng tử là 'hồ sơ công khai' nhưng yêu cầu một quy trình để có được; tuy nhiên, dữ liệu đếm tổng hợp thì không. Tái bút - Tôi đã tự mình thử liên kết và nó đã hoạt động, nhưng tôi chưa đăng lên thư mục dropbox công khai theo cách này trước đây vì vậy vui lòng cho tôi biết nếu liên kết không hoạt động.
Svannoy

1
Vì dữ liệu của bạn là số đếm, tôi mong muốn phương sai có liên quan đến giá trị trung bình. Các mô hình chuỗi thời gian thông thường không giải thích điều đó (tuy nhiên, bạn có thể thử nói một phép biến đổi , có thể là Freeman-Tukey , hoặc bạn có thể xem mô hình chuỗi thời gian được thiết kế cho dữ liệu đếm. (Nếu bạn không làm điều này thì đó có thể không phải là một vấn đề lớn vì số lượng chỉ nằm trong phạm vi hai hoặc hơn.)
Glen_b -Reinstate Monica

1
ytμtVar(yt)= =μt

Câu trả lời:


13

Điều gì về một hồi quy Poisson?

Tôi đã tạo một khung dữ liệu chứa dữ liệu của bạn, cộng với một chỉ mục tcho thời gian (tính theo tháng) và một biến số monthdayscho số ngày trong mỗi tháng.

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

Vì vậy, nó trông như thế này:

> 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

Bây giờ, hãy so sánh một mô hình với hiệu ứng thời gian và hiệu ứng số ngày với một mô hình trong đó chúng ta thêm hiệu ứng tháng:

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

Dưới đây là tóm tắt của mô hình "nhỏ":

> 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

Bạn có thể thấy rằng hai biến có tác động biên đáng kể. Bây giờ hãy nhìn vào mô hình lớn hơn:

> 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

Vâng, tất nhiên monthdayshiệu ứng biến mất; nó chỉ có thể được ước tính nhờ vào năm nhuận !! Giữ nó trong mô hình (và tính đến năm nhuận) cho phép sử dụng các độ lệch còn lại để so sánh hai mô hình.

> 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)tội(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

Bây giờ so sánh nó với mô hình 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

Vì vậy, người ta chắc chắn có thể nói rằng điều này cho thấy một hiệu ứng theo mùa ...


2
p

2
Tôi hoàn toàn đồng ý, đó là những gì tôi ngụ ý :) "Một người chắc chắn có thể nói rằng điều này cho thấy một hiệu ứng"; và không "Có hiệu lực"! Điều tôi nghĩ thú vị là phép biến đổi lượng giác này, nó rất tự nhiên và tôi không hiểu tại sao nó không được nhìn thấy thường xuyên hơn. Nhưng đây chỉ là điểm khởi đầu ... bootstrapping, đánh giá mô hình ... rất nhiều việc phải làm.
Elvis

1
Không có probs! Xấu của tôi sau đó, tôi không thể phát hiện ra trò đùa. :)
usεr11852 nói Phục hồi Monic

2
+1. Poisson gặp Fourier .... Tôi nghĩ các nhà kinh tế và một số người khác nhấn mạnh các biến chỉ số bởi vì tính thời vụ có thể tăng đột biến, nhưng phương pháp lượng giác thường giúp ích.
Nick Cox

2
Thật. Một bài đánh giá hướng dẫn tôi đã viết có thể truy cập tại stata-journal.com/article.html?article=st0116
Nick Cox

8

Một bài kiểm tra chi bình phương là một cách tiếp cận tốt như một cái nhìn sơ bộ cho câu hỏi của bạn.

Sự stlphân hủy có thể gây hiểu nhầm như một công cụ để kiểm tra sự hiện diện của tính thời vụ. Quy trình này quản lý để trả về một mẫu theo mùa ổn định ngay cả khi nhiễu trắng (tín hiệu ngẫu nhiên không có cấu trúc) được truyền làm đầu vào. Hãy thử ví dụ:

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

Nhìn vào các đơn đặt hàng được chọn bởi quy trình lựa chọn mô hình ARIMA tự động cũng có một chút rủi ro vì mô hình ARIMA theo mùa không phải lúc nào cũng liên quan đến tính thời vụ (để biết chi tiết xem thảo luận này ). Trong trường hợp này, mô hình được chọn tạo ra các chu kỳ theo mùa và nhận xét của @RichardHardy là hợp lý, tuy nhiên, cần có một cái nhìn sâu sắc hơn nữa để kết luận rằng các vụ tự tử được điều khiển bởi một mô hình theo mùa.

Dưới đây, tôi tóm tắt một số kết quả dựa trên phân tích của chuỗi hàng tháng mà bạn đã đăng. Đây là thành phần theo mùa được ước tính theo mô hình chuỗi thời gian cấu trúc cơ bản:

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)

ước tính thành phần theo mùa

Một thành phần tương tự đã được trích xuất bằng phần mềm TRAMO-SEATS với các tùy chọn mặc định. Chúng ta có thể thấy rằng mô hình theo mùa ước tính không ổn định theo thời gian và do đó, không hỗ trợ giả thuyết về mô hình tái phát trong số vụ tự tử trong nhiều tháng trong giai đoạn mẫu. Chạy phần mềm X-13ARIMA-SEATS với các tùy chọn mặc định, thử nghiệm kết hợp cho tính thời vụ kết luận rằng tính thời vụ có thể nhận dạng là không có.

Chỉnh sửa (xem câu trả lời này và nhận xét của tôi dưới đây để biết định nghĩa về tính thời vụ có thể xác định được ).

Do tính chất của dữ liệu của bạn, sẽ đáng để bổ sung cho phân tích này dựa trên các phương pháp chuỗi thời gian với một mô hình cho dữ liệu đếm (ví dụ: mô hình Poisson) và kiểm tra tầm quan trọng của tính thời vụ trong mô hình đó. Thêm dữ liệu đếm thẻ vào câu hỏi của bạn có thể dẫn đến nhiều lượt xem và câu trả lời tiềm năng theo hướng này.


Cảm ơn @javiacalle, tôi sẽ nghiên cứu các phương pháp bạn đề xuất. Tôi có thể hỏi về kết luận của bạn về biểu đồ bạn đã đăng không, có phải thực tế là biên độ tăng khi số năm tiến triển là cơ sở của nhận xét của bạn, "chúng ta có thể thấy rằng mô hình theo mùa ước tính không ổn định theo thời gian", hoặc điều đó bao gồm các quan sát tinh tế hơn rằng hình dạng của mỗi đỉnh hơi khác nhau? Tôi là một người giả mạo trước đây, nhưng chúng tôi biết những giả định dẫn chúng tôi đến đâu.
Svannoy

2
χ2

@svannoy Kết luận chính dựa trên các phương pháp chuỗi thời gian được sử dụng trong câu trả lời của tôi là không có mẫu rõ ràng theo mùa trong dữ liệu mẫu. Mặc dù các chu kỳ theo mùa giải thích một phần sự thay đổi của dữ liệu, một mẫu theo mùa có thể được xác định một cách đáng tin cậy vì nó bị che khuất bởi mức độ biến động bất thường cao (điều này cũng có thể được kiểm tra hiển thị chức năng khuếch đại của mô hình ARIMA đã chọn trong câu hỏi) .
javlacalle

@oDDsKooL Tôi cũng đã thực hiện bài kiểm tra chi bình phương vào ngày trong tuần, Thứ Bảy / Chủ Nhật thấp hơn một chút so với mong đợi và Thứ Hai / Thứ Ba chỉ ở trên ....
svannoy

6

Như đã lưu ý trong nhận xét của tôi, đây là một vấn đề rất thú vị. Phát hiện tính thời vụ không phải là một bài tập thống kê một mình. Một cách tiếp cận hợp lý sẽ là tham khảo lý thuyết và các chuyên gia như:

  • Nhà tâm lý học
  • Bác sĩ tâm thần
  • Nhà xã hội học

về vấn đề này để hiểu "tại sao" sẽ có tính thời vụ để bổ sung phân tích dữ liệu. Đến với dữ liệu, tôi đã sử dụng một phương pháp phân rã tuyệt vời được gọi là mô hình thành phần không quan sát được (UCM), một dạng của phương thức không gian trạng thái. Xem thêm bài viết rất dễ tiếp cận này của Koopman. Cách tiếp cận của tôi tương tự như @Javlacalle. Nó không chỉ cung cấp một công cụ để phân tách dữ liệu chuỗi thời gian mà còn đánh giá khách quan sự hiện diện hay vắng mặt của tính thời vụ thông qua thử nghiệm quan trọng. Tôi không phải là một fan hâm mộ lớn của thử nghiệm ý nghĩa đối với dữ liệu phi thực nghiệm nhưng tôi không biết bất kỳ quy trình nào khác mà bạn có thể kiểm tra giả thuyết của mình về sự hiện diện / vắng mặt của tính thời vụ trên dữ liệu chuỗi thời gian.

Nhiều người bỏ qua nhưng một tính năng rất quan trọng mà người ta muốn hiểu là loại tính thời vụ:

  1. Stochastic - thay đổi ngẫu nhiên và khó dự đoán
  2. Quyết đoán - không thay đổi, hoàn toàn có thể dự đoán. Bạn có thể sử dụng hình nộm hoặc lượng giác (sin / cos, v.v.) để tạo mô hình

Đối với dữ liệu chuỗi thời gian dài như của bạn, có thể tính thời vụ có thể đã thay đổi theo thời gian. Một lần nữa, UCM là cách tiếp cận duy nhất mà tôi biết có thể phát hiện ra tính thời vụ ngẫu nhiên / xác định này. UCM có thể phân tách vấn đề của bạn thành các "thành phần" sau:

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

Bạn cũng có thể kiểm tra xem mức độ, độ dốc, chu kỳ là xác định hay ngẫu nhiên. Xin lưu ý rằng level + slope = trend. Dưới đây tôi trình bày một số phân tích về dữ liệu của bạn bằng UCM. Tôi đã sử dụng SAS để làm phân tích.

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;

Sau vài lần lặp lại xem xét các thành phần và kết hợp khác nhau, tôi đã kết thúc với một mô hình tuyệt vời có dạng sau:

Có một mức độ ngẫu nhiên + tính thời vụ xác định + một số ngoại lệ và dữ liệu không có bất kỳ tính năng có thể phát hiện nào khác.

nhập mô tả hình ảnh ở đây

Dưới đây là phân tích ý nghĩa của các thành phần khác nhau. Lưu ý rằng tôi đã sử dụng lượng giác (đó là sin / cos trong tuyên bố tính thời vụ trong PROC UCM) tương tự như @Elvis và @Nick Cox. Bạn cũng có thể sử dụng mã hóa giả trong UCM và khi tôi thử nghiệm cả hai đều cho kết quả tương tự. Xem tài liệu này để biết sự khác biệt giữa hai cách để mô hình hóa tính thời vụ trong SAS.

nhập mô tả hình ảnh ở đây

Như đã trình bày ở trên, bạn có các ngoại lệ: hai xung và một mức dịch chuyển trong năm 2009 (Có phải bong bóng kinh tế / nhà ở đóng vai trò sau năm 2009 ??) có thể được giải thích bằng phân tích lặn sâu hơn nữa. Một tính năng tốt của việc sử dụng Proc UCMlà nó cung cấp đầu ra đồ họa tuyệt vời.

Dưới đây là tính thời vụ và một xu hướng kết hợp và cốt truyện theo mùa. Bất cứ điều gì còn lại là tiếng ồn .

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Một thử nghiệm chẩn đoán quan trọng hơn nếu bạn muốn sử dụng giá trị p và thử nghiệm quan trọng là kiểm tra xem phần dư của bạn có ít mẫu và được phân phối bình thường , được thỏa mãn trong mô hình trên bằng UCM và như được hiển thị bên dưới trong các ô chẩn đoán còn lại như acf / pacf và những người khác.

nhập mô tả hình ảnh ở đây

Kết luận : Dựa trên phân tích dữ liệu bằng cách sử dụng UCM và kiểm tra ý nghĩa, dữ liệu dường như có tính thời vụ và chúng tôi thấy số ca tử vong cao trong các tháng mùa hè của tháng 5/6/7 và thấp nhất trong các tháng mùa đông của tháng 12 và tháng 2.

Xem xét bổ sung : Vui lòng xem xét ý nghĩa thực tế của mức độ thay đổi theo mùa. Để phủ nhận các lập luận phản tác dụng, vui lòng tham khảo ý kiến ​​các chuyên gia tên miền để bổ sung và xác thực giả thuyết của bạn.

Tôi không có ý nói rằng đây là cách tiếp cận duy nhất để giải quyết vấn đề này. Tính năng mà tôi thích về UCM là nó cho phép bạn mô hình hóa rõ ràng tất cả các tính năng chuỗi thời gian và cũng rất trực quan.


Cảm ơn câu trả lời này và cho ý kiến ​​thú vị. Tôi không biết UCM, có vẻ rất thú vị, tôi sẽ cố gắng ghi nhớ điều đó ...
Elvis

(+1) Phân tích thú vị. Tôi vẫn sẽ thận trọng về việc kết luận sự hiện diện của một mô hình theo mùa có tính quyết định quan trọng nhưng kết quả của bạn đòi hỏi phải xem xét kỹ hơn về khả năng này. Thử nghiệm Canova và Hansen cho sự ổn định theo mùa có thể hữu ích, ví dụ được mô tả ở đây .
javlacalle

gretlπ/6

1
+1. Nhiều ý kiến ​​thú vị và hữu ích. Trong danh sách của bạn về nhà tâm lý học, bác sĩ tâm thần, nhà xã hội học có thể được thêm nhà khí tượng học / nhà khí hậu học. Một người như vậy muốn thêm rằng không có hai năm giống hệt nhau về chu kỳ mưa và nhiệt độ. Tôi đã có thể đoán một cách thô bạo về trầm cảm nhiều hơn vào mùa đông (độ dài ngày ngắn hơn, v.v.), nhưng rất nhiều cho một dự đoán cho một số dữ liệu.
Nick Cox

Cảm ơn @forecaster, điều này bổ sung rất nhiều vào việc học của tôi. Tôi là một nhà tâm lý học, với bằng cấp y tế công cộng. Tôi muốn thêm nhà dịch tễ học vào danh sách của bạn. Như tôi đã đề cập lúc đầu, có rất nhiều thần thoại (hay còn gọi là lý thuyết hóa) về xu hướng theo mùa và tự tử. Người ta có thể đưa ra lập luận mạnh mẽ cho xu hướng theo mùa, theo bất kỳ hướng nào vì vậy chúng tôi cần phân tích định lượng để (dis) xác nhận. Từ góc độ sức khỏe cộng đồng, nếu chúng tôi thấy có sự gián đoạn đột ngột, chúng tôi có thể nhắm mục tiêu các can thiệp. Tôi không thấy điều đó trong dữ liệu này. Từ góc độ lý thuyết tự tử, xác nhận ngay cả những xu hướng nhỏ cũng có thể cung cấp cho sự phát triển lý thuyết.
Svannoy

1

Đối với ước tính trực quan ban đầu, đồ thị sau có thể được sử dụng. Vẽ dữ liệu hàng tháng với đường cong hoàng thổ và khoảng tin cậy 95% của nó, có vẻ như có một đỉnh tăng giữa năm vào tháng Sáu. Các yếu tố khác có thể khiến dữ liệu có phân phối rộng, do đó xu hướng theo mùa có thể bị che giấu trong biểu đồ hoàng thổ dữ liệu thô này. Các điểm dữ liệu đã bị xáo trộn.

nhập mô tả hình ảnh ở đây

Chỉnh sửa: Biểu đồ sau hiển thị đường cong hoàng thổ và khoảng tin cậy để thay đổi số lượng trường hợp từ số trong tháng trước:

nhập mô tả hình ảnh ở đây

Điều này cũng cho thấy rằng trong những tháng trong nửa đầu năm, số trường hợp tiếp tục tăng lên, trong khi chúng đang giảm trong nửa cuối năm. Điều này cũng cho thấy một đỉnh cao vào giữa năm nay. Tuy nhiên, khoảng tin cậy rất rộng và đi qua 0, tức là không có thay đổi, trong suốt cả năm, cho thấy sự thiếu ý nghĩa thống kê.

Sự khác biệt của số tháng có thể được so sánh với giá trị trung bình của 3 tháng trước:

nhập mô tả hình ảnh ở đây

Điều này cho thấy sự gia tăng rõ rệt về số lượng trong tháng Năm và một mùa thu vào tháng Mười.


(-1) Đã có ba câu trả lời chất lượng cao cho câu hỏi này. Câu trả lời của bạn cũng không trả lời câu hỏi được đăng - bạn có thể đăng nó dưới dạng bình luận . Bạn không cung cấp câu trả lời làm thế nào dữ liệu này có thể được phân tích.
Tim

Tôi đã sớm đăng bình luận ở đây (xem bên dưới câu hỏi), nhưng tôi không thể đăng con số trong các bình luận.
vào

Mặc dù tôi hiểu bài xã luận ở đây, tôi sẽ nói rằng @rnso đã cung cấp một biểu đồ đẹp minh họa thành phần theo mùa tiềm năng độc đáo và nên là một phần của bài viết gốc của tôi.
Svannoy

Tôi hiểu điều đó và đồng ý, nhưng đây vẫn không phải là một câu trả lời mà là một nhận xét hoặc cải tiến. @rnso có thể đã gợi ý cho bạn thông qua nhận xét mà bạn có thể xem hoặc đưa vào cốt truyện đó.
Tim

@Glen_b, @ Tim: Tôi đã thêm một cốt truyện khác có thể hữu ích và tôi không thể đưa ra nhận xét.
rnso
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.