gpt4 book ai didi

r - Beta 回归的 DFFIT

转载 作者:行者123 更新时间:2023-12-04 09:00:22 25 4
gpt4 key购买 nike

我正在尝试计算 GLM 的 DFFITS,其中响应遵循 Beta 分布。通过使用 betareg R 包。但我认为这个包不支持 influence.measures()因为通过使用 dffits() 代码

require(betareg)
df<-data("ReadingSkills")
y<-ReadingSkills$accuracy
n<-length(y)

bfit<-betareg(accuracy ~ dyslexia + iq, data = ReadingSkills)
DFFITS<-dffits(bfit, infl=influence(bfit, do.coef = FALSE))
DFFITS
它产生

Error in if (model$rank == 0) { : argument is of length zero


我是 R 的新手。我不知道如何解决这个问题。请帮助解决这个问题,或者通过 R 代码给我一些关于如何手动计算 DFFIT 的提示。
问候

最佳答案

dffits未针对 "betareg" 实现对象,但您可以尝试手动计算它们。
根据 this Stack Overflow Q/A我们可以写这个函数:

dffits1 <- function(x1, bres.type="response") {
stopifnot(class(x1) %in% c("lm", "betareg"))
sapply(1:length(x1$fitted.values), function(i) {
x2 <- update(x1, data=x1$model[-i, ]) # leave one out
h <- hatvalues(x1)
nm <- rownames(x1$model[i, ])
num_dffits <- suppressWarnings(predict(x1, x1$model[i, ]) -
predict(x2, x1$model[i, ]))
residx <- if (class(x1) == "betareg") {
betareg:::residuals.betareg(x2, type=bres.type)
} else {
x2$residuals
}
denom_dffits <- sqrt(c(crossprod(residx)) / x2$df.residual*h[i])
return(num_dffits / denom_dffits)
})
}
它适用于 lm :
fit <- lm(mpg ~ hp, mtcars)
dffits1(fit)
stopifnot(all.equal(dffits1(fit), dffits(fit)))
现在让我们试试 betareg :
library(betareg)
data("ReadingSkills")

bfit <- betareg(accuracy ~ dyslexia + iq, data=ReadingSkills)
dffits1(bfit)
# 1 2 3 4 5 6 7
# -0.07590185 -0.21862047 -0.03620530 0.07349169 -0.11344968 -0.39255172 -0.25739032
# 8 9 10 11 12 13 14
# 0.33722706 0.16606198 0.10427684 0.11949807 0.09932991 0.11545263 0.09889406
# 15 16 17 18 19 20 21
# 0.21732090 0.11545263 -0.34296030 0.09850239 -0.36810187 0.09824013 0.01513643
# 22 23 24 25 26 27 28
# 0.18635669 -0.31192106 -0.39038732 0.09862045 -0.10859676 0.04362528 -0.28811277
# 29 30 31 32 33 34 35
# 0.07951977 0.02734462 -0.08419156 -0.38471945 -0.43879762 0.28583882 -0.12650591
# 36 37 38 39 40 41 42
# -0.12072976 -0.01701615 0.38653773 -0.06440176 0.15768684 0.05629040 0.12134228
# 43 44
# 0.13347935 0.19670715
看起来还不错。
备注:
  • 即使这在代码中有效,您也应该检查它是否符合您的统计要求!
  • 我用过 suppressWarnings在线 5:6dffits1 . predict(bfit, ReadingSkills)contrasts不知何故,而 predict(bfit)不(实际上应该是相同的)。但是结果是相同的:all.equal(predict(bfit, ReadingSkills), predict(bfit)) ,因此忽略警告是安全的。
  • 关于r - Beta 回归的 DFFIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63591607/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com