लॉजिस्टिक रिग्रेशन मॉडल हेरफेर


12

मैं समझना चाहूंगा कि निम्नलिखित कोड क्या कर रहा है। जिस व्यक्ति ने कोड लिखा था वह अब यहां काम नहीं करता है और यह लगभग पूरी तरह से अनिर्दिष्ट है। मुझे किसी ऐसे व्यक्ति द्वारा इसकी जांच करने के लिए कहा गया था जो सोचता है कि " यह एक बायिसियन लॉजिस्टिक रिग्रेशन मॉडल है "

bglm <- function(Y,X) {
    # Y is a vector of binary responses
    # X is a design matrix

    fit <- glm.fit(X,Y, family = binomial(link = logit))
    beta <- coef(fit)
    fs <- summary.glm(fit)
    M <- t(chol(fs$cov.unscaled))
    betastar <- beta + M %*% rnorm(ncol(M))
    p <- 1/(1 + exp(-(X %*% betastar)))
    return(runif(length(p)) <= p)
}

मैं देख सकता हूं कि यह एक लॉजिस्टिक मॉडल फिट बैठता है, अनुमानित सहसंयोजक मैट्रिक्स के चोल्स्की फैक्टराइजेशन का पारगमन लेता है, से ड्रॉ के एक वेक्टर द्वारा इसे गुणा करता है और फिर मॉडल अनुमानों में जोड़ा जाता है। इसके बाद इसका डिज़ाइन मैट्रिक्स द्वारा प्रीप्लेट किया जाता है, इसका उलटा लॉग लिया जाता है, इसकी तुलना एक वेक्टर से की जाती है और परिणामस्वरूप बाइनरी वेक्टर वापस आ जाता है। लेकिन क्या सब करता है यह मतलब सांख्यिकीय?N(0,1)U(0,1)


यह शायद यह जानने में बहुत मदद करेगा कि यह किस क्षेत्र में उपयोग किया जा रहा है ..
n

2
संक्षेप में, फ़ंक्शन आपके डेटा के (अक्सरवादी) मॉडल से डेटा उत्पन्न करता है, जिसमें वास्तविक मापदंडों के बारे में अनिश्चितता शामिल होती है। यह एक बायेसियन MCMC रूटीन का हिस्सा हो सकता है, लेकिन इसका उपयोग सिमुलेशन-आधारित पावर विश्लेषण (nb, पूर्व विश्लेषण के आधार पर पावर विश्लेषणों में भी किया जा सकता है जो अनिश्चितता को ध्यान में नहीं रखते हैं अक्सर आशावादी होते हैं )।
गुंग - को पुनः स्थापित मोनिका

आपका स्वागत है, @PSellaz। चूंकि किसी और ने जवाब नहीं दिया है, इसलिए मैं इसे 'आधिकारिक' जवाब में बदल दूंगा।
गंग - मोनिका

जवाबों:


7

फ़ंक्शन क्या करता है:
संक्षेप में, फ़ंक्शन आपके डेटा के एक मॉडल से नया छद्म आयामी प्रतिक्रिया (यानी, ) डेटा उत्पन्न करता है । उपयोग किया जा रहा मॉडल एक मानक लगातार मॉडल है। जैसा कि प्रथागत है, यह मान रहा है कि आपके * डेटा ज्ञात स्थिरांक हैं - वे किसी भी तरह से नमूना नहीं हैं। मैं इस फ़ंक्शन की महत्वपूर्ण विशेषता के रूप में देखता हूं कि यह अनुमानित मापदंडों के बारे में अनिश्चितता को शामिल कर रहा है। Yएक्स

* ध्यान दें कि आपको फ़ंक्शन को इनपुट करने से पहले अपने मैट्रिक्स के बाएं कॉलम के रूप में वेक्टर को मैन्युअल रूप से जोड़ना होगा , जब तक कि आप इंटरसेप्ट को दबाना नहीं चाहते (जो आमतौर पर एक अच्छा विचार नहीं है)।1एक्स

इस समारोह का क्या मतलब था:
मैं ईमानदारी से नहीं जानता। यह एक बायेसियन MCMC रूटीन का हिस्सा हो सकता था, लेकिन यह केवल एक टुकड़ा होता - आपको वास्तव में बायेसियन विश्लेषण चलाने के लिए कहीं और कोड की आवश्यकता होती। मैं इस पर निश्चित रूप से टिप्पणी करने के लिए बायेसियन विधियों पर पर्याप्त रूप से विशेषज्ञ महसूस नहीं करता हूं, लेकिन फ़ंक्शन मुझे ऐसा महसूस नहीं करता है जो आमतौर पर उपयोग किया जाएगा।

इसका उपयोग सिमुलेशन-आधारित शक्ति विश्लेषणों में भी किया जा सकता है। (मेरा जवाब यहां देखें: लॉजिस्टिक रिग्रेशन पॉवर एनालिसिस का सिमुलेशन - इस प्रकार की जानकारी के लिए डिज़ाइन किए गए प्रयोग ।) यह ध्यान देने योग्य है कि पॉवर एनालिसिस पूर्व डेटा के आधार पर विश्लेषण करते हैं जो पैरामीटर अनुमानों की अनिश्चितता को ध्यान में नहीं रखते हैं। आशावादी। (मैं उस बिंदु पर यहां चर्चा करता हूं: वांछित प्रभाव आकार बनाम अपेक्षित प्रभाव आकार ।)

यदि आप इस फ़ंक्शन का उपयोग करना चाहते हैं:
जैसा कि @whuber टिप्पणियों में नोट करता है, तो यह फ़ंक्शन अक्षम होगा। यदि आप इसका उपयोग (उदाहरण के लिए) शक्ति विश्लेषण करने के लिए करना चाहते हैं, तो मैं फ़ंक्शन को दो नए कार्यों में विभाजित करूंगा। पहले आपके डेटा में पढ़ा जाएगा और मापदंडों और अनिश्चितताओं को आउटपुट करेगा। दूसरा नया फ़ंक्शन नया pseudorandom डेटा उत्पन्न करेगा । निम्नलिखित एक उदाहरण है (हालांकि इसे आगे सुधारना संभव हो सकता है): Y

simulationParameters <- function(Y,X) {
                        # Y is a vector of binary responses
                        # X is a design matrix, you don't have to add a vector of 1's 
                        #   for the intercept

                        X    <- cbind(1, X)  # this adds the intercept for you
                        fit  <- glm.fit(X,Y, family = binomial(link = logit))
                        beta <- coef(fit)
                        fs   <- summary.glm(fit)
                        M    <- t(chol(fs$cov.unscaled))

                        return(list(betas=beta, uncertainties=M))
}

simulateY <- function(X, betas, uncertainties, ncolM, N){

             # X      <- cbind(1, X)  # it will be slightly faster if you input w/ 1's
             # ncolM  <- ncol(uncertainties) # faster if you input this
             betastar <- betas + uncertainties %*% rnorm(ncolM)
             p        <- 1/(1 + exp(-(X %*% betastar)))

             return(rbinom(N, size=1, prob=p))
}

4
+1। मेरे लिए, अजीब बात यह है कि फिटिंग और सिम्युलेटेड भविष्यवाणियां सभी एक ही फ़ंक्शन के शरीर के भीतर की जाती हैं। आम तौर पर, इस तरह के आपरेशनों पहला दौरा कंप्यूटिंग (लौटने के द्वारा किया जा जाएगा betaऔर M) और फिर बनाने के लिए कई इस फिट के आधार पर आईआईडी सिमुलेशन। (उन्हें एक ही फ़ंक्शन में डालने से अनावश्यक रूप से फिटिंग को हर बार दोहराया जा सकता है, गणनाओं को बहुत धीमा कर सकता है।) इन सिमुलेशन से, व्यक्ति नॉनलाइन या प्रतिक्रियाओं के बहुत जटिल संयोजनों के लिए ( बीच में ) पूर्वानुमान अंतराल को पुनर्प्राप्त कर सकता है ।
whuber

@ जब मैं सहमत हूँ। मैं वास्तव में यह सुझाव देने के बारे में सोच रहा था कि अनुकरण के लिए उपयोग किए जाने से पहले फ़ंक्शन को 2 अलग-अलग कार्यों में विभाजित किया जा सकता है, लेकिन ऐसा नहीं लगता था कि यह प्रश्न का हिस्सा था।
गुंग - को पुनः स्थापित मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.