Ошибка логистической регрессии: «x» имеет значение NULL, поэтому результатом будет NULLError в ans [test & ok] - PullRequest
0 голосов
/ 02 мая 2019

Я новичок в R и пытаюсь запустить модель логистической регрессии.Я создал функцию перекрестной проверки и обычную модель, используя glm.Когда я запускаю обычную модель, она работает нормально, но когда я пытаюсь использовать функцию, она выдает ошибку.

Я пытался определить переменную Y, но это ошибки

er_log=mycv.logistic(data = train_data, glmfit=payment~., yname="payment", K=3, seed=123)

Ошибка в term.formula (формула, данные = данные): аргумент не является допустимой моделью

Я также пытался использовать модель glm, которая изначально работала в функции, но этовыдает мне другую ошибку

glmfit1=glm(payment~., data=train_data, family=binomial)

er_log=mycv.logistic(data = train_data, glmfit=glmfit1, yname="payment", K=3, seed=123)

Ошибка в ans [test & ok] <- rep (yes, length.out = length (ans)) [test & ok]: замена имеет нулевую длину </strong>

Это функция, которую я пытаюсь использовать.

mycv.logistic<-

  function (data, glmfit, yname, K, seed=1) { 

   n <- nrow(data)
   set.seed(seed)

   datay=data[,yname]#response variable

   #partition the data into K subsets
   f <- ceiling(n/K)
   s <- sample(rep(1:K, f), n)  

   CV=NULL; O.P=NULL

   for (i in 1:K) { #i=1
     j.out <- seq_len(n)[(s == i)] #test data
     j.in <- seq_len(n)[(s != i)] #training data

     #model with training data
     log.fit=glm(glmfit$call, data=data[j.in,],family = 'binomial')
     #observed test set y
     testy <- datay[j.out]
     #predicted test set y
     log.predy=predict(log.fit, data[j.out,],type='response')

     le=levels(datay)
     class.p = ifelse(log.predy > 0.5,le[2], le[1] )

     #observed - predicted on test data
     error= mean(testy!=class.p)
     ovsp <- cbind(pred=class.p,obs=testy) #pred vs obs vector

     CV <- c(CV,error) 
     O.P <- rbind(O.P,ovsp)
     #error rates 

   }

   #Output
   list(call = glmfit$call, K = K, 
        error = mean(CV), ConfusianMatrix=table(O.P[,1],O.P[,2]), 
        seed = seed)

 }

Я ожидаю, что это выведет матрицу путаницы для данных тренировкитаким образом, я могу в конечном итоге использовать модель в своих данных тестирования.

1 Ответ

0 голосов
/ 02 мая 2019

Просто разобрался. Оказывается, моя переменная ответа содержала 0 или 1 и представляла собой числовое значение, которое нужно было преобразовать в коэффициент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...