[R-sig-Geo] Error in spatialreg::predict.sarlm: unknown mismatch. please report this bug

Jiawen Ng |ove|y||tt|ed@|@|e@ @end|ng |rom gm@||@com
Sun Jul 7 01:52:53 CEST 2019


Dear All,

I am trying to do a out-of-sample prediction using predict.sarlm but I am
getting the 'unknown mismatch' error from predict.sarlm.

I have a training and a testing spatial points dataframe (train_spdf and
test_spdf) and I know that I would require a listw object that contains the
neighbours of the training set for fitting the model and a listw object
that contains the neighbours of training + testing set for predicting.

Here is how I have created the listw object for predicting:
all_coords <- rbind(train_spdf using coords, test_spdf using coords)
col.rel.nb <- graph2nb(relativeneigh(all_coords), sym=TRUE)
test.listw <- nb2listw(col.rel.nb)

It seems like there are at least 2 ways one can create the listw object for
model fitting.

First Way:
nb <- graph2nb(relativeneigh(train_spdf using coords), sym=TRUE)
train.listw <- nb2listw(nb)

Second Way:
train_index <- rep(1:214) # the first 214 observations should be my
training set since that was how I rbind-ed it in all_coords object
train.listw <- subset(test.listw, 1:nrow(all_coords) %in% train_index)

Eventually, the train.listw and test.listw object will be used as follows:

model <- spatialreg::lagsarlm(myformula, data=train_spdf using data,
                        train.listw, type="mixed",zero.policy = T)

pred <- spatialreg::predict.sarlm(model, test_spdf using data,
test.listw,zero.policy = T)

When I did it the first way, I obtained an error and warning messages from
the predict.sarlm function:
Error in spatialreg::predict.sarlm(model, final_test_spdf using data, test.listw,
 :
  unknown mismatch. please report this bug
In addition: Warning messages:
1: In spatialreg::predict.sarlm(model, final_test_spdf using data, test.listw,  :
  some region.id are both in data and newdata
2: In colnames(Xs.not.lagged) != colnames(Xo) :
  longer object length is not a multiple of shorter object length

When I did it the second way,  I obtained warning messages from the
lagsarlm function:
Warning message:
In spatialreg::lagsarlm(as.formula(rest_formula), data =
final_train_spdf using data,  :
  Aliased variables found:
A lag.B lag.C lag.D lag. E lag.F lag.G lag.H lag.I lag.J lag.K lag.L lag.M
lag.N lag.O lag.P  [... truncated]

And then the same error and warning messages as the first way when using
the predict.sarlm function:
Error in spatialreg::predict.sarlm(model2, final_test_spdf using data,
test.listw,  :
  unknown mismatch. please report this bug
In addition: Warning messages:
1: In spatialreg::predict.sarlm(model2, final_test_spdf using data, test.listw,  :
  some region.id are both in data and newdata
2: In colnames(Xs.not.lagged) != colnames(Xo) :
  longer object length is not a multiple of shorter object length

As you can see, either method would have me run into the 'unknown mismatch'
error in predict.sarlm.

Here I have 2 questions:
1. Which way should be the right way of creating the listw object for
fitting the model?
2. How can I solve the 'unknown mismatch' error?

Would appreciate any advice! Thank you!

	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list