รูปแบบประวัติเหตุการณ์แบบไม่ต่อเนื่อง (การอยู่รอด) ใน R


10

ฉันกำลังพยายามปรับโมเดลที่ไม่ต่อเนื่องใน R แต่ฉันไม่แน่ใจว่าจะทำอย่างไร

ฉันได้อ่านแล้วว่าคุณสามารถจัดระเบียบตัวแปรตามในแถวต่างกันหนึ่งตัวสำหรับแต่ละการสังเกตเวลาและการใช้glmฟังก์ชั่นที่มีลิงค์ logit หรือ cloglog ในแง่นี้ฉันมีสามคอลัมน์: ID, Event(1 หรือ 0 ในแต่ละช่วงเวลา) และTime Elapsed(ตั้งแต่จุดเริ่มต้นของการสังเกต) รวมทั้ง covariates อื่น ๆ

ฉันจะเขียนรหัสเพื่อให้พอดีกับรุ่นได้อย่างไร ตัวแปรตามคืออะไร ฉันเดาว่าฉันสามารถใช้Eventเป็นตัวแปรตามและรวมTime Elapsedอยู่ใน covariates แต่สิ่งที่เกิดขึ้นกับID? ฉันต้องการมันไหม

ขอบคุณ


เมื่อคุณพูดว่า "ฉันกำลังพยายามทำให้พอดีกับเวลาแบบไม่ต่อเนื่อง" ... คุณต้องการให้แบบอะไร? (หากเป็นในบางเรื่องโปรดเพิ่มself-studyแท็ก)
Glen_b

ฉันต้องการให้พอดีกับรูปแบบการอยู่รอดแบบไม่ต่อเนื่อง logit
Fran Villamil

1
ดูเหมือนว่าไม่น่าจะเป็น ID ที่เกี่ยวข้อง แต่ขึ้นอยู่กับว่ามันหมายถึงอะไรและเป็นสิ่งที่คุณต้องการสร้างแบบจำลองหรือไม่
Glen_b -Reinstate Monica

คำตอบ:


8

คุณถูกต้องเกี่ยวกับการจัดระเบียบข้อมูล หากคุณมีกรณีที่เป็นระเบียบเช่นนี้:

ID M1 M2 M3 EVENT

คุณอาจต้องการจัดระเบียบข้อมูลใหม่เพื่อให้มีลักษณะดังนี้:

ID TIME EVENT
1  1    0
1  2    1
1  3    1
2  1    0
2  2    0
.  .    .
.  .    .

ฉันเรียกสิ่งนี้ว่าการแปลงจากรูปแบบกว้างเป็นรูปแบบยาว มันทำได้อย่างง่ายดายใน R โดยใช้reshape()ฟังก์ชั่นหรือง่ายยิ่งขึ้นกับreshape2แพคเกจ

โดยส่วนตัวแล้วฉันจะเก็บIDฟิลด์ไว้เพื่อใช้ในการระบุแหล่งที่มาของความแปรปรวนในโมเดลเอฟเฟกต์ผสม แต่สิ่งนี้ไม่จำเป็น (ตามที่ระบุโดย @BerndWeiss) สมมติว่าคุณต้องการทำสิ่งต่อไปนี้ ถ้าไม่พอดีกับรุ่นที่คล้ายกันglm(...,family=binomial)โดยไม่มีเงื่อนไขเอฟเฟกต์แบบสุ่ม

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

require(lme4)
ans <- glmer(EVENT ~ TIME + (1+TIME|ID), data=df, family=binomial)

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

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

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

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


4
คุณไม่จำเป็นต้องใช้ "แบบจำลองการถดถอยโลจิสติกเอฟเฟ็กต์เอฟเฟ็กต์" เพื่อประเมินรูปแบบเวลาไม่ต่อเนื่องแบบง่าย (Fiona Steel ได้ตีพิมพ์บทความเกี่ยวกับ " การวิเคราะห์ประวัติเหตุการณ์แบบไม่ต่อเนื่องหลายระดับ ") คุณมีข้อมูลอ้างอิงหรือไม่? ในขั้นตอนการเตรียมข้อมูลฉันขอแนะนำให้ดูฟังก์ชั่นsurvSplit
Bernd Weiss

6

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

สำหรับบทหนังสือส่วนใหญ่จะมีรหัสตัวอย่าง R (ดูบทที่ 11ff) ที่แสดงให้เห็นว่าข้อมูลของคุณจะต้องมีโครงสร้างอย่างไร ("รูปแบบระยะเวลาของบุคคล") และวิธีการวิเคราะห์ข้อมูลประเภทนั้น สำหรับโมเดล discrete-time มาตรฐานคุณไม่ต้องการตัวแปร ID และคุณไม่จำเป็นต้องประเมินโมเดลเอฟเฟกต์ผสมตามที่แนะนำโดย @ndoogan glm(event ~ time + ..., family = "binomial")งานง่าย ๆก็โอเค นักร้องและวิลเล็ตต์ยังหารือเกี่ยวกับปัญหาหลายอย่างเกี่ยวกับวิธีการสร้างแบบจำลองตัวแปรเวลา (เชิงเส้น, กำลังสอง, ... )

หากต้องการอ้างอิงข้อมูลอ้างอิงอีกสองรายการที่ฉันขอแนะนำ:


1

คุณสามารถแบ่งเวลาออกเป็นช่วงเวลาและดำเนินการรูปแบบ multiperiode logit ในขณะที่Shumway (2001) เช่นคุณเป็นช่วงเวลา(0,1],(1,2],.... ฉันใช้สิ่งนี้ในdynamichazard::static_glmR ซึ่งสามารถนำไปใช้ได้โดยตรงหากคุณมีข้อมูลเริ่มต้นในการตั้งค่าเหตุการณ์หยุดทั่วไปที่ใช้ในการวิเคราะห์การเอาตัวรอด โปรดสังเกตว่า t-stats จากโมเดลผลลัพธ์ไม่ได้มีการแก้ไขที่กล่าวถึงใน Shumway (2001)

วิธีการนี้จะแตกต่างจากที่ @ndoogan dynamichazard::static_glmกับหุ่นเวลาที่คุณจะได้รับหนึ่งที่ตัดในทุกช่วงเวลาด้วย อย่างไรก็ตามคุณสามารถรับหุ่นแต่ละงวดโดยการเรียกdynamichazard::get_survival_case_weights_and_dataด้วยอาร์กิวเมนต์use_weights = FALSEเพิ่มตัวบ่งชี้หุ่นเวลาตัวเองให้กลับมาแล้วโทรเช่นdata.frameglm


นอกจากนี้คุณอาจจะสนใจในบทความนี้dynamichazardในแพคเกจของฉัน
Benjamin Christoffersen

0

สิ่งนี้เรียกว่าข้อมูล "กระบวนการนับ" แพคเกจการอยู่รอดมีฟังก์ชัน tmerge () ที่ดีมาก มันมีประโยชน์มากในการแทรกเวลาขึ้นอยู่กับหรือ covariates สะสมและเวลาติดตามพาร์ทิชันตามลำดับ กระบวนการนี้อธิบายได้เป็นอย่างดีในบทความนี้

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