저는 20 개의 더하기 열이있는 데이터 프레임을 가지고 있는데,이 각각의 열에 대해 다음과 같은 glm 모델을 만들고 싶습니다. 동일한 테스트 세트로 평가하십시오.데이터 프레임을 반복하고 동일한 테스트 세트에서 평가되는 각 열에 대한 모델을 만듭니다.
# Train-test splitting
smp_size <- floor(0.70 * nrow(x))
index <- sample(seq_len(nrow(x)),size = smp_size)
train <- x[index, ]
test <- x[-index, ]
for (i in 1:22) {
names(train)[names(train) == names(train[i])] <- 'variab'
names(test)[names(test) == names(test[i])] <- 'variab'
mod <- glm(Y ~ variab, family = binomial, data = train)
assign(paste0("val", sep = "_", letters[i]), as.numeric(performance(
prediction(predict(mod, newdata = test, type = "response"),test$Y),
measure = "auc")@y.values[[1]]))
}
그러나 이것은 작동하지 않으며 "varab"라는 이름을 각 열에 할당하고 각 열에 대해 동일한 모델을 실행합니다. 이 루프는 데이터 프레임의 각 열을 반복하면서 어떻게 반복 할 수 있습니까?
답변 해 주셔서 감사합니다. "경고 메시지 : 1 : eval (family $ initialize)에서 : 비 정수 # 2 진수 glm에있는 성공! 2 : 'newdata'에 45가 있습니다. 행이 있지만 발견 된 변수에는 105 행이 있습니다. "정상입니까? –
이것은'predict (object = mod, newdata = test, type = "response")'명령에서 나온 것입니다. 실제로 어떤 이유로 예측은 테스트를 사용하지 않고 명시 적 인수가 있더라도 newdata 인수에 대비합니다. 나는 전에 그것을 만난 적이 없지만 그것을 해결하고 내 글을 편집 할 것입니다. – Nate
업데이트 된 답변으로 문제가 해결되고 올바르게 작동합니다. 원래'performance()'또는'prediction()'함수를 사용하지 않았기 때문에 루프의 assign 문이 변경되어보다 나은 결과를 얻을 수 있습니다. 데이터가 실제로는 바이너리 데이터이기 때문에 '정수가 아닌 성공'경고가 표시되는 예제에는 문제가 없어야합니다 (불량한 예제 데이터를 선택했습니다). – Nate