ตัวประมาณ OLS ในตัวแบบการถดถอยเชิงเส้นค่อนข้างหายากในการมีคุณสมบัติที่สามารถถูกแสดงในรูปแบบปิดซึ่งไม่จำเป็นต้องแสดงเป็นตัวเพิ่มประสิทธิภาพของฟังก์ชัน อย่างไรก็ตามมันเป็นตัวเพิ่มประสิทธิภาพของฟังก์ชั่น - ผลรวมที่เหลือของฟังก์ชันกำลังสอง - และสามารถคำนวณได้เช่นนี้
MLE ในรูปแบบการถดถอยโลจิสติกยังเป็นเครื่องมือเพิ่มประสิทธิภาพของฟังก์ชั่นบันทึกความน่าจะเป็นที่กำหนดอย่างเหมาะสม แต่เนื่องจากมันไม่สามารถใช้ได้ในการแสดงออกของรูปแบบปิดจึงต้องคำนวณเป็นเครื่องมือเพิ่มประสิทธิภาพ
ตัวประมาณค่าทางสถิติส่วนใหญ่สามารถแสดงผลได้เฉพาะเมื่อตัวเพิ่มประสิทธิภาพของฟังก์ชันที่สร้างขึ้นอย่างเหมาะสมของข้อมูลที่เรียกว่าฟังก์ชันเกณฑ์ เครื่องมือเพิ่มประสิทธิภาพดังกล่าวจำเป็นต้องใช้อัลกอริทึมการเพิ่มประสิทธิภาพเชิงตัวเลขที่เหมาะสม เพิ่มประสิทธิภาพของการทำงานสามารถคำนวณได้ในการวิจัยโดยใช้ฟังก์ชั่นที่ช่วยให้ขั้นตอนวิธีการเพิ่มประสิทธิภาพวัตถุประสงค์บางทั่วไปหรือหนึ่งในแพคเกจความเชี่ยวชาญมากขึ้นเช่นoptim()
optimx
การรู้ว่าอัลกอริธึมการปรับให้เหมาะสมแบบใดที่จะใช้สำหรับรุ่นต่างๆและฟังก์ชันเกณฑ์ทางสถิติเป็นกุญแจสำคัญ
การถดถอยเชิงเส้นผลรวมที่เหลือของกำลังสอง
ตัวประมาณ OLS ถูกกำหนดให้เป็นเครื่องมือเพิ่มประสิทธิภาพของผลรวมที่เหลือของฟังก์ชันกำลังสองที่รู้จักกันดี:
β^= หาเรื่องนาทีβ( Y- X β )'(Y- X β )= ( X'X )- 1X'Y
ในกรณีที่มีความแตกต่างกันสองครั้งฟังก์ชันนูนเช่นผลรวมส่วนที่เหลือของกำลังสองตัวออพติไมเซอร์แบบไล่ระดับสีส่วนใหญ่ทำหน้าที่ได้ดี ในกรณีนี้ฉันจะใช้อัลกอริทึม BFGS
#================================================
# reading in the data & pre-processing
#================================================
urlSheatherData = "http://www.stat.tamu.edu/~sheather/book/docs/datasets/MichelinNY.csv"
dfSheather = as.data.frame(read.csv(urlSheatherData, header = TRUE))
# create the design matrices
vY = as.matrix(dfSheather['InMichelin'])
mX = as.matrix(dfSheather[c('Service','Decor', 'Food', 'Price')])
# add an intercept to the predictor variables
mX = cbind(1, mX)
# the number of variables and observations
iK = ncol(mX)
iN = nrow(mX)
#================================================
# compute the linear regression parameters as
# an optimal value
#================================================
# the residual sum of squares criterion function
fnRSS = function(vBeta, vY, mX) {
return(sum((vY - mX %*% vBeta)^2))
}
# arbitrary starting values
vBeta0 = rep(0, ncol(mX))
# minimise the RSS function to get the parameter estimates
optimLinReg = optim(vBeta0, fnRSS,
mX = mX, vY = vY, method = 'BFGS',
hessian=TRUE)
#================================================
# compare to the LM function
#================================================
linregSheather = lm(InMichelin ~ Service + Decor + Food + Price,
data = dfSheather)
อัตราผลตอบแทนนี้:
> print(cbind(coef(linregSheather), optimLinReg$par))
[,1] [,2]
(Intercept) -1.492092490 -1.492093965
Service -0.011176619 -0.011176583
Decor 0.044193000 0.044193023
Food 0.057733737 0.057733770
Price 0.001797941 0.001797934
ความน่าจะเป็นของการถดถอยโลจิสติก
ฟังก์ชันเกณฑ์ที่สอดคล้องกับ MLE ในแบบจำลองการถดถอยโลจิสติกคือฟังก์ชันบันทึกความเป็นไปได้
เข้าสู่ระบบLn(β )= ∑i = 1n(Yผมเข้าสู่ระบบΛ ( X'ผมβ ) + ( 1 - Yผม)บันทึก( 1 - Λ ( X)'ผมβ ) ) )
โดยที่เป็นฟังก์ชันลอจิสติก การประมาณพารามิเตอร์เป็นตัวเพิ่มประสิทธิภาพของฟังก์ชั่นนี้
Λ ( k ) = 1 / ( 1 + exp( - k ) )β^= หาเรื่องสูงสุดβเข้าสู่ระบบLn( β )
ฉันแสดงวิธีการสร้างและปรับแต่งฟังก์ชันเกณฑ์ให้เหมาะสมโดยใช้optim()
ฟังก์ชันอีกครั้งโดยใช้อัลกอริทึม BFGS
#================================================
# compute the logistic regression parameters as
# an optimal value
#================================================
# define the logistic transformation
logit = function(mX, vBeta) {
return(exp(mX %*% vBeta)/(1+ exp(mX %*% vBeta)) )
}
# stable parametrisation of the log-likelihood function
# Note: The negative of the log-likelihood is being returned, since we will be
# /minimising/ the function.
logLikelihoodLogitStable = function(vBeta, mX, vY) {
return(-sum(
vY*(mX %*% vBeta - log(1+exp(mX %*% vBeta)))
+ (1-vY)*(-log(1 + exp(mX %*% vBeta)))
)
)
}
# initial set of parameters
vBeta0 = c(10, -0.1, -0.3, 0.001, 0.01) # arbitrary starting parameters
# minimise the (negative) log-likelihood to get the logit fit
optimLogit = optim(vBeta0, logLikelihoodLogitStable,
mX = mX, vY = vY, method = 'BFGS',
hessian=TRUE)
#================================================
# test against the implementation in R
# NOTE glm uses IRWLS:
# http://en.wikipedia.org/wiki/Iteratively_reweighted_least_squares
# rather than the BFGS algorithm that we have reported
#================================================
logitSheather = glm(InMichelin ~ Service + Decor + Food + Price,
data = dfSheather,
family = binomial, x = TRUE)
อัตราผลตอบแทนนี้
> print(cbind(coef(logitSheather), optimLogit$par))
[,1] [,2]
(Intercept) -11.19745057 -11.19661798
Service -0.19242411 -0.19249119
Decor 0.09997273 0.09992445
Food 0.40484706 0.40483753
Price 0.09171953 0.09175369
ในฐานะข้อควรระวังโปรดทราบว่าอัลกอริธึมการเพิ่มประสิทธิภาพเชิงตัวเลขจำเป็นต้องใช้อย่างระมัดระวังหรือคุณสามารถจบลงด้วยการแก้ปัญหาทางพยาธิสภาพทุกประเภท จนกว่าคุณจะเข้าใจได้ดีแนะนำให้ใช้ตัวเลือกแพ็คเกจที่มีให้ซึ่งช่วยให้คุณมีสมาธิในการระบุรูปแบบแทนที่จะกังวลเกี่ยวกับวิธีคำนวณตัวเลข