Я пытаюсь использовать функции Bootstrap.jl
для получения стандартной ошибки (SE) взвешенной функции (например, взвешенной медианы).
См. ниже код Bootstrap.bootstrap
, чтобы получить SE невзвешенной медианы.
using StatsBase, DataFrames, Bootstrap
v = collect(1:1:20)
bootstrap(median, v, BasicSampling(100))
Теперь мне нужно передать второй аргумент median
выше, чтобы получить SE взвешенного median
. Вне функции bootstrap
это выглядит так:
w = collect(0.1:0.1:2)
median(v, Weights(w))
Как я могу передать второй аргумент функции median
внутри bootstrap
, чтобы включить веса? Обратите внимание, что бутстрап-ресемплинг следует применять к обоим векторам, рисуя одинаковые индексы для них обоих.
Вы можете передать DataFrame
, содержащий оба вектора, во второй аргумент bootstrap
. Затем напишите анонимную функцию для использования каждого столбца в median
. Например.
df = DataFrame(v = collect(1:1:20),
w = collect(0.1:0.1:2))
bootstrap(d -> median(d[!,:v], Weights(d[!,:w])), df, BasicSampling(100))
@phipsgabler Если вы используете bootstrap(v -> median(v, Weights(w)), v, BasicSampling(10000))
, вы увидите, что SE и смещение очень разные (и намного больше). Я полагаю, это потому, что функция выполняет повторную выборку v
, но сохраняет вектор w
нетронутым. Это означает, что повторно выбранные случаи в v
затем используют веса, которые не соответствуют наблюдению. При передаче DataFrame
каждое наблюдение в v
сопоставляется с их правильным весом.
Разве вы не можете просто закрыть веса без фрейма данных?
v -> median(v, Weights(w))
.