Объяснение разницы в оригинальной и начальной загрузке
У меня есть следующая функция; (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