วิธีการรับข้อผิดพลาดมาตรฐานจากการถดถอยของการนับข้อมูลที่มีค่าศูนย์สูงเกินศูนย์จะทำอย่างไร [ปิด]


9

รหัสต่อไปนี้

PredictNew <- predict (glm.fit, newdata = Predict, X1 =X1, Y1= Y1, 
                       type = "response", se.fit = TRUE)

สร้าง 3 คอลัมน์data.frame--PredictNew, ค่าติดตั้ง, ข้อผิดพลาดมาตรฐานและคำที่เหลือขนาด

สมบูรณ์แบบ ... อย่างไรก็ตามการใช้โมเดลที่มีzeroinfl {pscl}:

PredictNew <- predict (zeroinfl.fit, newdata = Predict, X1 =X1, Y1= Y1, 
                       type = "response", se.fit = TRUE)

หรือ

PredictNew <- predict (zeroinfl.fit, newdata = Predict, X1 =X1, Y1= Y1, 
                       type = "response", se.fit = TRUE, MC = 2500, conf = .95))

สร้างเวกเตอร์คอลัมน์เดียวของค่าติดตั้งเท่านั้น อย่างไรก็ตามฉันจะกระตือรือร้นที่จะมีข้อผิดพลาดมาตรฐาน ทุกสิ่งที่ฉันได้อ่านบอกว่าพวกเขาควรจะผลิต ..

(รหัสได้ง่ายขึ้นบ้างจริง ๆ แล้วฉันมีสี่ตัวแปรและออฟเซ็ต - ไม่มีปัญหากับpredict.glmและse.fit = TRUESEs ผลิต)


5
ลองดูที่หัวข้อนี้ใน R-Help: stat.ethz.ch/pipermail/r-help/2008-December/thread.html#182806 (โดยเฉพาะข้อความจาก Achim Zeileis ที่ให้รหัสทำสิ่งที่ฉันคิดว่าคุณ พยายามทำ) ดูเหมือนว่าข้อผิดพลาดมาตรฐานจะถูกนำไปใช้กับpredict()ฟังก์ชันzeroinfl()ในขณะนี้
smillig

ขอบคุณรหัสนั้นดูเหมือนจะให้ผลลัพธ์ที่สมเหตุสมผล คนอื่น ๆ ควรทราบว่าพารามิเตอร์ทำนาย () ในฟังก์ชัน zeroinfl.predict ใหม่สำหรับ se.fit = TRUE ถูกเปลี่ยนเป็น se = TRUE เพื่อแยกช่วงเวลาที่คาดการณ์ไว้และ se
KalahariKev

คำตอบ:


4

สำหรับความรู้ของฉันpredictวิธีการสำหรับผลลัพธ์จากzeroinflไม่มีข้อผิดพลาดมาตรฐาน หากเป้าหมายของคุณคือสร้างช่วงความมั่นใจทางเลือกหนึ่งที่น่าสนใจคือการใช้ bootstrapping ฉันบอกว่าน่าสนใจเพราะ bootstrapping มีศักยภาพที่จะแข็งแกร่งกว่า (ที่สูญเสียประสิทธิภาพหากสมมติฐานทั้งหมดของ SEs ตรงกัน)

นี่คือรหัสคร่าวๆที่จะทำสิ่งที่คุณต้องการ มันจะไม่ทำงานอย่างแน่นอน แต่หวังว่าคุณจะสามารถแก้ไขที่จำเป็นได้

## load boot package
require(boot)
## output coefficients from your original model
## these can be used as starting values for your bootstrap model
## to help speed up convergence and the bootstrap
dput(round(coef(zeroinfl.fit, "count"), 3))
dput(round(coef(zeroinfl.fit, "zero"), 3))

## function to pass to the boot function to fit your model
## needs to take data, an index (as the second argument!) and your new data
f <- function(data, i, newdata) {
  require(pscl)
  m <- zeroinfl(count ~ child + camper | persons, data = data[i, ], start = list(count = c(1.598, -1.0428, 0.834), zero = c(1.297, -0.564)))
  mparams <- as.vector(t(do.call(rbind, coef(summary(m)))[, 1:2]))
  yhat <- predict(m, newdata, type = "response")
  return(c(mparams, yhat))    
}

## set the seed and do the bootstrap, make sure to set your number of cpus
## note this requires a fairly recent version of R
set.seed(10)
res <- boot(dat, f, R = 1200, newdata = Predict, parallel = "snow", ncpus = 4)

## get the bootstrapped percentile CIs
## the 10 here is because in my initial example, there were 10 parameters before predicted values
yhat <- t(sapply(10 + (1:nrow(Predict)), function(i) {
  out <- boot.ci(res, index = i, type = c("perc"))
  with(out, c(Est = t0, pLL = percent[4], pUL = percent[5]))
}))

## merge CIs with predicted values
Predict<- cbind(Predict, yhat)

ฉันดึงโค้ดนี้จากสองหน้าที่ฉันเขียนพารามิเตอร์การบูตหนึ่งอันจากการถดถอยปัวซองแบบzeroinfl zero-inflatedกับปัวซองแบบzero-inflatedและอีกอันหนึ่งแสดงให้เห็นถึงวิธีการได้รับช่วงความเชื่อมั่น bootstrapped สำหรับค่าที่คาดการณ์จากโมเดลทวินามเชิงลบ . รวมกันหวังว่าจะให้ตัวอย่างที่เพียงพอแก่คุณในการทำให้มันทำงานกับค่าที่ทำนายจากปัวซองที่มีค่าเป็นศูนย์ คุณอาจได้รับแนวคิดกราฟอีกด้วย :)


ฉันลองปรับรหัสของคุณสำหรับโมเดลทวินามลบเชิงลบที่ไม่ถูกตัดทอนในแพ็คเกจ VGAM แต่ได้รับข้อผิดพลาด ฉันควรสร้างคำถามใหม่ที่นี่ในประวัติย่อและลิงค์ที่นี่? ฉันขอขอบคุณที่คุณช่วยด้วย นี่เป็นข้อผิดพลาดที่ฉันได้รับ: Error in X.vlm.save %*% coefstart : non-conformable arguments.
Raphael K
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.