อัลกอริธึมมาตรฐานสำหรับการทำการถดถอยเชิงเส้นแบบลำดับชั้น?


9

มีอัลกอริธึมมาตรฐาน (ตรงข้ามกับโปรแกรม) สำหรับการถดถอยเชิงเส้นแบบลำดับชั้นหรือไม่? คนมักจะทำเพียงแค่ MCMC หรือมีความเชี่ยวชาญมากขึ้นบางทีอาจจะเป็นรูปแบบปิดอัลกอริทึมบางส่วน?

คำตอบ:


9

มีอัลกอริธึมกำลังสองน้อยที่สุด (IGLS) วนซ้ำทั่วไปของฮาร์วี่โกลด์สไตน์สำหรับหนึ่งและมันก็เป็นการปรับเปลี่ยนเล็กน้อย, จำกัดซ้ำสแควร์สแควร์สทั่วไปน้อยที่สุด (RIGLS) ที่ให้การประมาณค่าพารามิเตอร์ความแปรปรวนแบบเป็นกลาง

อัลกอริทึมเหล่านี้ยังคงทำซ้ำดังนั้นจึงไม่ใช่รูปแบบปิด แต่มันง่ายกว่าการคำนวณ MCMC หรือโอกาสสูงสุด คุณทำซ้ำจนกว่าพารามิเตอร์จะมาบรรจบกัน

  • การวิเคราะห์เชิงเส้น - โมเดลผสม Goldstein H. หลายระดับโดยใช้กำลังสองน้อยซ้ำทั่วไป Biometrika 1986; 73 (1): 43-56 ดอย: 10.1093 / biomet / 73.1.43

  • Goldstein H. จำกัด การทำซ้ำซ้ำโดยทั่วไปที่เป็นกลางโดยทั่วไปการประมาณกำลังสองน้อยที่สุด Biometrika 1989; 76 (3): 622-623 ดอย: 10.1093 / biomet / 76.3.622

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนี้และทางเลือกอื่นโปรดดูเช่น:


เหลือเชื่อ! สิ่งที่ฉันกำลังมองหา
John Salvatier

4

แพ็คเกจ lme4 ใน R ใช้น้ำหนักน้อยที่สุดกำลังสองน้อยที่สุด (IRLS) และลงโทษหนักน้อยที่สุดกำลังสองน้อยที่สุด (PIRLS) ดู PDF ได้ที่นี่:

http://rss.acs.unt.edu/Rdoc/library/lme4/doc/index.html


1
ดักลาสเบตส์และสตีเวนวอล์คเกอร์ได้สร้างโครงการ GitHub โดยมีเป้าหมายคือใช้รหัส R บริสุทธิ์เพื่อใช้อัลกอริทึม PIRLS ด้านบน github.com/lme4/lme4pureR หากคุณพิจารณาlmer()ฟังก์ชั่นพื้นฐานในlme4แพ็คเกจของ R คุณจะต้องอ่านรหัส C ++ ทั้งกลุ่มเพื่อให้เข้าใจถึงการนำไปใช้ของ PIRLS lmer()(ซึ่งอาจเป็นสิ่งที่ท้าทายสำหรับพวกเราที่ไม่ค่อยเชี่ยวชาญในการเขียนโปรแกรม C ++)
Chris

1

แหล่งที่ดีอีกอย่างสำหรับ "อัลกอริธึมการคำนวณ" สำหรับ HLM (อีกครั้งเท่าที่คุณมองว่าเป็นข้อกำหนดที่คล้ายคลึงกับ LMM):

  • McCulloch, C. , Searle, S. , Neuhaus, J. (2008) โมเดลเชิงเส้นและแบบผสมทั่วไป ฉบับที่ 2 ไวลีย์ บทที่ 14 - การคำนวณ

อัลกอริทึมที่พวกเขารายการสำหรับการคำนวณของ LMM รวมถึง:

  • อัลกอริทึม EM
  • อัลกอริทึมของ Newton Raphson

อัลกอริทึมที่พวกเขารายการสำหรับ GLMM รวมถึง:

  • การสร้างพื้นที่สี่เหลี่ยมจัตุรัสเชิงตัวเลข (การสร้างพื้นที่สี่เหลี่ยมจัตุรัส GH)
  • อัลกอริทึม EM
  • อัลกอริทึม MCMC (ตามที่คุณพูดถึง)
  • อัลกอริทึมการประมาณสุ่ม
  • โอกาสจำลองสูงสุด

อัลกอริทึมอื่น ๆ สำหรับ GLMM ที่พวกเขาแนะนำรวมถึง:

  • วิธีการกึ่งโอกาสถูกลงโทษ
  • การประมาณ Laplace
  • PQL / Laplace พร้อมการแก้ไขการตั้งค่า bootstrap

0

หากคุณพิจารณาว่า HLM เป็นแบบผสมเชิงเส้นคุณสามารถพิจารณาอัลกอริทึม EM หมายเหตุหลักสูตรต่อไปนี้หน้า 22-23 ระบุวิธีการใช้อัลกอริทึม EM แบบคลาสสิกสำหรับโมเดลผสม:

http://www.stat.ucla.edu/~yuille/courses/stat153/emtutorial.pdf

###########################################################
#     Classical EM algorithm for Linear  Mixed Model      #
###########################################################
em.mixed <- function(y, x, z, beta, var0, var1,maxiter=2000,tolerance = 1e-0010)
    {
    time <-proc.time()
    n <- nrow(y)
    q1 <- nrow(z)
    conv <- 1
    L0 <- loglike(y, x, z, beta, var0, var1)
    i<-0
    cat("  Iter.       sigma0                 sigma1        Likelihood",fill=T)
    repeat {
            if(i>maxiter) {conv<-0
                    break}
    V <- c(var1) * z %*% t(z) + c(var0) * diag(n)
    Vinv <- solve(V)
    xb <- x %*% beta
    resid <- (y-xb)
    temp1 <- Vinv %*% resid
    s0 <- c(var0)^2 * t(temp1)%*%temp1 + c(var0) * n - c(var0)^2 * tr(Vinv)
    s1 <- c(var1)^2 * t(temp1)%*%z%*%t(z)%*%temp1+ c(var1)*q1 -
                                                c(var1)^2 *tr(t(z)%*%Vinv%*%z)
    w <- xb + c(var0) * temp1
    var0 <- s0/n
    var1 <- s1/q1
    beta <- ginverse( t(x) %*% x) %*% t(x)%*% w
    L1 <- loglike(y, x, z, beta, var0, var1)
    if(L1 < L0) { print("log-likelihood must increase, llikel <llikeO, break.")
                             conv <- 0
break
}
    i <- i + 1
    cat("  ", i,"  ",var0,"  ",var1,"  ",L1,fill=T)
    if(abs(L1 - L0) < tolerance) {break}  #check for convergence
    L0 <- L1
    }
list(beta=beta, var0=var0,var1=var1,Loglikelihood=L0)
}

#########################################################
#  loglike calculates the LogLikelihood for Mixed Model #
#########################################################
loglike<- function(y, x, z, beta, var0, var1)
}
{
n<- nrow(y)
V <- c(var1) * z %*% t(z) + c(var0) * diag(n)
Vinv <- ginverse(V)
xb <- x %*% beta
resid <- (y-xb)
temp1 <- Vinv %*% resid
(-.5)*( log(det(V)) + t(resid) %*% temp1 )
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.