ADP (R)

[R] length of 'dimnames' [2] not equal to array extent

멋쟁이천재사자 2022. 10. 30. 23:04

오류

length of 'dimnames' [2] not equal to array extent

 

발생

베이즈회귀(bayesreg) 모델을 통해 예측을 시도(predict)하는 과정에서 발생

 

재현

library(car) 
library(bayesreg)
 m <- bayesreg(
  income ~ education+prestige ,
  data=Prestige,
  model = "normal",
  prior = "ridge",
  n.samples = 1000,
  burnin = 1000,
  thin = 5,
  t.dof = 5
)

predict(
  m,
  data.frame(education=17,prestige=90),
  type = "linpred",
  bayes.avg = FALSE,
  sum.stat = "mean",
  CI = 95
)

 

연구

newdata 인수에 Prestige 를 주면 에러가 안남.
이는 모델 생성시 사용한 data 포맷과 동일한 포맷의 newdata 가 인수로 들어가야 함을 의미
그런데 Prestige 중 하나의 행 즉 Prestige[1,]을 주면 에러가 남.

Prestige[4:5,] 와 같이 2개 이상의 행이면 문제가 없다.

 

깔끔한 해결책은 아직 모르겠습니다.

지저분하지만 data.frame(education=17,prestige=90) 에 훈련데이터에 있는 변수들을 추가하고 하나의 추가적인 행을 추가해서 예측을 하면 오류를 피할 수가 있습니다.

 

workaround

test <- rbind(data.frame(education=17,income=NA,women=NA,prestige=90,census=NA,type=NA),
              data.frame(education=17,income=NA,women=NA,prestige=90,census=NA,type=NA))
predict(
  m,
  test,
  type = "linpred",
  bayes.avg = FALSE,
  sum.stat = "mean",
  CI = 95
)