นี่เป็นวิธีที่เหมาะสมในการทดสอบผลกระทบตามฤดูกาลในข้อมูลการนับการฆ่าตัวตายหรือไม่?


24

ฉันมีข้อมูลใบรับรองการเสียชีวิต 17 ปี (1995 ถึง 2011) ที่เกี่ยวข้องกับการฆ่าตัวตายของรัฐในสหรัฐอเมริกามีตำนานมากมายเกี่ยวกับการฆ่าตัวตายและเดือน / ฤดูกาลจำนวนมากที่ขัดแย้งกันและวรรณกรรมที่ฉัน ' ที่ผ่านมาฉันไม่เข้าใจวิธีการที่ใช้หรือความมั่นใจในผลลัพธ์

ดังนั้นฉันจึงออกเดินทางเพื่อดูว่าฉันสามารถตัดสินได้หรือไม่ว่าการฆ่าตัวตายมีแนวโน้มที่จะเกิดขึ้นมากหรือน้อยในเดือนใดก็ตามภายในชุดข้อมูลของฉัน การวิเคราะห์ทั้งหมดของฉันเสร็จสิ้นใน R

จำนวนการฆ่าตัวตายทั้งหมดในข้อมูลคือ 13,909

หากคุณดูปีที่มีการฆ่าตัวตายน้อยที่สุดพวกเขาจะเกิดขึ้นใน 309/365 วัน (85%) หากคุณดูปีที่มีการฆ่าตัวตายมากที่สุดพวกเขาจะเกิดขึ้นใน 339/365 วัน (93%)

ดังนั้นจึงมีจำนวนวันที่ยุติธรรมในแต่ละปีโดยไม่มีการฆ่าตัวตาย อย่างไรก็ตามเมื่อรวมกันตลอดทั้ง 17 ปีมีการฆ่าตัวตายในทุกวันของปีรวมถึงวันที่ 29 กุมภาพันธ์ (แม้ว่าจะเพียง 5 เมื่อเฉลี่ย 38)

ป้อนคำอธิบายรูปภาพที่นี่

เพียงแค่เพิ่มจำนวนการฆ่าตัวตายในแต่ละวันของปีไม่ได้บ่งบอกถึงฤดูกาลที่ชัดเจน (ในสายตาของฉัน)

เมื่อรวมกันในระดับรายเดือนการฆ่าตัวตายเฉลี่ยต่อเดือนมีตั้งแต่:

(m = 65, sd = 7.4, ถึง m = 72, sd = 11.1)

วิธีแรกของฉันคือการรวบรวมข้อมูลที่กำหนดโดยเดือนสำหรับทุกปีและทำการทดสอบไคสแควร์หลังจากคำนวณความน่าจะเป็นที่คาดหวังสำหรับสมมติฐานว่างว่าไม่มีการแปรปรวนของการฆ่าตัวตายอย่างเป็นระบบตามเดือน ฉันคำนวณความน่าจะเป็นในแต่ละเดือนโดยคำนึงถึงจำนวนวัน (และปรับเดือนกุมภาพันธ์เป็นปีอธิกสุรทิน)

ผลการไคสแควร์ไม่พบการเปลี่ยนแปลงที่สำคัญในแต่ละเดือน:

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

ภาพด้านล่างแสดงจำนวนรวมต่อเดือน เส้นสีแดงแนวนอนอยู่ในตำแหน่งที่คาดหวังสำหรับเดือนกุมภาพันธ์ 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

ในที่สุดฉันดูที่เหลือจากความพอดีและถ้าฉันเข้าใจสิ่งนี้อย่างถูกต้องเนื่องจากค่าทั้งหมดอยู่ในขีด จำกัด ขีด จำกัด พวกเขาจะทำตัวเหมือนเสียงสีขาวและแบบจำลองค่อนข้างสมเหตุสมผล ฉันรันการทดสอบกระเป๋าหิ้วตามที่อธิบายในข้อความซึ่งมีค่า ap มากกว่า 0.05 แต่ฉันไม่แน่ใจว่าฉันมีพารามิเตอร์ที่ถูกต้อง

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

เมื่อย้อนกลับไปอ่านบทเกี่ยวกับการสร้างแบบจำลอง Arima อีกครั้งฉันรู้แล้วว่าตอนนี้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

Count คือจำนวนการฆ่าตัวตายที่เกิดขึ้นในวันนั้น "t" เป็นลำดับตัวเลขจาก 1 ถึงจำนวนวันทั้งหมดในตาราง (5533)

ฉันได้รับทราบความคิดเห็นด้านล่างและคิดถึงสองสิ่งที่เกี่ยวข้องกับการสร้างแบบจำลองการฆ่าตัวตายและฤดูกาล ครั้งแรกที่เกี่ยวกับคำถามของฉันเดือนเป็นเพียงผู้รับมอบฉันทะสำหรับการทำเครื่องหมายการเปลี่ยนแปลงของฤดูกาลฉันไม่สนใจว่าจะเป็นเดือนที่แตกต่างจากคนอื่น (แน่นอนว่าเป็นคำถามที่น่าสนใจ แต่ไม่ใช่สิ่งที่ฉันกำหนดไว้ ตรวจสอบ) ดังนั้นฉันคิดว่ามันสมเหตุสมผลที่จะทำให้เท่ากันทุกเดือนโดยใช้ 28 วันแรกของทุกเดือน เมื่อคุณทำเช่นนี้คุณจะมีอาการแย่ลงเล็กน้อยซึ่งฉันตีความว่าเป็นหลักฐานเพิ่มเติมเกี่ยวกับการขาดฤดูกาล ในผลลัพธ์ด้านล่างแบบแรกคือการทำซ้ำจากคำตอบด้านล่างโดยใช้เดือนด้วยจำนวนวันจริงตามด้วยชุดข้อมูลsuicideByShortMonthการนับการฆ่าตัวตายถูกคำนวณจาก 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

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อฉันใช้ข้อมูลนี้มากกว่าเดือนของปีผลยังคงมีความสำคัญ แต่ผลที่ออกมามีขนาดเล็กมาก ความเบี่ยงเบนที่เหลือมีขนาดใหญ่กว่าแบบจำลองด้านบน หากเวลากลางวันเป็นแบบอย่างที่ดีกว่าสำหรับฤดูกาลและความพอดีไม่ดีนี่เป็นหลักฐานเพิ่มเติมของผลกระทบตามฤดูกาลที่น้อยมากหรือไม่?

> 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
เนื่องจากข้อมูลของคุณมีการนับฉันคาดหวังความแปรปรวนที่เกี่ยวข้องกับค่าเฉลี่ย โมเดลอนุกรมเวลาปกติไม่ได้คำนึงถึงสิ่งนั้น (อย่างไรก็ตามคุณอาจลองพูดถึงการเปลี่ยนแปลงบางทีFreeman-Tukeyพูด) หรือคุณอาจดูรูปแบบอนุกรมเวลาที่ออกแบบมาเพื่อนับข้อมูล (หากคุณไม่ทำเช่นนี้มันอาจไม่ใช่ปัญหาใหญ่เนื่องจากจำนวนจะมีเพียงแค่ช่วงของสองหรือมากกว่านั้น)
Glen_b

1
Yเสื้อμเสื้อvar(Yเสื้อ)=μเสื้อ

คำตอบ:


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

cos(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 Poisson พบกับ Fourier .... ฉันคิดว่านักเศรษฐศาสตร์และคนอื่น ๆ เน้นตัวแปรตัวบ่งชี้เพราะฤดูกาลสามารถแหลมได้ แต่วิธีตรีโกณมิติมักจะช่วยได้
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 พร้อมตัวเลือกเริ่มต้นการทดสอบแบบรวมสำหรับฤดูกาลพบว่าไม่มีฤดูกาลตามฤดูกาลที่ระบุได้

แก้ไข (ดู คำตอบนี้และความคิดเห็นของฉันด้านล่างสำหรับคำจำกัดความของฤดูกาลที่ระบุตัวตน )

เมื่อพิจารณาถึงลักษณะของข้อมูลของคุณการวิเคราะห์นี้จะคุ้มค่ากับวิธีการอนุกรมเวลาด้วยแบบจำลองสำหรับข้อมูลนับ (เช่นแบบจำลอง Poisson) และทดสอบความสำคัญของฤดูกาลตามแบบจำลองนั้น การเพิ่มข้อมูลการนับแท็กลงในคำถามของคุณอาจทำให้เกิดมุมมองและคำตอบที่เป็นไปได้มากขึ้นในทิศทางนี้


ขอบคุณ @javiacalle ฉันจะตรวจสอบวิธีการที่คุณแนะนำ ฉันขอถามคุณเกี่ยวกับข้อสรุปของกราฟที่คุณโพสต์ว่ามันคือความจริงที่ว่าแอมพลิจูดจะเพิ่มขึ้นตามความคืบหน้าของปีซึ่งเป็นพื้นฐานของความคิดเห็นของคุณ "เราจะเห็นว่ารูปแบบตามฤดูกาลโดยประมาณไม่เสถียรตลอดเวลา" หรือ รวมถึงการสังเกตที่ลึกซึ้งยิ่งขึ้นว่ารูปร่างของยอดเขาแต่ละจุดแตกต่างกันเล็กน้อย? ฉันเป็นสมมุติอดีต แต่เรารู้ว่าข้อสันนิษฐานนำเราไปที่ไหน
svannoy

2
χ2

@svannoy ข้อสรุปหลักตามวิธีอนุกรมเวลาที่ใช้ในคำตอบของฉันคือไม่มีรูปแบบตามฤดูกาลที่ชัดเจนในข้อมูลตัวอย่าง แม้ว่าวัฏจักรตามฤดูกาลจะอธิบายส่วนหนึ่งของความแปรปรวนของข้อมูล แต่ไม่สามารถระบุรูปแบบตามฤดูกาลได้อย่างน่าเชื่อถือเนื่องจากถูกบดบังด้วยระดับความผันผวนที่ผิดปกติในระดับสูง (สิ่งนี้สามารถตรวจสอบได้ด้วย .
javlacalle

@oDDsKooL ฉันได้ทำการทดสอบไคสแควร์ในวันอาทิตย์แล้ววันเสาร์ / อาทิตย์ก็ต่ำกว่าที่คาดไว้เล็กน้อยและวันจันทร์ / วันอังคารเหนือกว่า ....
svannoy

6

ดังที่ระบุไว้ในความคิดเห็นของฉันนี่เป็นปัญหาที่น่าสนใจมาก การตรวจสอบฤดูกาลไม่ใช่การออกกำลังกายเชิงสถิติเพียงอย่างเดียว แนวทางที่สมเหตุสมผลคือการปรึกษาทฤษฎีและผู้เชี่ยวชาญเช่น:

  • นักจิตวิทยา
  • จิตแพทย์
  • นักสังคมวิทยา

ในปัญหานี้ที่จะเข้าใจ "ทำไม" จะมีฤดูกาลเพื่อเสริมการวิเคราะห์ข้อมูล เมื่อมาถึงข้อมูลฉันใช้วิธีการสลายตัวที่ยอดเยี่ยมที่เรียกว่าunobserved components model (UCM) ซึ่งเป็นรูปแบบวิธีพื้นที่ของรัฐ ดูบทความนี้ที่เข้าถึงได้ง่ายโดย 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;

หลังจากวนซ้ำหลายครั้งเมื่อพิจารณาส่วนประกอบและชุดค่าผสมที่แตกต่างกันฉันสิ้นสุดด้วยรูปแบบที่น่าสมเพชของแบบฟอร์มต่อไปนี้:

มีระดับสุ่ม + ค่าตามฤดูกาล + ค่าผิดปกติบางอย่างและข้อมูลไม่มีคุณสมบัติตรวจจับอื่น ๆ

ป้อนคำอธิบายรูปภาพที่นี่

ด้านล่างคือการวิเคราะห์ความสำคัญขององค์ประกอบต่างๆ โปรดสังเกตว่าฉันใช้ตรีโกณมิติ (นั่นคือบาป / cos ในคำสั่ง seasonality ใน PROC UCM) คล้ายกับ @Elvis และ @Nick Cox คุณสามารถใช้การเข้ารหัสแบบหลอกใน UCM และเมื่อฉันทดสอบทั้งคู่ให้ผลลัพธ์ที่คล้ายกัน ดูเอกสารนี้สำหรับความแตกต่างระหว่างสองวิธีในการสร้างแบบจำลองฤดูกาลใน SAS

ป้อนคำอธิบายรูปภาพที่นี่

ดังที่แสดงไว้ข้างต้นคุณมีค่าผิดปกติ: สองจังหวะและหนึ่งระดับการเปลี่ยนแปลงในปี 2552 (ฟองเศรษฐกิจ / ที่อยู่อาศัยมีบทบาทหลังจากปี 2009 หรือไม่) ซึ่งสามารถอธิบายได้โดยการวิเคราะห์การดำน้ำลึกเพิ่มเติม คุณสมบัติที่ดีในการใช้งานProc UCMคือให้เอาต์พุตกราฟิกที่ยอดเยี่ยม

ด้านล่างคือฤดูกาลและแนวโน้มรวมและพล็อตตามฤดูกาล สิ่งที่เหลืออยู่ในเสียง

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

การทดสอบการวินิจฉัยที่สำคัญมากขึ้นถ้าคุณต้องการใช้ค่า p และการทดสอบที่สำคัญคือการตรวจสอบว่าส่วนที่เหลือของคุณมีรูปแบบน้อยลงและกระจายตามปกติซึ่งเป็นที่พอใจในรูปแบบข้างต้นโดยใช้ UCM และดังที่แสดงด้านล่าง และคนอื่น ๆ.

ป้อนคำอธิบายรูปภาพที่นี่

ข้อสรุป : จากการวิเคราะห์ข้อมูลโดยใช้ UCM และการทดสอบอย่างมีนัยสำคัญข้อมูลดูเหมือนจะมีฤดูกาลและเราเห็นจำนวนผู้เสียชีวิตในฤดูร้อนเดือนพฤษภาคม / มิถุนายน / กรกฎาคมและต่ำสุดในฤดูหนาวเดือนธันวาคมและกุมภาพันธ์

ข้อควรพิจารณาเพิ่มเติม : โปรดพิจารณาความสำคัญของการเปลี่ยนแปลงตามฤดูกาลด้วย หากต้องการลบล้างข้อโต้แย้งที่เกิดขึ้นจริงโปรดปรึกษาผู้เชี่ยวชาญของโดเมนเพื่อเพิ่มเติมและตรวจสอบสมมติฐานของคุณ

ฉันไม่ได้บอกว่านี่เป็นวิธีเดียวที่จะแก้ปัญหานี้ได้ คุณสมบัติที่ฉันชอบเกี่ยวกับ UCM ก็คือมันช่วยให้คุณสามารถกำหนดรูปแบบคุณลักษณะของอนุกรมเวลาได้อย่างชัดเจนและมองเห็นได้ชัดเจนเช่นกัน


ขอบคุณสำหรับคำตอบนี้และความคิดเห็นที่น่าสนใจ ฉันไม่รู้ UCM ดูเหมือนว่าจะน่าสนใจมากฉันจะพยายามจำไว้ ...
Elvis

(+1) การวิเคราะห์ที่น่าสนใจ ฉันจะยังคงระมัดระวังเกี่ยวกับการสรุปการปรากฏตัวของรูปแบบตามฤดูกาลที่กำหนดอย่างมีนัยสำคัญ แต่ผลลัพธ์ของคุณเรียกร้องให้มองลึกเข้าไปในความเป็นไปได้นี้ Canova และแฮนเซนทดสอบเพื่อความมั่นคงตามฤดูกาลอาจจะเป็นประโยชน์ก็จะอธิบายตัวอย่างที่นี่
javlacalle

gretlπ/6

1
+1 ความคิดเห็นที่น่าสนใจและเป็นประโยชน์มากมาย ในรายการนักจิตวิทยาจิตแพทย์นักสังคมวิทยาสามารถเพิ่มนักอุตุนิยมวิทยา / นักอุตุนิยมวิทยา บุคคลดังกล่าวต้องการเพิ่มว่าไม่มีสองปีเหมือนกันในสายฝนและอุณหภูมิ ฉันจะเดาอย่างหยาบคายที่ซึมเศร้ามากขึ้นในฤดูหนาว (ความยาววันที่สั้นกว่า ฯลฯ ) แต่ก็มากสำหรับการเดาที่ให้ข้อมูลบางอย่าง
Nick Cox

ขอบคุณ @forecaster สิ่งนี้ช่วยเพิ่มการเรียนรู้ของฉัน ฉันเป็นนักจิตวิทยาที่มีระดับสาธารณสุข ฉันจะเพิ่มนักระบาดวิทยาลงในรายการของคุณ อย่างที่ฉันพูดถึงในตอนแรกมีตำนานมากมายเกี่ยวกับแนวโน้มตามฤดูกาลและการฆ่าตัวตาย เราสามารถสร้างข้อโต้แย้งที่แข็งแกร่งสำหรับแนวโน้มตามฤดูกาลในทุกทิศทางดังนั้นเราจึงต้องการการวิเคราะห์เชิงปริมาณเพื่อยืนยัน (dis) จากมุมมองด้านสาธารณสุขถ้าเราพบความไม่ต่อเนื่องที่คมชัดเราสามารถกำหนดเป้าหมายการแทรกแซงได้ ฉันไม่เห็นข้อมูลนี้ จากมุมมองของทฤษฎีการฆ่าตัวตายการยืนยันแม้แต่แนวโน้มเล็ก ๆ ก็สามารถแจ้งการพัฒนาทฤษฎีได้
svannoy

1

สำหรับการประมาณค่าภาพเบื้องต้นสามารถใช้กราฟต่อไปนี้ พล็อตข้อมูลรายเดือนด้วยเส้นโค้งเหลืองและช่วงความเชื่อมั่น 95% ปรากฏว่ามีจุดสูงสุดในช่วงกลางปีเมื่อเดือนมิถุนายน ปัจจัยอื่น ๆ อาจทำให้ข้อมูลมีการกระจายกว้างดังนั้นแนวโน้มตามฤดูกาลอาจถูกปกปิดในโครงร่างข้อมูลดิบนี้ จุดข้อมูลได้รับการกระวนกระวายใจ

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข: พล็อตต่อไปนี้แสดงเส้นโค้งเหลืองและช่วงความมั่นใจสำหรับการเปลี่ยนจำนวนเคสจากจำนวนในเดือนก่อนหน้า:

ป้อนคำอธิบายรูปภาพที่นี่

นี่ก็แสดงให้เห็นว่าในช่วงหลายเดือนในครึ่งแรกของปีจำนวนผู้ป่วยเพิ่มขึ้นเรื่อย ๆ ขณะที่พวกเขากำลังตกในช่วงครึ่งปีหลัง นอกจากนี้ยังแนะนำจุดสูงสุดในช่วงกลางปี อย่างไรก็ตามช่วงความเชื่อมั่นนั้นกว้างและข้าม 0 นั่นคือไม่มีการเปลี่ยนแปลงตลอดทั้งปีซึ่งบ่งบอกถึงการขาดความสำคัญทางสถิติ

ความแตกต่างของจำนวนเดือนสามารถเปรียบเทียบกับค่าเฉลี่ยของ 3 เดือนก่อนหน้า:

ป้อนคำอธิบายรูปภาพที่นี่

นี่แสดงให้เห็นว่าตัวเลขที่เพิ่มขึ้นอย่างชัดเจนในเดือนพฤษภาคมและการลดลงในเดือนตุลาคม


(-1) มีคำตอบที่มีคุณภาพสูงสำหรับคำถามนี้อยู่สามข้อ คำตอบของคุณยังไม่ตอบคำถามที่โพสต์ - คุณสามารถโพสต์เป็นความคิดเห็นได้ คุณไม่ได้ให้คำตอบว่าจะวิเคราะห์ข้อมูลนี้อย่างไร
ทิม

ฉันเคยโพสต์ความคิดเห็นไว้ที่นี่ (ดูคำถามด้านล่าง) แต่ฉันไม่สามารถโพสต์ตัวเลขในความคิดเห็นได้
rnso

แม้ว่าฉันจะเข้าใจบทบรรณาธิการที่นี่ฉันจะบอกว่า @rnso ได้จัดทำกราฟที่ดีซึ่งแสดงให้เห็นถึงองค์ประกอบตามฤดูกาลที่น่าจะเป็นและควรเป็นส่วนหนึ่งของโพสต์ต้นฉบับของฉัน
svannoy

ฉันเข้าใจและยอมรับ แต่ก็ยังไม่ใช่คำตอบ แต่เป็นความคิดเห็นหรือการปรับปรุง @rnso จะแนะนำให้คุณผ่านความคิดเห็นที่คุณสามารถดูหรือรวมถึงพล็อตดังกล่าว
ทิม

@Glen_b, @ Tim: ฉันได้เพิ่มพล็อตอื่นที่อาจเป็นประโยชน์และฉันไม่สามารถใส่ความคิดเห็นได้
rnso
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.