एक पैनल अध्ययन से समय श्रृंखला में लापता गणना डेटा के लिए कई प्रतिरूपण


9

मैं एक समस्या से निपटने की कोशिश कर रहा हूं जो एक पैनल डेटा स्टडी से गायब डेटा के इंप्रूवमेंट से संबंधित है (मुझे यकीन है कि अगर मैं 'पैनल डेटा स्टडी' का सही ढंग से उपयोग कर रहा हूं - जैसा कि मैंने आज सीखा है।) मेरे पास वर्ष 2003 के लिए कुल डेथ काउंट डेटा है। 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

2007 और 2008 में फैले 10 महीनों के लिए सभी जिलों से कुल मौतों को दर्ज नहीं किया गया था। मैं एक बहु प्रतिनियुक्ति विधि के माध्यम से इन लापता मूल्य का अनुमान लगाने की कोशिश कर रहा हूं। या तो सामान्यीकृत रैखिक मॉडल या 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

लेकिन किसी ने सुझाव दिया कि मुझे अपना सवाल यहाँ लाना चाहिए - शायद एक दिशा पूछी जाए? वर्तमान में मैं इस डेटा को एक उचित समय-श्रृंखला / पैनल अध्ययन के रूप में आर में प्रवेश करने में असमर्थ हूं। मेरा अंतिम उद्देश्य 2007 और 2008 में कुछ महीनों के amelia2लिए लापता होने के TotalDeathsलिए इस डेटा और पैकेज को अपने कार्यों के साथ उपयोग करना है। लापता।

कोई मदद, यह कैसे करना है और शायद इस समस्या से निपटने के लिए सुझाव को सराहना की जाएगी।

यदि यह मदद करता है, तो मैं क्लिंट रॉबर्ट्स ने अपने पीएचडी थीसिस में क्या किया है, इसी तरह के दृष्टिकोण का पालन करने की कोशिश कर रहा हूं ।

संपादित करें:

@ समय के अनुसार 'समय' और 'समूह' चर बनाने के बाद:

> 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 के बाद के महीनों की संख्या है। इस प्रकार, यह चर 2004 के जनवरी में 13 होगा। इस चर को बुलाओ time। अमेलिया आपको निम्न आदेशों के साथ समय के रुझान के आधार पर लगाने की अनुमति देगा:

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

tsऔर csतर्क बस समय और यूनिट चर को दर्शाते हैं। splinetimeतर्क सेट कैसे लचीला लापता डेटा लिए आरोपित करने के लिए इस्तेमाल किया जा समय चाहिए। यहां, एक 2 का अर्थ है कि इंप्यूटेशन समय के एक द्विघात फ़ंक्शन का उपयोग करेगा, लेकिन उच्च मूल्य अधिक लचीले होंगे। यहाँ intercsतर्क अमेलिया को प्रत्येक जिला-लिंग-आयु-समूह के लिए एक अलग समय प्रवृत्ति का उपयोग करने के लिए कहता है। यह मॉडल में कई पैरामीटर जोड़ता है, इसलिए यदि आप मुसीबत में हैं, तो आप इसे FALSEडीबग करने का प्रयास करने के लिए सेट कर सकते हैं ।

किसी भी घटना में, यह आपके डेटा में समय की जानकारी का उपयोग करके आपको इंप्यूटेशन देगा। चूंकि लापता डेटा शून्य पर बँधा हुआ है, आप boundsतर्क को उन तार्किक सीमाओं में बाध्य करने के लिए उपयोग कर सकते हैं ।

EDIT: समूह / समय चर कैसे बनाएं

समय चर बनाने में सबसे आसान हो सकता है, क्योंकि आपको केवल 2002 से गणना करने की आवश्यकता है (यह मानते हुए कि आपके डेटा में सबसे कम वर्ष है):

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

समूह चर थोड़ा कठिन है लेकिन इसे करने का एक त्वरित तरीका पेस्ट कमांड का उपयोग कर रहा है:

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

खुशी है कि यह उपयोगी है। मैंने एक उदाहरण जोड़ा कि उन चर को कैसे बनाया जाए। उम्मीद है की वो मदद करदे।
मैट ब्लैकवेल

उदाहरणों के लिए धन्यवाद @ मट। जब मैंने "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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.