2014-11-15 2 views
0

Я пишу функцию для выполнения логистической регрессии на двух столбцах данных. Я не могу обойти ошибки ... Я пытаюсь использовать 10-кратное перекрестное подтверждение. Вот код, я использую:проблемы с перекрестным кодом проверки - r -

SAdata = read.table("http://statweb.stanford.edu/~tibs/ElemStatLearn/datasets/SAheart.data", 
        sep=",",head=T,row.names=1) 

log.fun = function(x,y) { 

    prediction = data.frame() 
    tset = data.frame() 
    dframe = cbind(x,y) 
    dframe = as.data.frame(dframe) 
    dframe$fold = sample(1:10, nrow(data), replace = TRUE) 
    list = 1:10 

    for (i in 1:10) { 

     train = subset(dframe, fold %in% list[-i]) 
     test = subset(dframe, fold %in% c(i)) 
     model = glm(x~y, data=train, family=binomial) 
     pred = as.data.frame(predict(model, test[,-1])) 
     prediction <- rbind(prediction, pred) 

    } 
} 

log.fun(SAdata$chd,SAdata$obesity) 

Ошибка я получаю «Ошибка в sample.int (длина (х), размер, замена проб): недействителен„размер“аргумент»

Есть идеи?

+0

От ошибки, я предположил бы, что проблема заключается в 'dframe $ складки = образец (1:10, nrow (данные), замените = TRUE)' строки. У вас нет данных, определяемых где угодно. Что вы ожидали от этого? – MrFlick

+0

Спасибо. Я искал код ... это должно быть dframe вместо данных. – Brockagh

ответ

0

Это своего рода суб-оптимальное использование для петель и специально моделирования ... если вы хотите попробовать некоторые хорошие модели разработки попробовать пакет «каре»

Если вы все еще хотите использовать эту функцию здесь является обойти

SAdata = read.table("http://statweb.stanford.edu/~tibs/ElemStatLearn/datasets/SAheart.data",sep=",",head=T,row.names=1) 

log.fun=function(x,y){ 

    prediction = data.frame() 
    tset=data.frame() 
    dframe=cbind(x,y) 
    dframe=as.data.frame(dframe) 
    dframe$fold = sample(1:10, nrow(dframe), replace = TRUE) 
    list = 1:10 

    results <- list() 
    for (i in 1:10) {  

    results[[paste0('Fold',i)]]$train <- subset(dframe, fold %in% list[-i]) 
    results[[paste0('Fold',i)]]$test <- subset(dframe, fold %in% c(i)) 
    results[[paste0('Fold',i)]]$model <- glm(x~y, data=results[[i]]$train, family=binomial) 
    results[[paste0('Fold',i)]]$pred <- as.data.frame(predict(results[[i]]$model, results[[i]]$test[,-1])) 
    results[[paste0('Fold',i)]]$prediction <- rbind(prediction, results[[i]]$pred) 

} 
results} 


your_results<-log.fun(SAdata$chd,SAdata$obesity) 

head(your_results$Fold1$prediction) 

на самом деле вы были некоторые проблемы в функции «образец», так как вы с указанием «данные», и что объект не существует ... Я заменить его на dframe и добавлены некоторые имена к каждой части вашего Результаты.

Надеется, что это помогает

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