आपके द्वारा उपयोग किया गया कोड glm
फ़ंक्शन का उपयोग करके लॉजिस्टिक रिग्रेशन मॉडल का अनुमान लगाता है । आपने डेटा शामिल नहीं किया है, इसलिए मैं अभी कुछ बनाऊंगा।
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
एक लॉजिस्टिक रिग्रेशन मॉडल एक द्विआधारी प्रतिक्रिया चर के बीच के रिश्ते को मॉडल करता है और इस मामले में, एक निरंतर भविष्यवक्ता। परिणाम भविष्यवक्ता के रैखिक संबंध के रूप में एक तर्क-परिवर्तित संभावना है। आपके मामले में, परिणाम एक बाइनरी प्रतिक्रिया है जो जुए में जीतने या जीतने के लिए नहीं है और यह दांव के मूल्य से भविष्यवाणी की जा रही है। के अनुसार गुणांक mod1
लॉग ऑड्स में दिए गए हैं (जिनकी व्याख्या करना मुश्किल है):
logit(p)=log(p(1−p))=β0+β1x1
लॉग ऑड्स को संभावनाओं में परिवर्तित करने के लिए, हम ऊपर से अनुवाद कर सकते हैं
p=exp(β0+β1x1)(1+exp(β0+β1x1))
आप इस जानकारी का उपयोग प्लॉट सेट करने के लिए कर सकते हैं। सबसे पहले, आपको भविष्यवक्ता चर की एक श्रृंखला की आवश्यकता है:
plotdat <- data.frame(bid=(0:1000))
फिर उपयोग करते हुए predict
, आप अपने मॉडल के आधार पर भविष्यवाणियां प्राप्त कर सकते हैं
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
ध्यान दें कि फिट किए गए मान भी प्राप्त किए जा सकते हैं
mod1$fitted
निर्दिष्ट करके se.fit=TRUE
, आपको प्रत्येक फिट किए गए मान के साथ मानक त्रुटि भी मिलती है। परिणामी data.frame
निम्नलिखित घटकों के साथ एक मैट्रिक्स है: फिट की गई भविष्यवाणियां ( fit
), अनुमानित मानक त्रुटियां ( se.fit
), और मानक त्रुटियों को गणना करने के लिए उपयोग किए जाने वाले फैलाव के वर्गमूल देने वाला एक स्केलर residual.scale
। एक द्विपद logit के मामले में, मूल्य हो जाएगा 1 (आप दर्ज करके देख सकते हैं जो preddat$residual.scale
में R
)। यदि आप अब तक की गणना का एक उदाहरण देखना चाहते हैं, तो आप टाइप कर सकते हैं head(data.frame(preddat))
।
अगला कदम भूखंड स्थापित करना है। मैं पहले मापदंडों के साथ एक खाली प्लॉटिंग क्षेत्र स्थापित करना पसंद करता हूं:
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
अब आप देख सकते हैं कि फिट की गई संभावनाओं की गणना करना जानना महत्वपूर्ण है। आप ऊपर दिए गए दूसरे सूत्र के बाद फिट की गई संभावनाओं के अनुरूप रेखा खींच सकते हैं। preddat data.frame
आप का उपयोग करके फिट किए गए मानों को संभाव्यता में परिवर्तित कर सकते हैं और उपयोग कर सकते हैं कि अपने भविष्यवक्ता चर के मूल्यों के खिलाफ एक पंक्ति बनाने के लिए।
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
अंत में, अपने प्रश्न का उत्तर दें, +/- 1.96
मानक समय के अनुसार फिट किए गए मूल्यों की संभावना की गणना करके विश्वास अंतराल को साजिश में जोड़ा जा सकता है :
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
परिणामी भूखंड (बेतरतीब ढंग से उत्पन्न डेटा से) कुछ इस तरह दिखना चाहिए:
शीघ्रता के लिए, यहां एक ही कोड में सभी कोड हैं:
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
plotdat <- data.frame(bid=(0:1000))
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
(नोट: यह आँकड़े.स्टैकएक्सचेंज के लिए अधिक प्रासंगिक बनाने के प्रयास में एक बहुत ही संपादित उत्तर है।)