IT이야기

경고 받기 : " 'newdata'에는 1 개의 행이 있지만 발견 된 변수에는 32 개의 행이 있습니다."

cyworld 2021. 4. 11. 09:33
반응형

경고 받기 : " 'newdata'에는 1 개의 행이 있지만 발견 된 변수에는 32 개의 행이 있습니다."


R에서 predict 및 lm 기능을 사용하는 동안 특이 함을 발견했습니다. 동일한 데이터에 대해 데이터 프레임과 벡터에 대해 다른 결과를 얻었습니다.

DataFrame 코드 :

data(mtcars)
fitCar<-lm(mtcars$mpg~mtcars$wt)
predict(fitCar,
        data.frame(x=mean(mtcars$wt)),
        interval="confidence")

산출:

     fit       lwr      upr
1  23.282611 21.988668 24.57655
2  21.919770 20.752751 23.08679
3  24.885952 23.383008 26.38890
4  20.102650 19.003004 21.20230
5  18.900144 17.771469 20.02882
6  18.793255 17.659216 19.92729
7  18.205363 17.034274 19.37645
8  20.236262 19.136179 21.33635
9  20.450041 19.347720 21.55236
10 18.900144 17.771469 20.02882
11 18.900144 17.771469 20.02882
12 15.533127 14.064349 17.00190
13 17.350247 16.104455 18.59604
14 17.083024 15.809403 18.35664
15  9.226650  6.658271 11.79503
16  8.296712  5.547468 11.04596
17  8.718926  6.052112 11.38574
18 25.527289 23.927797 27.12678
19 28.653805 26.519252 30.78836
20 27.478021 25.554415 29.40163
21 24.111004 22.715653 25.50635
22 18.472586 17.319886 19.62529
23 18.926866 17.799465 20.05427
24 16.762355 15.452833 18.07188
25 16.735633 15.423002 18.04826
26 26.943574 25.112491 28.77466
27 25.847957 24.198041 27.49787
28 29.198941 26.963760 31.43412
29 20.343151 19.242185 21.44412
30 22.480940 21.268498 23.69338
31 18.205363 17.034274 19.37645
32 22.427495 21.219818 23.63517

경고 메시지 :

'newdata'에는 1 개의 행이 있지만 찾은 변수에는 32 개의 행이 있습니다.

두 데이터를 벡터로 분리하면 다른 대답을 얻었습니다.

벡터 코드

predict(fit,data.frame(x=mean(x)), interval="confidence")

산출:

    fit   lwr   upr
1 20.09 18.99 21.19

이 차이의 이유는 무엇입니까?


이것은 당신 data과 당신 사이에 다른 이름을 사용하는 문제이며 newdata벡터 또는 데이터 프레임 사용 사이의 문제가 아닙니다.

lm함수를 사용 predict하여 모델을 피팅 한 다음을 사용 하여 예측 predict을 수행하면 newdata. 첫 번째 경우 이름이 x충돌 mtcars$wt하므로 경고가 표시됩니다.

내가 말하는 것에 대한 그림은 여기를 참조하십시오.

이것은 당신이 한 일이며 오류가 발생하지 않았습니다.

a <- mtcars$mpg
x <- mtcars$wt

#here you use x as a name
fitCar <- lm(a ~ x) 
#here you use x again as a name in newdata.
predict(fitCar, data.frame(x = mean(x)), interval = "confidence") 

       fit      lwr      upr
1 20.09062 18.99098 21.19027

이 경우 x라는 이름을 사용하여 모델을 적합하고 newdata. 이렇게하면 경고가 표시되지 않고 예상 한 것입니다.

모델을 맞출 때 이름을 다른 이름으로 변경하면 어떻게되는지 보겠습니다.

a <- mtcars$mpg
#name it b this time
b <- mtcars$wt 

fitCar <- lm(a ~ b) 
#here I am using name x as previously
predict(fitCar, data.frame(x = mean(x)), interval = "confidence") 

         fit       lwr      upr
1  23.282611 21.988668 24.57655
2  21.919770 20.752751 23.08679
3  24.885952 23.383008 26.38890
4  20.102650 19.003004 21.20230
5  18.900144 17.771469 20.02882
Warning message:
'newdata' had 1 row but variables found have 32 rows 

내가 지금했던 유일한 이름을 변경하는 것이었다 x에 모델을 피팅 할 때 b다음 이름을 사용하여 예측 xnewdata. 보시다시피 귀하의 질문과 동일한 오류가 발생했습니다.

이것이 지금 명확하기를 바랍니다!


lm 함수의 공식에서 datasetname $ variablename 패턴을 사용하는 변수를 참조하지 마십시오. 대신 variablename + variablename을 사용하십시오. 'newdata'에는 nrow (test) 행이 있지만 발견 된 변수에는 nrow (train) 행이 있습니다.


이름을 만들지 않고이를 우회하는 방법은 다음을 사용하는 것입니다.

fitCar<-lm(mpg ~ wt, mtcars) #here you use x as a name
predict(fitCar,data.frame(wt=mean(mtcars$wt)), interval="confidence") 

$기호를 사용하여 데이터 이름과 함께 변수 이름을 사용할 때 동일한 문제가 발생했습니다 .

그래서 대신 :

fitCar<-lm(mtcars$mpg~mtcars$wt)
predict(fitCar,
        data.frame(x=mean(mtcars$wt)),
        interval="confidence")

이것을 사용하십시오 :

fitCar<-lm(mpg~wt , data = mtcars)
predict(fitCar,  
wt = mean(mtcars$wt), interval = "confidence")

참조 URL : https://stackoverflow.com/questions/27464893/getting-warning-newdata-had-1-row-but-variables-found-have-32-rows-on-pred

반응형