Еще один вариант, который несколько упрощен, но я думаю, что доставить сообщение без явного использования библиотеки, boot
которая может ввести некоторых людей в заблуждение синтаксисом, который она использует.
У нас есть линейная модель: ,y=Xβ+ϵϵ∼N(0,σ2)
Ниже приведен параметрический начальный загрузчик для этой линейной модели, это означает, что мы не пересматриваем наши исходные данные, но на самом деле мы генерируем новые данные из нашей подобранной модели. Кроме того, мы предполагаем, что начальное распределение коэффициента регрессии является симметричным и является трансляционно-инвариантным. (Очень грубо говоря, что мы можем перемещать его ось, влияя на его свойства). Идея заключается в том, что флуктуации в обусловлены и поэтому при достаточном количестве выборок они должны обеспечивать хорошее приближение к истинному распределению. из -х. Как и прежде, мы снова тестируем и определяем наши p-значения какββϵβH0:0=βj«вероятность, учитывая нулевую гипотезу для распределения вероятности данных, что результат будет таким же экстремальным, как или более экстремальным, чем наблюдаемый результат» (где наблюдаемые результаты в этом случае - это, которые мы получили для нашей оригинальной модели). Итак, здесь идет:β
# Sample Size
N <- 2^12;
# Linear Model to Boostrap
Model2Boot <- lm( mpg ~ wt + disp, mtcars)
# Values of the model coefficients
Betas <- coefficients(Model2Boot)
# Number of coefficents to test against
M <- length(Betas)
# Matrix of M columns to hold Bootstraping results
BtStrpRes <- matrix( rep(0,M*N), ncol=M)
for (i in 1:N) {
# Simulate data N times from the model we assume be true
# and save the resulting coefficient in the i-th row of BtStrpRes
BtStrpRes[i,] <-coefficients(lm(unlist(simulate(Model2Boot)) ~wt + disp, mtcars))
}
#Get the p-values for coefficient
P_val1 <-mean( abs(BtStrpRes[,1] - mean(BtStrpRes[,1]) )> abs( Betas[1]))
P_val2 <-mean( abs(BtStrpRes[,2] - mean(BtStrpRes[,2]) )> abs( Betas[2]))
P_val3 <-mean( abs(BtStrpRes[,3] - mean(BtStrpRes[,3]) )> abs( Betas[3]))
#and some parametric bootstrap confidence intervals (2.5%, 97.5%)
ConfInt1 <- quantile(BtStrpRes[,1], c(.025, 0.975))
ConfInt2 <- quantile(BtStrpRes[,2], c(.025, 0.975))
ConfInt3 <- quantile(BtStrpRes[,3], c(.025, 0.975))
Как уже упоминалось, вся идея заключается в том, что у вас есть загрузочное распределение , приближенное к их истинному. (Очевидно, этот код оптимизирован для скорости, но для удобства чтения. :))β