2013-07-02 3 views
2

У меня есть модель логистической регрессии, которую я использую, чтобы предсказать размер в зрелости для короля-краба, но у меня возникли проблемы с настройкой кода для начальной загрузки с использованием загрузочного пакета. Это то, что у меня есть:Bootstrapping CI для модели логистической регрессии

#FEMALE GKC SAM# 
LowerChatham<-read.table(file=file.choose(),header=TRUE) 

#LOGISTIC REGRESSION FIT# 
glm.out<-glm(Mature~CL,family=binomial(link=logit),data=LowerChatham) 
plot(Mature~CL,data=LowerChatham) 
lines(LowerChatham$CL,glm.out$fitted,col="red") 
title(main="Lower Chatham") 
summary(glm.out) 
segments(98.9,0,98.9,0.5,col=1,lty=3,lwd=3) 

SAM<-data.frame(CL=98.97) 
predict(glm.out,SAM,type="response") 

Я хотел бы, чтобы грузиться статистика CL = 98,97, так как я заинтересован в размере, при котором 50% краба являются зрелыми, но я понятия не имею, как настроить свою функцию чтобы указать эту статистику и не говоря уже о функции бутстрапа вообще, чтобы получить мой 95% ДИ Любая помощь будет принята с благодарностью! Благодаря!

+0

Вам нужен 'boot' пакет. (Очень неясно, что вы подразумеваете под «начальной загрузкой статистики CL = 98,97», поэтому вам может потребоваться сделать дополнительную домашнюю работу или поставить вопрос на перевод на CrossValidated.com). Помните ... мы не видим ваш экран. –

+3

Попробуйте написать воспроизводимый пример. Проверьте это как: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – marbel

+0

Да, я пытаюсь использовать загрузочный пакет для загрузки моей модели логистической регрессии чтобы получить доверительные интервалы для CL = 98,97, чтобы определить, насколько я уверен в своей оценке решения, является ли краб с этим размером зрелым или нет. Но мне трудно понять, как написать функцию, чтобы она всегда возвращала CL = 98.97. Я также не понимаю, о чем говорят индексы в bootpackage. – user2544557

ответ

3

В каждой итерации начальной загрузки, вы хотите сделать что-то вроде

range <- 1:100 # this could be any substantively meaningful range 
p <- predict(glm.out, newdata = data.frame(CL=range), "response") 
range[match(TRUE,p>.5)] # predicted probability of 50% maturity 

где указать диапазон значений CL для любой точности вам нужно. Затем вычислите прогнозируемую вероятность зрелости на каждом из этих уровней. Затем найдите пороговое значение в диапазоне, где прогнозируемая вероятность равна 0,5. Это статистика, которая звучит так, как будто вы хотите загрузиться.

Для этого вам также не нужен boot. Если определить функцию, образцы и выходы, статистика как его результат, вы можете просто сделать replicate(1000, myfun), чтобы получить вашу самозагрузку распределения следующим образом:

myfun <- function(){ 
    srows <- sample(1:nrow(LowerChatham),nrow(LowerChatham),TRUE) 
    glm.out <- (Mature ~ CL, family=binomial(link=logit), data=LowerChatham[srows,]) 
    range <- 1:100 # this could be any substantively meaningful range 
    p <- predict(glm.out, newdata = data.frame(CL=range), "response") 
    return(range[match(TRUE,p>.5)]) # predicted probability of 50% maturity 
} 
bootdist <- replicate(1000, myfun()) # your distribution 
quantile(unlist(bootdist),c(.025,.975)) # 95% CI 
+0

Удивительный! Большое спасибо! У меня все еще возникают проблемы с определением функции, которая выводит эту статистику с помощью загрузочного пакета. Могу ли я просто изменить свою модель на glm.out <- (Mature ~ CL = 99, family = binomial (link = logit), data = LowerChatham) ??? или мне нужно определить кадр данных и как-то вставить его в функцию. Мои навыки R не так хороши, поэтому спасибо за ваше терпение заранее. – user2544557

+0

См. Мое редактирование для примера. – Thomas

+0

Право на все работает, кроме последней строки кода. quantile (bootdist, c (.025, .975)) Когда я запускаю эту строку, я получаю следующую ошибку, и я понятия не имею, как это исправить. Ошибка в sort.int (x, na.last = na.last, убывающая = убывающая, ...): 'x' должно быть атомарным – user2544557

Смежные вопросы