From 66da88519d1783af1ab47fe58e7a8c6b0c17acce Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 24 Oct 2023 19:46:54 +0200 Subject: [PATCH] work --- R/binned_residuals.R | 24 ++++++++++++++++++++---- man/binned_residuals.Rd | 11 ++++++++++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/R/binned_residuals.R b/R/binned_residuals.R index 2614b67a6..3210a228c 100644 --- a/R/binned_residuals.R +++ b/R/binned_residuals.R @@ -66,11 +66,12 @@ binned_residuals <- function(model, term = NULL, n_bins = NULL, show_dots = NULL, - residuals = c("gaussian", "exact", "boot"), ci = 0.95, + ci_type = c("gaussian", "exact", "boot"), + iterations = 1000, ...) { - residuals <- match.arg(residuals) + ci_type <- match.arg(ci_type) fv <- stats::fitted(model) mf <- insight::get_data(model, verbose = FALSE) @@ -104,10 +105,10 @@ binned_residuals <- function(model, n <- length(items) sdev <- stats::sd(y[items], na.rm = TRUE) - r <- switch(residuals, + r <- switch(ci_type, gaussian = stats::qnorm(c((1 - ci) / 2, (1 + ci) / 2), mean = ybar, sd = sdev / sqrt(n)), exact = stats:::binom.test(sum(y0[items]), n)$conf.int - fv, - boot = Hmisc::smean.cl.boot(y[items], conf.int = ci)[c("Lower", "Upper")] + boot = .boot_binned_ci(y[items], ci, iterations) ) names(r) <- c("CI_low", "CI_high") @@ -142,6 +143,21 @@ binned_residuals <- function(model, } +# utilities --------------------------- + +.boot_binned_ci <- function(x, ci = 0.95, iterations = 1000) { + x <- x[!is.na(x)] + n <- length(x) + out <- vector("numeric", iterations) + for (i in seq_len(iterations)) { + out[i] <- sum(x[sample.int(n, n, replace = TRUE)]) + } + out <- out / n + + quant <- stats::quantile(out, c((1 - ci) / 2, (1 + ci) / 2)) + c(CI_low = quant[1L], CI_high = quant[2L]) +} + # methods ----------------------------- diff --git a/man/binned_residuals.Rd b/man/binned_residuals.Rd index b8aee666e..f0362c091 100644 --- a/man/binned_residuals.Rd +++ b/man/binned_residuals.Rd @@ -4,7 +4,16 @@ \alias{binned_residuals} \title{Binned residuals for binomial logistic regression} \usage{ -binned_residuals(model, term = NULL, n_bins = NULL, show_dots = NULL, ...) +binned_residuals( + model, + term = NULL, + n_bins = NULL, + show_dots = NULL, + ci = 0.95, + ci_type = c("gaussian", "exact", "boot"), + iterations = 1000, + ... +) } \arguments{ \item{model}{A \code{glm}-object with \emph{binomial}-family.}