2017-01-07 15 views
-1

데이터 세트를 테스트 및 교육 데이터 세트로 분리했습니다. 훈련 세트에 회귀 분석을 적용하려고 시도한 다음 테스트 세트에서 예측을 사용합니다. 이 작업을 수행하면 "model.frame 요소 x에 오류가 있습니다. 새 수준이 있습니다"라는 오류 메시지가 나타납니다. 내 훈련 데이터에는 나타나지 않는 테스트 데이터에 레벨이 있기 때문입니다.테스트 데이터 세트의 새로운 요소 레벨을 'NA'로 바꿀 때 오류가 발생했습니다.

내가 원하는 것은 두 데이터 세트에없는 레벨을 제거하거나 무시하는 것입니다. 나는이 일을 시도했다, 그러나 그것은 NA 어떤 수준 설정되지 않으며, id 객체는 "정수 (빈)"라고 :

id <- which(!(test$x %in% levels (train$x)) 
train$x[id] <- NA 

fit <- lm(y ~ x, data=train) 
P <- predict(fit,test) 
+0

그러나 droplevels 명령을 추가하기 전에는 첫 번째 부분이 제대로 작동하지 않습니다. 그것은 빈 정수, 또는 교체에 190708 행이 있다고 말하는 오류가 발생하는 것 같습니다. 데이터는 189590입니다. – grig109

답변

0

당신은 당신의 코드 오류 "대체 길이가 다르다"얻을 것이다 .

id <- which(!(test$x %in% levels (train$x)) 

test$x 요소가 levels(train$x)에없는 것을 알려줍니다, 그래서 당신은 교체를하고 인덱스 test$x하지 train$xid를 사용해야합니다.

test$x[id] <- NA 
test$x <- droplevels(test$x) ## also don't forget to remove unused factor levels 

fit <- lm(y ~ x, data = train) 
P <- predict(fit, test) 

모든 데이터는 train으로 작성되어 선형 회귀 모델을 작성합니다. P의 일부 예상 검색어는 NA입니다.


는 아직도 제대로 두 데이터 세트에없는 어떤 수준 식별 할 id 개체를 얻을 수 없습니다입니다. 작업 공간에서는 단지 integer(0)이 표시됩니다.

그런 다음 질문의 요지는 무엇입니까 ?? !! test$x의 모든 레벨은 levels(train$x) 안에 있으며 새로운 레벨이 없습니다.

+0

ID 개체를 가져 와서 두 데이터 집합에없는 수준을 올바르게 식별 할 수 없습니다. 작업 공간에서 정수 (공백) 만 표시됩니다. – grig109

+0

"model.frame 요소의 오류 x에 새로운 수준이 있습니다."라는 오류 메시지가 표시됩니다. 이것은 test $ x의 모든 레벨이 train $ x에 있지 않다는 것을 나타냅니다. – grig109