Search
Write a publication
Pull to refresh

Comments 6

Не до конца понял, почему bootstrap можно использовать для расчета p-value в случае зависимых наблюдений. Тут предпосылки для ЦПТ не должны выполняться?

Потому что это непараметрический метод, он ничего "не знает" об исходных данных и ему не нужны предпосылки или предположения об их природе, в отличие от ЦПТ. Бутстрап просто на основе имеющихся данных путем многих вычислений дает возможность построить эмпирическое распределение интересующей статистики и из этого распределения поотвечать на имеющиеся вопросы.

Не совсем понял, но чем то методика напомнила монте-карло.

Да, действительно все так, в бутстрапе заложена такая идея.
Помимо бутстрапа есть еще перестановочные тесты, там элементы не возвращаются в исходную выборку. В таких тестах мы две выборки объединяем в одну и потом опять делим рандомно на 2 и так много раз.
Можно сделать исчерпывающий перестановочный тест, т.е. перебрать все имеющиеся сочетания, но их будет очень мноооого, а можно приблизительный, ограничив константой, это будет уже больше похоже на монте-карло)

Проблема вычислительных мощностей для бутстрапа может быть решена с помощью пуассоновского бутстрапа. Можно посмотреть тут: https://www.unofficialgoogledatascience.com/2015/08/an-introduction-to-poisson-bootstrap26.html?m=1

Посмотрел. Пуассоновский бутсрап не решает проблему вычислительных мощностей для повторного отбора (по крайней мере на одной машине), в статье такого тезиса просто нет. Там с помощью пуассоновского бутстрапа решается проблема как сгенерировать бутстрапированные выборки, не вынимая всю выборку при параллельных вычислениях, когда размер выборки n заранее не известен, а данные хранятся распределено.

Проверил разные реализации на одной машина на Python по самым затратным операциям — генерациям подвыборок. Пуассоновский бутстрап по времени оказывался не быстрее отбора с повторением, а иногда и медленнее.

import numpy as np
import pandas as pd

# df = pd.read_csv('file_name.csv')

data = df.n_bnr_clkd.values
n_trial = 5_000
print(n_trial, len(data))  # 5000, 449417


# Итерации отбора с повторением
%%time
for _ in range(n_trial):  
  _ = np.random.choice(data, size=len(data))
 # Wall time: 11.8 s


# Итерации Пуассона
%%time
for _ in range(n_trial):  
  _ = np.random.poisson (1, size=len(data))
 # Wall time: 58.7 s


# Генерация матрицы отбора с повторением
%%time
_ = np.random.choice(data, size=(n_trial, len(data)))
#  Wall time: 59.7 s


# Генерация матрицы Пуассона
%%time
_ = np.random.poisson(1, size=(n_trial, len(data)))
# Wall time: 1min 8s


Sign up to leave a comment.

Articles