แบบจำลองของคุณถือว่าความสำเร็จของรังสามารถดูได้ในรูปแบบการเดิมพัน:พระเจ้าพลิกเหรียญที่มีเครื่องหมายกำกับว่า "สำเร็จ" และ "ล้มเหลว" ผลลัพธ์ของการพลิกสำหรับหนึ่งรังไม่ขึ้นอยู่กับผลลัพธ์ของการพลิกสำหรับรังอื่น
นกมีบางสิ่งบางอย่างเกิดขึ้นกับพวกเขาแม้ว่า: เหรียญอาจจะประสบความสำเร็จอย่างมากในบางอุณหภูมิเมื่อเทียบกับที่อื่น ดังนั้นเมื่อคุณมีโอกาสสังเกตรังที่อุณหภูมิที่กำหนดจำนวนความสำเร็จจะเท่ากับจำนวนการโยนสำเร็จของเหรียญเดียวกัน - หนึ่งสำหรับอุณหภูมินั้น การแจกแจงทวินามที่สอดคล้องกันอธิบายถึงโอกาสของความสำเร็จ นั่นคือมันสร้างความน่าจะเป็นของความสำเร็จเป็นศูนย์หนึ่งในสองของ ... และอื่น ๆ ผ่านจำนวนของรัง
การประมาณค่าที่เหมาะสมอย่างหนึ่งของความสัมพันธ์ระหว่างอุณหภูมิและวิธีการที่พระเจ้าโหลดเหรียญนั้นได้รับตามสัดส่วนของความสำเร็จที่สังเกตได้ที่อุณหภูมินั้น นี่เป็นค่าประมาณความน่าจะเป็นสูงสุด (MLE)
71033/7.3/73
5,10,15,200,3,2,32,7,5,3
แถวบนสุดของรูปแสดง MLEs ที่อุณหภูมิสังเกตทั้งสี่ เส้นโค้งสีแดงในแผง "พอดี" จะติดตามวิธีการใส่เหรียญขึ้นอยู่กับอุณหภูมิ ด้วยการก่อสร้างการติดตามนี้จะส่งผ่านจุดข้อมูลแต่ละจุด (ไม่ทราบว่าทำอะไรที่อุณหภูมิระดับกลางฉันไม่ได้เชื่อมต่อค่านิยมเพื่อเน้นประเด็นนี้)
แบบจำลอง "อิ่มตัว" นี้ไม่มีประโยชน์มากอย่างแม่นยำเพราะไม่ได้ให้เราประเมินว่าพระเจ้าจะบรรจุเหรียญที่อุณหภูมิปานกลาง ในการทำเช่นนั้นเราต้องสมมติว่ามีเส้นโค้ง "แนวโน้ม" บางอย่างที่เกี่ยวข้องกับการโหลดเหรียญกับอุณหภูมิ
แถวล่างของรูปนั้นเหมาะกับเทรนด์ดังกล่าว แนวโน้มถูก จำกัด ในสิ่งที่สามารถทำได้: เมื่อทำการพล็อตในพิกัดที่เหมาะสม ("อัตราต่อรองการบันทึก") ดังที่แสดงในแผงควบคุม "การตอบสนองของ Logit" ทางด้านซ้าย เส้นตรงใด ๆ ดังกล่าวจะกำหนดการโหลดเหรียญที่อุณหภูมิทั้งหมดดังแสดงโดยเส้นโค้งที่สอดคล้องกันในแผง "พอดี" ในทางกลับกันการโหลดนั้นจะกำหนดการกระจายแบบทวินามที่อุณหภูมิทั้งหมด แถวด้านล่างแสดงการกระจายเหล่านั้นสำหรับอุณหภูมิที่พบรัง (เส้นสีดำประทำเครื่องหมายค่าที่คาดหวังของการแจกแจงช่วยในการระบุอย่างแม่นยำคุณไม่เห็นเส้นเหล่านั้นในแถวบนสุดของรูปเพราะพวกมันตรงกับส่วนสีแดง)
ตอนนี้ต้องทำการแลกเปลี่ยน:บรรทัดอาจส่งผ่านอย่างใกล้ชิดไปยังจุดข้อมูลบางส่วนเท่านั้นเพื่อเบี่ยงเบนห่างจากคนอื่น ๆ สิ่งนี้ทำให้การแจกแจงแบบทวินามสอดคล้องกันเพื่อกำหนดความน่าจะเป็นต่ำกว่าให้กับค่าที่สังเกตได้ส่วนใหญ่กว่า แต่ก่อน คุณสามารถมองเห็นสิ่งนี้ได้อย่างชัดเจนที่ 10 องศาและ 15 องศา: ความน่าจะเป็นของค่าที่สังเกตนั้นไม่ใช่ความน่าจะเป็นที่สูงที่สุดและไม่ใกล้เคียงกับค่าที่กำหนดในแถวบน
ภาพนิ่งถดถอยโลจิสติกส์และดึงเส้นรอบที่เป็นไปได้ (ในระบบพิกัดที่ใช้โดยแผง "Logit Response") แปลงความสูงของพวกเขาให้เป็นความน่าจะเป็นแบบทวินาม (ที่ "พอดี" พาเนล) ประเมินโอกาสที่ได้รับมอบหมาย ) และเลือกบรรทัดที่ให้ชุดค่าผสมที่ดีที่สุดของโอกาสเหล่านั้น
"ดีที่สุด" คืออะไร? ง่ายๆว่าความน่าจะเป็นรวมของข้อมูลทั้งหมดมีขนาดใหญ่ที่สุดเท่าที่จะเป็นไปได้ ด้วยวิธีนี้ไม่มีความน่าจะเป็นเดี่ยว (กลุ่มสีแดง) ที่ได้รับอนุญาตให้มีขนาดเล็กอย่างแท้จริง แต่โดยทั่วไปแล้วความน่าจะเป็นส่วนใหญ่จะไม่สูงเท่าที่พวกเขาอยู่ในรูปแบบอิ่มตัว
นี่คือการวนซ้ำหนึ่งครั้งของการค้นหาการถดถอยโลจิสติกที่บรรทัดถูกหมุนลง:
1015องศา แต่เป็นงานที่แย่มากในการปรับข้อมูลอื่นให้เหมาะสม (ที่ 5 และ 20 องศาความน่าจะเป็นแบบทวินามที่กำหนดให้กับข้อมูลนั้นเล็กมากจนคุณไม่สามารถมองเห็นกลุ่มสีแดง) โดยรวมแล้วนี่เป็นแบบที่แย่กว่าแบบที่แสดงในรูปแรก
ฉันหวังว่าการสนทนานี้จะช่วยให้คุณพัฒนาภาพลักษณ์ของความน่าจะเป็นแบบทวินามที่เปลี่ยนไปเมื่อมีการเปลี่ยนแปลงบรรทัดทั้งหมดในขณะที่ทำให้ข้อมูลเหมือนเดิม เส้นพอดีโดยการถดถอยโลจิสติกพยายามที่จะทำให้แถบสีแดงเหล่านั้นโดยรวมสูงที่สุด ดังนั้นความสัมพันธ์ระหว่างการถดถอยโลจิสติกและการแจกแจงแบบทวินามนั้นลึกและสนิทสนม
ภาคผนวก: R
รหัสในการสร้างตัวเลข
#
# Create example data.
#
X <- data.frame(temperature=c(5,10,15,20),
nests=c(2,7,5,3),
successes=c(0,3,2,3))
#
# A function to plot a Binomial(n,p) distribution and highlight the value `k0`.
#
plot.binom <- function(n, p, k0, highlight="#f02020", ...) {
plot(0:n, dbinom(0:n, n, p), type="h", yaxt="n",
xlab="Trials", ylab="Probability", ...)
abline(v = p*n, lty=3, lwd=2)
if(!missing(k0)) lines(rep(k0,2), c(0, dbinom(k0,n,p)), lwd=2, col=highlight)
}
#
# A function to convert from probability to log odds.
#
logit <- function(p) log(p) - log(1-p)
#
# Fit a saturated model, then the intended model.
#
# Ordinarily the formula for the saturated model would be in the form
# `... ~ factor(temperature)`, but the following method makes it possible to
# plot the predicted values in a visually effective way.
#
fit.0 <- glm(cbind(successes, nests-successes) ~ factor(round(temperature/5)),
data=X, family=binomial)
summary(fit.0)
fit <- glm(cbind(successes, nests-successes) ~ temperature,
data=X, family=binomial)
summary(fit)
#
# Plot both fits, one per row.
#
lfits <- list(fit.0, fit)
par.old <- par(mfrow=c(length(lfits), nrow(X)+2))
for (fit in lfits) {
#
# Construct arrays of plotting points.
#
X$p.hat <- predict(fit, type="response")
Y <- data.frame(temperature = seq(min(X$temperature), max(X$temperature),
length.out=101))
Y$p.hat <- predict(fit, type="response", newdata=Y) # Probability
Y$lambda.hat <- predict(fit, type="link", newdata=Y) # Log odds
#
# Plot the fit in terms of log odds.
#
with(Y, plot(temperature, lambda.hat, type="n",
yaxt="n", bty="n", main="Logit Response",
ylab=expression(hat(lambda))))
if (isTRUE(diff(range(Y$lambda.hat)) < 6)) {
# Draw gridlines and y-axis labels
p <- c( .10, .25, .5, .75, .9)
q <- logit(p)
suppressWarnings(rug(q, side=2))
abline(h=q, col="#d0d0d0")
mtext(signif(p, 2), at=q, side=2, cex=0.6)
}
with(Y, lines(temperature, lambda.hat, lwd=2, col="#f02020"))
#
# Plot the data and the fit in terms of probability.
#
with(X, plot(temperature, successes/nests, ylim=0:1,
cex=sqrt(nests), pch=21, bg="Gray",
main="Fit"))
with(Y, lines(temperature, p.hat, col="#f02020", lwd=2))
#
# Plot the Binomial distributions associated with each row of the data.
#
apply(X, 1, function(x) plot.binom(x[2], x[4], x[3], bty="n", lwd=2, col="Gray",
main=paste(x[1], "Degrees")))
}
par(mfrow=par.old)