Я новичок в 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)
}
Я ожидаю, что это выведет матрицу путаницы для данных тренировкитаким образом, я могу в конечном итоге использовать модель в своих данных тестирования.