ความน่าจะเป็นข้อมูลสูงสุดสำหรับข้อมูลที่หายไปใน R


18

บริบท : การถดถอยตามลำดับชั้นด้วยข้อมูลที่ขาดหายไปบางส่วน

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

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


1
คุณถือว่าWinBugs แล้วหรือยัง? มันจัดการข้อมูลที่หายไปในลักษณะที่เป็นธรรมชาติอย่างสวยงาม
Mike Dunlavey

อีกทางเลือกหนึ่งสำหรับ WinBUGS คือ OpenBUGS หรือ STAN สิ่งเหล่านี้ควรเป็นมิตรกับ Mac มากกว่า
Maxim.K

คำตอบ:


15

เครดิตของคำตอบนี้ไปที่@Joshuaผู้ให้คำตอบที่ยอดเยี่ยมเมื่อฉันโพสต์คำถามนี้ไปยังชุมชน R และสถิติใน Google+ ฉันเพียงแค่วางคำตอบของเขาด้านล่าง

สำหรับการรันการถดถอย (ไม่มีการสร้างแบบจำลองตัวแปรแฝง) โปรดอ่านบันทึกของฉันที่พิมพ์หลังข้อความที่ยกมา

การจัดการข้อมูลที่ขาดหายไปด้วยความน่าจะเป็นสูงสุดในข้อมูลที่มีอยู่ทั้งหมด (เรียกว่า FIML) เป็นเทคนิคที่มีประโยชน์มาก อย่างไรก็ตามมีจำนวนของภาวะแทรกซ้อนที่ทำให้มันท้าทายที่จะใช้ในลักษณะทั่วไป พิจารณาโมเดลการถดถอยเชิงเส้นอย่างง่ายโดยทำนายผลต่อเนื่องตั้งแต่อายุเพศและประเภทอาชีพ ใน OLS คุณไม่ต้องกังวลเกี่ยวกับการกระจายของอายุเพศและอาชีพเพียง แต่ผลลัพธ์เท่านั้น โดยทั่วไปแล้วสำหรับการพยากรณ์หมวดหมู่พวกเขาจะหลอกตารหัส (0/1) ในการใช้ ML จะต้องใช้สมมติฐานการกระจายสำหรับตัวแปรทั้งหมดที่มีการหายไป โดยวิธีที่ง่ายที่สุดคือ multivariate normal (MVN) นี่คือสิ่งที่ตัวอย่างเช่น Mplus จะทำตามค่าเริ่มต้นหากคุณไม่ออกนอกเส้นทางของคุณเพื่อประกาศประเภทของตัวแปร (เช่นหมวดหมู่) ในตัวอย่างง่ายๆที่ฉันให้ คุณอาจต้องการสมมติว่าเป็นเรื่องปกติสำหรับอายุเบอร์นูลลีสำหรับเพศและมัลตินิมอลสำหรับประเภทงาน อันหลังนั้นมีเล่ห์เหลี่ยมเพราะสิ่งที่คุณมีคือตัวแปรไบนารีหลายตัว แต่คุณไม่ต้องการที่จะปฏิบัติต่อพวกมันในฐานะเบอร์นูลี นี่หมายความว่าคุณไม่ต้องการทำงานกับตัวแปรหลอกตาคุณต้องทำงานกับตัวแปรหมวดหมู่จริงเพื่อให้ตัวประมาณค่า ML สามารถใช้ Multinomial ได้อย่างเหมาะสม แต่สิ่งนี้หมายความว่ากระบวนการสร้างรหัสจำลองต้องถูกสร้างขึ้นในโมเดล ไม่ใช่ข้อมูล ชีวิตที่ซับซ้อนอีกครั้ง นอกจากนี้การกระจายข้อต่อของตัวแปรแบบต่อเนื่องและหมวดหมู่นั้นไม่จำเป็นต้องคำนวณ (เมื่อฉันพบปัญหาเช่นนี้ใน Mplus มันจะเริ่มแบ่งและต่อสู้อย่างรวดเร็ว) สุดท้ายคุณควรระบุกลไกข้อมูลที่หายไป ในสไตล์ SEM, FIML ตัวแปรทั้งหมดมีเงื่อนไขเป็นอย่างอื่นสำหรับคนอื่น ๆ ทั้งหมด แต่สิ่งนี้ไม่ถูกต้อง ตัวอย่างเช่นบางทีอายุอาจหายไปเนื่องจากฟังก์ชั่นไม่ใช่เพศและประเภทอาชีพ แต่เป็นการโต้ตอบ ปฏิสัมพันธ์อาจไม่สำคัญสำหรับผลลัพธ์ที่โฟกัส แต่ถ้ามันสำคัญสำหรับการหายไปตามอายุจากนั้นก็จะต้องอยู่ในรูปแบบไม่จำเป็นต้องเป็นรูปแบบที่สำคัญที่น่าสนใจ แต่รูปแบบข้อมูลที่ขาดหายไป

ลาวาจะใช้ ML สำหรับ MVN แต่ปัจจุบันฉันเชื่อว่าตัวเลือกข้อมูลหมวดหมู่มี จำกัด (อีกครั้งมาจากฟิลด์ SEM นี่เป็นมาตรฐาน) การใส่ความหลายแบบนั้นดูไม่ค่อยสง่างามในตอนแรกเพราะมันทำให้เกิดข้อสันนิษฐานที่ซ่อนอยู่มากมายหลัง FIML (เช่นการตั้งสมมติฐานแบบกระจายสำหรับตัวแปรทุกตัว อย่างไรก็ตามมันช่วยให้คุณควบคุมได้มากและคิดอย่างชัดเจนเกี่ยวกับการกระจายตัวของตัวแปรแต่ละตัวและกลไกข้อมูลที่ขาดหายไปที่ดีที่สุดสำหรับแต่ละตัวแปรนั้นมีค่า

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

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

ซึ่งหมายความว่าหากตัวแปรทั้งหมดที่ขาดหายไปนั้นต่อเนื่องlavaanแพคเกจการสร้างแบบจำลองสมการโครงสร้าง (SEM) เป็นสิ่งที่ดีที่จะใช้สำหรับ FIML ใน R

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

  • วิธีปกติกับการใส่หลาย
  • ในสไตล์ SEM ด้วยลาวาโดยใช้ FIML

ฉันขาดสิ่งต่างๆมากมายด้วยการถดถอยในสไตล์ SEM ทั้งสองรูปแบบให้ค่าสัมประสิทธิ์ที่คล้ายกันและ R กำลังสอง แต่ในรูปแบบ SEM ฉันไม่ได้รับการทดสอบอย่างมีนัยสำคัญของการถดถอย (ค่า F ทั่วไปกับ df) แทนฉันได้ดัชนีพอดีที่ไม่เป็นประโยชน์เพราะฉันใช้องศาจนหมด ของเสรีภาพ เมื่อรุ่นหนึ่งมี R2 ใหญ่กว่าอีกรุ่นหนึ่งฉันไม่สามารถหาวิธีเปรียบเทียบว่าความแตกต่างนั้นสำคัญหรือไม่ นอกจากนี้การทำการถดถอยด้วยวิธีปกติจะช่วยให้สามารถเข้าถึงการทดสอบกลุ่มต่างๆสำหรับสมมติฐานการถดถอยที่มีค่ายิ่ง สำหรับคำตอบรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ดูคำถามอื่น ๆ ของฉันที่ได้รับการตอบเป็นอย่างดีโดย@StasK

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


1

เกี่ยวกับคำถาม FIML ของคุณฉันคิดว่าฉันจะแบ่งปันกระดาษ SAS ที่ยอดเยี่ยมนี้โดย Paul Allison http://www.statisticalhorizons.com/wp-content/uploads/MissingDataByML.pdf

ได้รับความคิดเห็นที่ทำโดยพอลอัลลิสันหนึ่งสามารถใช้ขั้นตอนเดียวกันใน R โดยใช้ lme หรือ nlmer


-3

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

วิธีที่สองนี้เรียกว่า Data imputation และมีแพ็กเกจ R หลายตัวที่ทำเช่นนั้น หนึ่งในนั้นเรียกว่า mclust และฟังก์ชั่นที่คุณต้องการเรียกว่า imputeData ฟังก์ชันนี้ใช้อัลกอริทึม EM (การเพิ่มความคาดหวัง) เพื่อประเมินพารามิเตอร์ของส่วนที่ไม่ได้ตรวจสอบของชุดข้อมูล เมื่อพบพารามิเตอร์แล้วจุดข้อมูลใหม่จะถูกสร้างขึ้น สมมติฐานการกระจายของข้อมูลที่หายไปข้อมูลที่สังเกตและชุดข้อมูลทั้งหมดจะถือว่าเป็นแบบเกาส์เซียน

หวังว่าคำอธิบายนี้จะช่วยให้คุณบรรลุสิ่งที่คุณพยายามทำ


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

ฟังก์ชันความน่าจะเป็นไม่ได้ถูกกำหนดไว้เมื่อตัวอย่าง x หายไป ดังนั้นฉันคิดว่าคุณอาจกำลังค้นหาสิ่งที่ไม่มีอยู่
Lalas

2
ดูกระดาษนี้สำหรับคำอธิบายของการใช้วิธีการโอกาสสูงสุดในการสูญหายของข้อมูล ( Allison, 2012 ) สิ่งที่ OP อธิบายมีอยู่
Andy W

2
และนี่คือบางสิ่งจาก SAS เกี่ยวกับมัน support.sas.com/documentation/cdl/th/statug/63347/HTML/default/ …ฉันไม่เคยเห็นอะไรเลยใน R.
Jeremy Miles

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