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.

Inicio de la media ponderada en el dataframe a través de las filas.

Tengo una pregunta sobre la implementación de una media ponderada con bootstrap.

Dependiendo de cómo esté estructurados mis datos, a veces quiero realizar un bootstrap por columnas y otras veces por filas.

En otra publicación (https://stackoverflow.com/questions/46231261/bootstrap-weighted-mean-in-r), se proporcionó el siguiente código para realizar un bootstrap de la media ponderada por columnas:

library(boot)

samplewmean <- function(d, i, j) {
    d <- d[i, ]
    w <- j[i, ]
    return(weighted.mean(d, w))
}

results_qsec <- boot(data= mtcars[, 7, drop = FALSE], 
                     statistic = samplewmean, 
                     R=10000, 
                     j = mtcars[, 6 , drop = FALSE])

Esto funciona perfectamente (compruebe: weighted.mean(mtcars[,7], mtcars[,6]).

Sin embargo, ahora también quiero realizar un bootstrap por filas, para lo cual pensé que el siguiente código funcionaría:

samplewmean2 <- function(d, i, j) {
    d <- d[, i]
    w <- j[, i]
    return(weighted.mean(d, w))
}

results_qsec2 <- boot(data= mtcars[7,  , drop = FALSE], 
                     statistic = samplewmean2, 
                     R=10000, 
                     j = mtcars[6,  , drop = FALSE])

Lamentablemente esto no está funcionando y no sé qué debo cambiar.

Muchas gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para iniciar en filas, la función samplewmean2 debe ser modificada para tomar las filas como el primer argumento y los pesos como el segundo argumento. El código debe ser el siguiente:

    samplewmean2 <- function(d, w) {
      return(weighted.mean(d, w))
    }
    
    results_row <- boot(data = mtcars[, 1:6, drop = FALSE], 
                        statistic = function(data, indices){
                          samplewmean2(data[indices, ], data[indices, 6])
                        },
                        R = 10000)
    

    En este código, la función samplewmean2 sólo toma dos argumentos, los datos d y los pesos w. En la función boot, el argumento statistic ahora es una función anónima que toma dos argumentos: los data e indices que representan las filas muestreadas. La función samplewmean2 es llamada dentro de esta función anónima usando las filas muestreadas y los pesos de la última columna (data[indices, 6]).

    El argumento data en la función boot ahora es mtcars[, 1:6, drop = FALSE] para incluir sólo las columnas relevantes. El argumento R se mantiene igual ya que especifica cuántas muestras bootstrap generar. Los resultados se almacenarán en el objeto results_row.

Comments are closed.