ทรัพยากรสำหรับการวิเคราะห์อนุกรมเวลาที่ขัดจังหวะใน R


12

ฉันค่อนข้างใหม่สำหรับอาร์ฉันได้พยายามอ่านการวิเคราะห์อนุกรมเวลาและเสร็จสิ้นแล้ว

  1. Shumway และ Stoffer ของการวิเคราะห์อนุกรมเวลาและการประยุกต์ใช้ 3rd Edition ,
  2. การพยากรณ์ที่ยอดเยี่ยมของ Hyndman : หลักการและการปฏิบัติ
  3. Avril Coghlan ใช้ R สำหรับการวิเคราะห์อนุกรมเวลา
  4. A. Ian McLeod และคณะการวิเคราะห์อนุกรมเวลาด้วย R
  5. การวิเคราะห์อนุกรมเวลาของ Dr. Marcel Dettling

แก้ไข: ฉันไม่แน่ใจว่าจะจัดการอย่างไร แต่ฉันพบทรัพยากรที่มีประโยชน์นอกการตรวจสอบความถูกต้องของ Cross ฉันต้องการที่จะรวมไว้ที่นี่ในกรณีที่ทุกคนสะดุดกับคำถามนี้

การวิเคราะห์การถดถอยแบบแบ่งกลุ่มของการศึกษาอนุกรมเวลาแบบขัดจังหวะในการวิจัยการใช้ยา

ฉันมีอนุกรมเวลาแบบไม่แปรตามจำนวนรายการที่ใช้ (นับข้อมูล) ที่วัดทุกวันเป็นเวลา 7 ปี การแทรกแซงถูกนำไปใช้กับประชากรที่ศึกษาประมาณช่วงกลางของอนุกรมเวลา การแทรกแซงนี้ไม่ได้คาดหวังว่าจะให้ผลทันทีและระยะเวลาของการโจมตีของผลกระทบนั้นเป็นสิ่งที่ไม่สามารถเข้าใจได้

ใช้ Hyndman ของforecastแพคเกจผมได้ติดตั้งรูปแบบ ARIMA auto.arima()ข้อมูลก่อนการแทรกแซงโดยใช้ แต่ฉันไม่แน่ใจว่าจะใช้แบบนี้เพื่อตอบว่ามีการเปลี่ยนแปลงอย่างมีนัยสำคัญทางสถิติในแนวโน้มและปริมาณจำนวน

# for simplification I will aggregate to monthly counts
# I can later generalize any teachings the community supplies
count <- c(2464, 2683, 2426, 2258, 1950, 1548, 1108,  991, 1616, 1809, 1688, 2168, 2226, 2379, 2211, 1925, 1998, 1740, 1305,  924, 1487, 1792, 1485, 1701, 1962, 2896, 2862, 2051, 1776, 1358, 1110,  939, 1446, 1550, 1809, 2370, 2401, 2641, 2301, 1902, 2056, 1798, 1198,  994, 1507, 1604, 1761, 2080, 2069, 2279, 2290, 1758, 1850, 1598, 1032,  916, 1428, 1708, 2067, 2626, 2194, 2046, 1905, 1712, 1672, 1473, 1052,  874, 1358, 1694, 1875, 2220, 2141, 2129, 1920, 1595, 1445, 1308, 1039,  828, 1724, 2045, 1715, 1840)
# for explanatory purposes
# month <- rep(month.name, 7)
# year <- 1999:2005
ts <- ts(count, start(1999, 1))
train_month <- window(ts, start=c(1999,1), end = c(2001,1))
require(forecast)
arima_train <- auto.arima(train_month)
fit_month <- Arima(train_month, order = c(2,0,0), seasonal = c(1,1,0), lambda = 0)
plot(forecast(fit_month, 36)); lines(ts, col="red")

มีทรัพยากรใดบ้างที่เกี่ยวข้องกับการวิเคราะห์อนุกรมเวลาแบบขัดจังหวะใน R หรือไม่? ฉันได้พบนี้จัดการกับในโปรแกรม SPSS แต่ฉันยังไม่ได้สามารถที่จะแปลนี้ที่อาร์


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

@StephanKolassa แน่นอน! จุดมุ่งหมายของฉันคือการอนุมาน ฉันจะให้ข้อมูลดัมมี่ในการแก้ไขเพื่อแสดงจุดของฉันได้ดียิ่งขึ้น
dais.johns

@StephanKolassa Data ให้ดีที่สุดในความสามารถของฉัน
dais.johns

การวิจัยก่อนหน้าแสดงให้เห็นว่าการแทรกแซงส่งผลกระทบต่อการเปลี่ยนแปลงของระดับ +/- 5%
dais.johns

@StephanKolassa ให้ข้อมูลที่ใช้งานได้จริง
dais.johns

คำตอบ:


4

สิ่งนี้เรียกว่าการวิเคราะห์จุดเปลี่ยน แพ็คเกจ R changepointสามารถทำได้เพื่อคุณ: ดูเอกสารประกอบที่นี่ (รวมถึงการอ้างอิงถึงวรรณกรรม): http://www.lancs.ac.uk/~killick/Pub/KillickEckley2011.pdf


ขอบคุณ. ฉันกำลังมองหาสิ่งนี้ เท่าที่ฉันสามารถบอกได้สิ่งนี้จะคำนวณจุดเปลี่ยนที่เป็นไปได้ในซีรีส์ แต่จะไม่วิเคราะห์ความแตกต่างของแนวโน้ม ฉันขอโทษถ้าข้อสันนิษฐานนี้ไม่ถูกต้องฉันไม่สามารถตรวจสอบแพ็กเกจอื่นนอกเหนือจากผิวเผิน
dais.johns

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

ขอบคุณสำหรับคำแนะนำของคุณฉันจะพยายามนำไปใช้และจะทำเครื่องหมายว่า "ตอบแล้ว" หากวิธีนี้ช่วยแก้ปัญหาได้
dais.johns

2

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


0

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

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

# Fit the change point model
library(mcp)
model_full = list(
  count ~ 1 + ar(1),  # intercept and AR(1)
  ~ 1  # New intercept
)
fit_full = mcp(model_full, data = df, family = poisson(), par_x = "year")


# Fit the null model
model_null = list(
  count ~ 1 + ar(1)  # just a stable AR(1)
)
fit_null = mcp(model_null, data = df, family = poisson(), par_x = "year")

# Compare predictive performance using LOO cross-validation
fit_full$loo = loo(fit_full)
fit_null$loo = loo(fit_null)
loo::loo_compare(fit_full$loo, fit_null$loo)

สำหรับชุดข้อมูลปัจจุบันผลลัพธ์นี้จะอยู่ใน

       elpd_diff se_diff
model2    0.0       0.0 
model1 -459.1      64.3 

คือelpd_diff/se_diffอัตราส่วนประมาณ 7 ในความโปรดปรานของรูปแบบโมฆะ (ไม่มีการเปลี่ยนแปลง) การปรับปรุงที่เป็นไปได้รวมถึง:

  • การสร้างแบบจำลองแนวโน้มระยะใช้หรือsin()cos()
  • prior = list(cp_1 = dnorm(1999.8, 0.5)เพิ่มข้อมูลก่อนเกี่ยวกับสถานที่ที่มีแนวโน้มของการเปลี่ยนแปลงเช่น

อ่านเพิ่มเติมเกี่ยวกับการสร้างแบบจำลอง autoregression ทำเปรียบเทียบรูปแบบและการตั้งค่าไพรเออร์เว็บไซต์ การเปิดเผยข้อมูล: ผมพัฒนาของmcpmcp

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