Cómo calcular el promedio ponderado en un bucle en R
Me gustaría ejecutar una bota de una media ponderada en un bucle for (no creo que pueda usar ‘apply’ porque se trata de una media ponderada). Solo necesitaría almacenar los errores estándar resultantes en un dataframe. Otro post proporcionó el código para calcular la media ponderada en una bota (https://stackoverflow.com/questions/46231261/bootstrap-weighted-mean-in-r) y funciona perfectamente:
library(boot)
mtcarsdata = mtcars #dataframe para los datos
mtcarsweights = rev(mtcars) #dataframe para los pesos
samplewmean <- function(d, i, j) {
d <- d[i, ]
w <- j[i, ]
return(weighted.mean(d, w))
}
resultsqsec <- sd(boot(data= mtcarsdata[, 6, drop = FALSE],
statistic = samplewmean,
R=10000,
j = mtcarsweights[, 6 , drop = FALSE])[[2]], na.rm=T)
resultsqsec
Luego, para ejecutarlo en un bucle, intenté:
outputboot = matrix(NA, nrow=11, ncol=1)
for (k in 1:11){
outputboot[1,k] = sd(boot(data= mtcarsdata[, k, drop = FALSE],
statistic = samplewmean,
R=10000,
j = mtcarsweights[, k, drop = FALSE])[[2]], na.rm=T)
}
outputboot
Pero esto no funciona. La primera salida ni siquiera es correcta. Sospecho que el código no puede funcionar con dos iteradores: uno para iterar sobre las columnas y el otro para el muestreo con reemplazo.
Espero que alguien pueda ofrecer alguna ayuda.
davy.ai
El problema con el código proporcionado es que la matriz de salida no se está llenando correctamente. El indexado para la matriz de salida debe ser
outputboot[k, 1]
, nooutputboot[1, k]
, ya que queremos iterar sobre las columnas y almacenar el error estándar resultante en la fila correspondiente de la matriz de salida.El código corregido sería:
Este código ahora debería darte la salida deseada de un dataframe con los errores estándar resultantes para cada columna del dataframe mtcars después de ejecutar un bootstrap de la media ponderada.