การจัดการแบบจำลองการถดถอยโลจิสติก


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)
}

ฉันเห็นได้ว่ามันเหมาะกับแบบจำลองโลจิสติกใช้การเปลี่ยนค่าตัวประกอบแบบแปรปรวนของเมทริกซ์ความแปรปรวนร่วมโดยประมาณแล้วโพสต์ทวีคูณนี้โดยเวกเตอร์แห่งการดึงจากจากนั้นจะถูกเพิ่มเข้าไปในแบบจำลองประมาณการ นี่คือ preultiplied โดยเมทริกซ์การออกแบบ, logit ผกผันของสิ่งนี้ถูกนำมาเปรียบเทียบกับเวกเตอร์ของการดึงจากและผลเวกเตอร์ไบนารีที่ส่งกลับ แต่ทั้งหมดนี้มีความหมายทางสถิติอย่างไรU ( 0 , 1 )N(0,1)U(0,1)


มันอาจจะช่วยได้มากในการทราบว่ามีการใช้งานฟิลด์ใดในนี้
naught101

2
โดยพื้นฐานแล้วฟังก์ชั่นนี้จะสร้างข้อมูลจากโมเดลของคุณ (บ่อยครั้ง) ซึ่งรวมถึงความไม่แน่นอนเกี่ยวกับพารามิเตอร์จริง มันอาจเป็นส่วนหนึ่งของกิจวัตรประจำวันของเบย์เซียน MCMC แต่ยังสามารถนำมาใช้ในการวิเคราะห์พลังงานแบบจำลอง (NB, การวิเคราะห์พลังงานตามข้อมูลก่อนหน้านี้ที่ไม่คำนึงถึงความไม่แน่นอนในแง่ดี )
gung - Reinstate Monica

ยินดีต้อนรับ @PSellaz เนื่องจากไม่มีใครตอบฉันจะเปลี่ยนมันเป็นคำตอบ 'ทางการ'
gung - Reinstate Monica

คำตอบ:


7

ฟังก์ชั่นนี้ทำงานอย่างไร:
โดยพื้นฐานแล้วฟังก์ชั่นนี้จะสร้างข้อมูลการตอบกลับปลอม (เช่น ) ข้อมูลใหม่จากแบบจำลองข้อมูลของคุณ รูปแบบที่ใช้อยู่เป็นแบบจำลองมาตรฐานที่ใช้บ่อย ตามธรรมเนียมสมมติว่าข้อมูล * ของคุณเป็นค่าคงที่ที่รู้จักกัน - มันไม่ได้ถูกสุ่มตัวอย่าง แต่อย่างใด สิ่งที่ฉันเห็นว่าเป็นคุณสมบัติที่สำคัญของฟังก์ชั่นนี้คือมันผสมผสานความไม่แน่นอนเกี่ยวกับพารามิเตอร์ที่ประมาณไว้ XYX

* โปรดทราบว่าคุณต้องเพิ่มเวกเตอร์เป็นคอลัมน์ซ้ายสุดของเมทริกซ์ของคุณด้วยตนเองก่อนที่จะป้อนข้อมูลลงในฟังก์ชันเว้นแต่คุณต้องการระงับการสกัดกั้น (ซึ่งโดยทั่วไปไม่ใช่ความคิดที่ดี)X1X

จุดประสงค์ของฟังก์ชั่นนี้คืออะไร:
ฉันไม่รู้จริงๆ มันอาจเป็นส่วนหนึ่งของกิจวัตรประจำวันของเบย์เซียน 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) และจากนั้นสร้างแบบจำลอง iid จำนวนมากตามแบบนี้ (วางไว้ในฟังก์ชั่นเดียวกันจะไม่จำเป็นสาเหตุที่เหมาะสมที่จะทำซ้ำในแต่ละครั้งที่ชะลอตัวลงอย่างมากในการคำนวณ.) จากแบบจำลองเหล่านี้หนึ่งสามารถกู้คืน ( อนึ่ง ) ช่วงเวลาที่การคาดการณ์สำหรับการรวมไม่เชิงเส้นหรือซับซ้อนมากของการตอบสนอง
whuber

@whuber ฉันเห็นด้วย จริง ๆ แล้วฉันคิดว่าจะแนะนำให้ฟังก์ชั่นนั้นแบ่งออกเป็น 2 ฟังก์ชั่นที่แตกต่างกันก่อนที่จะถูกใช้เพื่อจำลองสถานการณ์ แต่ดูเหมือนว่ามันไม่ได้เป็นส่วนหนึ่งของคำถาม
gung - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.