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.
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:En este código, la función
samplewmean2
sólo toma dos argumentos, los datosd
y los pesosw
. En la funciónboot
, el argumentostatistic
ahora es una función anónima que toma dos argumentos: losdata
eindices
que representan las filas muestreadas. La funciónsamplewmean2
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ónboot
ahora esmtcars[, 1:6, drop = FALSE]
para incluir sólo las columnas relevantes. El argumentoR
se mantiene igual ya que especifica cuántas muestras bootstrap generar. Los resultados se almacenarán en el objetoresults_row
.