2013-09-25 13 views
5

के अंदर glm का उपयोग करके मैं कुछ ग्लैम के डेटाटेबल के अंदर महत्वपूर्ण कारकों द्वारा विभाजित मॉडल तैयार करने के लिए प्रयास कर रहा हूं।आर - डेटाटेबल

मैं के लिए इस सफलतापूर्वक कर रहा हूँ:

  • उच्च स्तर GLM

    GLM (modellingDF, सूत्र = परिणाम ~ IntCol + DecCol, परिवार = द्विपद (लिंक = logit))

  • एकल स्तंभ

    modellingDF [, सूची (परिणाम, फिट = GLM (एक्स, सूत्र = परिणाम ~ IntCol, परिवार = द्विपद (ली के साथ

  • scoped GLM nk = = चर द्वारा logit)) $ फिट), ]

  • दो पूर्णांक कॉलम

    modellingDF [, सूची (परिणाम, साथ

    scoped GLM फिट = GLM (एक्स, सूत्र = परिणाम ~ IntCol + IntCol2 , परिवार = द्विपद = चर द्वारा (लिंक = logit)) $ फिट), ]

लेकिन, जब मैं कोशिश करते हैं और मेरी दशमलव स्तंभ के साथ दायरे के अंदर उच्च स्तर GLM करते हैं, यह इस त्रुटि पैदा करता

Error in model.frame.default(formula = Outcome ~ IntCol + DecCol, data = x, : 
    variable lengths differ (found for 'DecCol') 

मैं शायद सोचा था कि यह विभाजन के चर लंबाई की वजह से था, तो मैं एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण के साथ परीक्षण किया:

library("data.table") 

testing<-data.table(letters=sample(rep(LETTERS,5000),5000), 
        letters2=sample(rep(LETTERS[1:5],10000),5000), 
        cont.var=rnorm(5000), 
        cont.var2=round(rnorm(5000)*1000,0), 
        outcome=rbinom(5000,1,0.8) 
        ,key="letters") 
testing.glm<-testing[,list(outcome, 
        fitted=glm(x,formula=outcome~cont.var+cont.var2,family=binomial(link=logit))$fitted) 
     ),by=list(letters)] 

लेकिन इस त्रुटि नहीं था। मैं शायद सोचा था कि यह NAS या कुछ और की वजह से था लेकिन data.table modellingDF का एक सारांश कोई संकेत नहीं है कि वहाँ किसी भी मुद्दे होना चाहिए देता है:

DecCol 
Min. :0.0416 
1st Qu.:0.6122 
Median :0.7220 
Mean :0.6794 
3rd Qu.:0.7840 
Max. :0.9495 

nrow(modellingDF[is.na(DecCol),]) # results in 0 

modellingDF[,list(len=.N,DecCollen=length(DecCol),IntCollen=length 
(IntCol),Outcomelen=length(Outcome)),by=Bracket] 

    Bracket len DecCollen IntCollen Outcomelen 
1:  3-6 39184 39184  39184  39184 
2:  1-2 19909 19909  19909  19909 
3:  0 9912 9912  9912  9912 

शायद मैं एक निंदासा दिन आ रही है, लेकिन किसी को भी एक सुझाव है कि सकता है समाधान या इस मुद्दे में खुदाई के साधन हैं?

+0

NAs? [आर चर लंबाई अलग बच के लिए जब निर्माण रेखीय मॉडल] (http://stackoverflow.com/questions/14924541/r-variable-length-differ-when-build-linear-model-for-residuals) – zx8754

+1

मैं इसे माना जाता है, लेकिन 'sapply (modellingDF, फ़ंक्शन (x) सभी (is.na (x)))' प्रत्येक कॉलम –

+0

के लिए गलत लौटाता है क्या आप एक पुन: उत्पन्न उदाहरण बना सकते हैं जो त्रुटि उत्पन्न करता है? आपने जो त्रुटि अच्छी है, उसे दिखाया है, लेकिन इसका उत्पादन नहीं करता है, iiuc। –

उत्तर

5

आप सही ढंग से glm भीतर data तर्क निर्दिष्ट करने के लिए की जरूरत है। data.table के अंदर ([ का उपयोग करके), इसका संदर्भ .SD द्वारा किया गया है। (संबंधित सवाल के लिए create a formula in a data.table environment in R देखें)

तो

modellingDF[,list(Outcome, fitted = glm(data = .SD, 
    formula = Outcome ~ IntCol ,family = binomial(link = logit))$fitted), 
by=variable] 

काम करेंगे।

जबकि इस मामले में (बस फिट मान निकालने और पर चलती), इस दृष्टिकोण, ध्वनि है data.table और .SD का उपयोग कर वातावरण की गड़बड़ी में प्राप्त कर सकते हैं अगर आप पूरे मॉडल बचत कर रहे हैं और उसके बाद update यह करने के लिए प्रयास (देखें Why is using update on a lm inside a grouped data.table losing its model data?)

+0

समस्या को ठीक करने के रूप में चिह्नित करूंगा। यह उत्तर थोड़ा पुराना है। 'मॉडलिंग डीएफ [,। (परिणाम, फिट = ग्लम (परिणाम ~ IntCol, family = binomial) $ fitted), द्वारा = परिवर्तनीय] 'काम करना चाहिए और बहुत साफ है। – MichaelChirico