2017-11-13 23 views
1

다음과 같은 유사한 질문과 답변을 검토했지만 다른 질문을하기에 충분하지 않은 것으로 생각됩니다.newdata에 대한 예측 경고

Getting Warning: " 'newdata' had 1 row but variables found have 32 rows" on predict.lm in R

R Warning: newdata' had 15 rows but variables found have 22 rows

Warning message 'newdata' had 1 row but variables found have 16 rows in R

warning when calculating predicted values

Trouble using predict with linear model in R

Predict.lm in R fails to recognize newdata

,536,913,632 10

마지막으로 나열된 질문은 모델링 된 것과 득점되는 것 사이의 명명 규칙의 핵심에 이르는 Joran의 커다란 답을 얻었습니다.

필자가 맞추는 모델은 몇 가지 명명 문제를 생성하는 다항식입니다.

 val  poly(grp, 2).1 poly(grp, 2).2 
1 39.54227 -0.290170670 0.374017601 
2 48.68225 -0.272368788 0.308602552 

주 내 예측 변수의 이름 :

mdl <- lm(val ~ poly(grp,2), data = mRetCurv) 
model.frame(mdl) 

다음과 같은 출력을 생성합니다. 내가

predict.lm(mdl, newdata = apl$grp) 

를 호출하면 나는 변수 GRP와 같은 표준 경고를! = 폴리 (GRP, 2) 0.1 또는 폴리 (GRP, 2) .2까지 predict.lm로 우려하고있다. 나는 grp의 중복 열을 만들고 model.frame과 일치하도록 두 이름을 바꾸려고했지만 R은 "poly (grp, 2) .1"을 열 이름으로 사용하지 않았습니다. 또한 많은 행에 적용 할 때 데이터를 복제하는 데이터 효율적인 솔루션이 아닙니다.

도움을 주시면 감사하겠습니다.

+1

'newdata'는 벡터가 아닌 데이터 프레임이어야한다고 생각합니다. 'predict (mdl, newdata = apl)'를 실행하면 어떻게됩니까? – eipi10

+0

apl은 데이터 프레임이며 이미 변수 grp가 있습니다. 즉, 나는 방금 말한 것을 시도하고 apl $ grp를 떨어 뜨 렸습니다. 그리고 그것은 완벽하게 작동했습니다. 덧글 대신 대답으로 추가하면 나는 그것을 당신에게 맞는 것으로 표시하는 것이 행복 할 것입니다. – VPMACH

답변

0

apl$grp는 벡터이다 고맙지 만 predict는 데이터 프레임이기 위하여 newdata 인수가 필요합니다. *이 데이터 프레임에는 모델에 맞는 예측 변수와 이름이 같은 열이 있어야합니다 (다른 열도 포함 할 수 있음). 그래서, 다음 코드는 작동합니다 : 당신은 predict.lm보다는 predict을 사용할 수 있습니다

predict(mdl, newdata = apl) 

. mdllm 클래스의 개체이며 predictpredict.lm 메서드를 자동으로 "디스패치"합니다. 이것이 lm 모델이므로


*

엄밀히 말하면, 전달 도착 predict "방법"이며 그 predict.lm 방법 newdata는 데이터 프레임이 될 것을 요구한다. predict.glm도 데이터 프레임이 필요합니다. 그러나 다른 유형의 인수를 사용할 수있는 일부 predict 메서드가 있습니다.예를 들어

  • randomForest 패키지는 newdata 인수로 데이터 프레임 또는 매트릭스를 취할 수 randomForest 모델에 대한 예측 방법이있다. 인수는이 경우 newx보다는 newdata이라하더라도
  • glmnet 패키지 매트릭스를 필요 glmnet 모델 predict하는 방법이있다.