Ще один варіант, який є дещо спрощеним, але, думаю, доставити повідомлення без явного використання бібліотеки, boot
що може заплутати деяких людей із синтаксисом, який він використовує.
У нас є лінійна модель: ,у= Xβ+ ϵϵ ∼ N( 0 ,σ2)
Далі наведено параметричний завантажувальний механізм для цієї лінійної моделі, це означає, що ми не перепробовуємо свої вихідні дані, але насправді ми генеруємо нові дані з нашої встановленої моделі. Крім того, ми припускаємо, що завантажене розподіл коефіцієнта регресії є симетричним і є інваріантним перекладом. (Дуже грубо кажучи, що ми можемо переміщувати вісь її, впливаючи на її властивості). Ідея позаду полягає в тому, що коливання пов'язані з і тому з достатньою кількістю зразків вони повинні забезпечити гарне наближення справжнього розподілу з -х. Як і раніше, ми перевіряємо знову і ми визначали наші p-значення якββϵβН0: 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))
Як уже згадувалося, вся ідея полягає в тому, що ви маєте завантажене завантаження -х наближених до їх справжнього. (Ясно, що цей код оптимізований для швидкості, але для читабельності. :))β