Объяснение разницы в оригинальной и начальной загрузке

У меня есть следующая функция; (1) вычислить разницу отклонений для каждой имеющейся у меня переменной и (2) выполнить загрузку для разницы отклонений, которую я рассчитал на первом шаге

set.seed(1001)

xfunction <- function(d,i)
{
glm.snp1 <- glm(PHENOTYPE~d[i], family="binomial", data=training1)
null <- glm.snp1$null.deviance
residual <- glm.snp1$deviance
dDeviance <- null-residual
return(dDeviance)
}

myboot <- function(d)
{
boot(d,xfunction, R=1000)
}

result <- lapply(training1,function(x)myboot(x))

Таким образом, в основном из результата я получил значения для исходного dDeviance (без начальной загрузки), и я могу рассчитать среднее значение (dDeviance) из начальной загрузки. Мне нужна помощь в объяснении, почему исходные и средние значения начальной загрузки слишком разные? Например, для одной из переменных исходное значение dDeviance равно 0,024, а среднее значение начальной загрузки dDeviance равно 0,000412.

0 ответов

Как указано в комментариях, лучше подмножество индексов data.frame, чтобы сделать его совместимым с boot. Если вы хотите перебрать разные переменные и применить эту функцию, лучше сделать это внутри итерации.

Для каждого бутстрапа вы подбираете разные модели и извлекаете значения.

Поэтому мы переписываем функцию, и она принимает дополнительный параметр формулы, indep_var который определяет столбцы для регрессии PHENOTYPE:

xfunction <- function(d,ind,indep_var){

    dDeviance = sapply(indep_var,function(V){
         f = reformulate(V,response="PHENOTYPE")  
         glm.snp1 <- glm(f, family="binomial", data=d[ind,])
         glm.snp1$null.deviance-glm.snp1$deviance
    })
return(dDeviance)
}  

Мы можем настроить пример набора данных:

set.seed(111)
training1 = data.frame(PHENOTYPE=rbinom(100,1,0.5),matrix(rnorm(500),ncol=5))

head(training1)
  PHENOTYPE         X1          X2         X3         X4         X5
1         1  0.1916634 -0.09152026 -0.9685094 -1.0503824 -0.9137690
2         1  1.5525443 -1.87430581  0.9119331  0.3251424  0.1126909
3         0  0.9142423 -0.66416202  0.0928326 -2.1048716 -2.3597249
4         1  0.3586254  0.20341282 -0.5329309 -0.9551027 -1.5693983
5         0  0.1750956 -2.59444339 -1.6669055 -0.5306399  1.2274569
6         0 -0.8472678 -0.09373393 -0.5743455  0.8274405  0.7620480

И попробуйте это на данных:

xfunction(training1,1:nrow(training1),indep_var=c("X1","X2","X3"))
       X1        X2        X3 
0.1189847 0.2512539 0.2684927 

Затем с помощью начальной загрузки:

library(boot)
boot(training1,xfunction,R=1000,indep_var=c("X1","X2","X3"))

ORDINARY NONPARAMETRIC BOOTSTRAP


Call:
boot(data = training1, statistic = xfunction, R = 1000, indep_var = c("X1", 
    "X2", "X3"))


Bootstrap Statistics :
     original   bias    std. error
t1* 0.1189847 1.033286    1.564971
t2* 0.2512539 1.047503    1.863012
t3* 0.2684927 1.005062    1.747959
Другие вопросы по тегам