การใส่ข้อมูลหลายครั้งสำหรับข้อมูลการนับที่ขาดหายไปในอนุกรมเวลาจากการศึกษาแบบพาเนล


9

ฉันกำลังพยายามที่จะจัดการกับปัญหาที่เกี่ยวข้องกับการใส่ข้อมูลที่หายไปจากการศึกษาข้อมูลแบบพาเนล (ไม่แน่ใจว่าฉันกำลังใช้ 'การศึกษาข้อมูลแบบพาเนล' อย่างถูกต้อง - อย่างที่ฉันได้เรียนรู้ในวันนี้) ถึงปี 2009 ตลอดทั้งเดือนชายและหญิงสำหรับ 8 อำเภอที่แตกต่างกันและสำหรับกลุ่มอายุ 4 ขวบ

ชื่อไฟล์มีลักษณะดังนี้:

         District  Gender Year Month    AgeGroup TotalDeaths
         Northern    Male 2006    11        01-4           0
         Northern    Male 2006    11       05-14           1
         Northern    Male 2006    11         15+          83
         Northern    Male 2006    12           0           3
         Northern    Male 2006    12        01-4           0
         Northern    Male 2006    12       05-14           0
         Northern    Male 2006    12         15+         106
         Southern  Female 2003     1           0           6
         Southern  Female 2003     1        01-4           0
         Southern  Female 2003     1       05-14           3
         Southern  Female 2003     1         15+         136
         Southern  Female 2003     2           0           6
         Southern  Female 2003     2        01-4           0
         Southern  Female 2003     2       05-14           1
         Southern  Female 2003     2         15+         111
         Southern  Female 2003     3           0           2
         Southern  Female 2003     3        01-4           0
         Southern  Female 2003     3       05-14           1
         Southern  Female 2003     3         15+         141
         Southern  Female 2003     4           0           4

สำหรับ 10 เดือนที่แพร่กระจายไปทั่วปี 2550 และ 2551 จำนวนผู้เสียชีวิตทั้งหมดจากทุกอำเภอไม่ได้ถูกบันทึกไว้ ฉันพยายามประเมินค่าที่หายไปเหล่านี้ผ่านวิธีการใส่ข้อมูลหลายวิธี ไม่ว่าจะใช้โมเดลเชิงเส้นทั่วไปหรือรุ่น SARIMA

ปัญหาที่ใหญ่ที่สุดของฉันคือการใช้ซอฟต์แวร์และการเข้ารหัส ฉันถามคำถามเกี่ยวกับ Stackoverflow ที่ฉันต้องการแยกข้อมูลออกเป็นกลุ่มเล็ก ๆ เช่นนี้

         District  Gender Year Month    AgeGroup TotalDeaths
         Northern    Male 2003     1        01-4           0
         Northern    Male 2003     2        01-4           1
         Northern    Male 2003     3        01-4           0
         Northern    Male 2003     4        01-4           3
         Northern    Male 2003     5        01-4           4
         Northern    Male 2003     6        01-4           6
         Northern    Male 2003     7        01-4           5
         Northern    Male 2003     8        01-4           0
         Northern    Male 2003     9        01-4           1
         Northern    Male 2003    10        01-4           2
         Northern    Male 2003    11        01-4           0
         Northern    Male 2003    12        01-4           1
         Northern    Male 2004     1        01-4           1
         Northern    Male 2004     2        01-4           0

กำลังจะ

         Northern    Male 2006    11        01-4           0
         Northern    Male 2006    12        01-4           0

แต่มีคนแนะนำว่าฉันควรนำคำถามของฉันมาที่นี่ - อาจจะถามหาทิศทาง? ขณะนี้ฉันไม่สามารถป้อนข้อมูลนี้เป็นชุดเวลา / แผงการศึกษาที่เหมาะสมในอาร์ในที่สุดเป้าหมายของฉันคือการใช้ข้อมูลนี้และamelia2แพคเกจที่มีฟังก์ชั่นที่จะระบุว่าขาดหายไปTotalDeathsในเดือน 2550 และ 2551 หายไป

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

ถ้านี้จะช่วยให้ฉันพยายามที่จะปฏิบัติตามวิธีการที่คล้ายกับสิ่งที่คลินต์โรเบิร์ตได้ในปริญญาเอกวิทยานิพนธ์

แก้ไข:

หลังจากสร้างตัวแปร 'time' และ 'group' ตามที่แนะนำโดย @Matt:

> head(dat)
     District Gender Year Month AgeGroup Unnatural Natural Total time                    group
1 Khayelitsha Female 2001     1        0         0       6     6    1     Khayelitsha.Female.0
2 Khayelitsha Female 2001     1     01-4         1       3     4    1  Khayelitsha.Female.01-4
3 Khayelitsha Female 2001     1    05-14         0       0     0    1 Khayelitsha.Female.05-14
4 Khayelitsha Female 2001     1     15up         8      73    81    1  Khayelitsha.Female.15up
5 Khayelitsha Female 2001     2        0         2       9    11    2     Khayelitsha.Female.0
6 Khayelitsha Female 2001     2     01-4         0       2     2    2  Khayelitsha.Female.01-4

ตามที่คุณสังเกตเห็นว่ามีรายละเอียดเพิ่มเติมที่เป็น 'ธรรมชาติ' และ 'ไม่เป็นธรรมชาติ'

คำตอบ:


10

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

ดูเหมือนกับว่าคุณมีหน่วยงานซึ่งเป็นกลุ่มตำบลเพศอายุกลุ่มที่สังเกตได้ในระดับรายเดือน ขั้นแรกคุณต้องสร้างตัวแปรปัจจัยสำหรับแต่ละประเภทของหน่วย (นั่นคือระดับหนึ่งสำหรับแต่ละอำเภอ - เพศ - อายุกลุ่ม) เรียกสิ่งนี้groupว่า จากนั้นคุณจะต้องใช้ตัวแปรเป็นระยะเวลาซึ่งอาจเป็นจำนวนเดือนตั้งแต่เดือนมกราคม 2003 ดังนั้นตัวแปรนี้จะเป็น 13 ในเดือนมกราคมของปี 2004 เรียกตัวแปรtimeนี้ อะมีเลียจะอนุญาตให้คุณใส่ร้ายตามแนวโน้มเวลาด้วยคำสั่งต่อไปนี้:

library(Amelia)
a.out <- amelia(my.data, ts = "time", cs = "group", splinetime = 2, intercs = TRUE)

tsและcsข้อโต้แย้งเพียงแสดงเวลาและหน่วยตัวแปร splinetimeชุดอาร์กิวเมนต์วิธีการที่มีความยืดหยุ่นควรเวลานำมาใช้เพื่อใส่ร้ายข้อมูลที่ขาดหายไป ที่นี่ 2 หมายถึงการใส่ความยาวจะใช้ฟังก์ชันกำลังสองของเวลา แต่ค่าที่สูงขึ้นจะมีความยืดหยุ่นมากขึ้น intercsอาร์กิวเมนต์ที่นี่บอก Amelia ใช้เวลาแนวโน้มแยกต่างหากสำหรับแต่ละอำเภอเพศ ageGroup สิ่งนี้จะเพิ่มพารามิเตอร์จำนวนมากให้กับโมเดลดังนั้นหากคุณประสบปัญหาคุณสามารถตั้งค่านี้FALSEเป็นลองแก้จุดบกพร่อง

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

แก้ไข: วิธีสร้างตัวแปรกลุ่ม / เวลา

ตัวแปรเวลาอาจเป็นวิธีที่ง่ายที่สุดในการสร้างเพราะคุณเพียงแค่ต้องนับจากปี 2002 (สมมติว่าเป็นปีที่ต่ำที่สุดในข้อมูลของคุณ):

my.data$time <- my.data$Month + 12 * (my.data$Year - 2002)

ตัวแปรกลุ่มยากขึ้นเล็กน้อย แต่วิธีที่รวดเร็วในการใช้คำสั่ง paste:

my.data$group <- with(my.data, 
                      as.factor(paste(District, Gender, AgeGroup, sep = ".")))

ด้วยการสร้างตัวแปรเหล่านี้คุณต้องการลบตัวแปรดั้งเดิมออกจากการใส่ความ ในการทำเช่นนั้นคุณสามารถใช้idvarsอาร์กิวเมนต์:

a.out <- amelia(my.data, ts = "time", cs = "group", splinetime = 2, intercs = TRUE,
                idvars = c("District", "Gender", "Month", "Year", "AgeGroup"))

ขอบคุณมากสำหรับคำตอบของคุณ! ฉันเล่นมาไม่Ameliaนาน แต่ก็ยอมแพ้ (ก่อนหน้านี้) ก่อนหน้านี้ฉันเคยเห็นบทความสั้น ๆ (แต่แพ้ไปอย่างใดอย่างหนึ่ง!) เพิ่งได้ดูอย่างรวดเร็วและจะผ่านมันไปให้ได้ ปัญหาหนึ่งที่ฉันมีตอนนี้คือฉันไม่แน่ใจเกี่ยวกับวิธีการสร้างgroupและtimeตัวแปร (ฉันพยายามสร้างพวกเขาสำหรับการวิเคราะห์อนุกรมเวลา / การคาดการณ์ แต่ได้วนรอบมัน) ฉันแน่ใจว่ามันอยู่ในจุดเริ่มต้น - ดังนั้นฉันจะกลับไปหาคุณถ้าฉันกำลังดิ้นรน ขอขอบคุณอีกครั้ง :)
OSlOlSO

ดีใจที่มีประโยชน์ ฉันเพิ่มตัวอย่างของวิธีการสร้างตัวแปรเหล่านั้น หวังว่าจะช่วย
Matt Blackwell

ขอบคุณสำหรับตัวอย่าง @Matt ด้วยเหตุผลแปลก ๆ บางอย่างมันทำให้ฉันมีข้อผิดพลาดเมื่อฉันใช้ "ts = time" และ "cs = group" ฉันแค่แทนที่ "เวลา" และ "กลุ่ม" ด้วยหมายเลขคอลัมน์ที่เกี่ยวข้องแล้วมันก็ใช้งานได้ a.out=amelia(dat,ts=time,cs=group,splinetime=2,intercs=TRUE,idvars=c("District","Gender","Month","Year","AgeGroup"),bounds=bds) Amelia Error Code: 6 The 'ts' variable is out of the range of possible column numbers or is not an integer.
OSlOlSO

สำหรับขอบเขตที่ฉันติดตามบทความและสร้างขอบเขตโดยใช้: bds <- matrix(c(6, 7, 8,0, 0,0, 500, 500,500), nrow = 3, ncol = 3)ฉันเพียงแค่เลือก 500 เป็นขีด จำกัด บนแบบสุ่ม ฉันพยายามไม่ให้คอลัมน์ที่สาม แต่Ameliaเตือนว่าต้องใช้คอลัมน์ที่สาม อาจจะมีวิธีที่จะ จำกัด เฉพาะขีด จำกัด ล่างหรือไม่
OSlOlSO

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