[R-sig-Geo] Error while using predict.sarlm
Amitha Puranik
pur@n|k@@m|th@ @end|ng |rom gm@||@com
Sun May 26 18:37:13 CEST 2019
Dear Prof. Roger Bivand,
I was able to sort the error by using the 'row.names' argument in the
knn2nb function. I extracted the ID variable from my data and passed that
as input for row.names. Now when I checked I got the following.
> str(attr(weightmatrix, "region.id"))
int [1:182] 16144 16007 16151 15910 15785 15829 16157 15909 16223 16097 ...
> str(row.names(missed_data))
chr [1:182] "16144" "16007" "16151" "15910" "15785" "15829" "16157"
"15909" "16223" ...
> all(row.names(missed_data) %in% attr(weightmatrix, "region.id"))
[1] TRUE
I am now successfully able to use the predict.sarlm function. Thanks a ton
for your help!!
Thanks & regards,
*Amitha Puranik*
On Sun, May 26, 2019 at 9:52 PM Amitha Puranik <puranik.amitha using gmail.com>
wrote:
> Dear Prof. Roger Bivand,
>
> Thanks a lot for providing a clarification for my query.
> I used the following code and found out that the region.id in listw
> object and row.names of the data do not match.
> > str(attr(weightmatrix, "region.id"))
> chr [1:182] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14"
> "15" "16" "17" ...
> > str(row.names(missed_data))
> chr [1:182] "142" "108" "149" "76" "8" "71" "45" "75" "173" "119" "22"
> "32" "156" "221" ...
> > all(row.names(missed_data) %in% attr(weightmatrix, "region.id"))
> [1] FALSE
>
> How can I change the row.names of my data 'missed_data' and align to the
> listw object?
>
>
> Thanks & regards,
>
> *Amitha Puranik*
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> On Sat, May 25, 2019 at 9:49 PM Roger Bivand <Roger.Bivand using nhh.no> wrote:
>
>> On Fri, 24 May 2019, Amitha Puranik wrote:
>>
>> > I am facing an error while using predict.sarlm to make predictions for
>> spatial
>> > lag model generated using lagsarlm. I used the following code:
>> >
>> > predicted = predict(fit.lag, listw=weightmatrix, newdata=missed_data,
>> > pred.type="TS", zero.policy = T)
>> >
>> > For the argument newdata, I have passed the same data missed_data which
>> I
>> > used to fit the spatial lag model.
>> >
>> > When I run the above code, I get the following error message: “Error in
>> > predict.sarlm(fit.lag, listw = weightmatrix, newdata = missed_data, :
>> > mismatch between newdata and spatial weights. newdata should have
>> region.id
>> > as row.names”
>>
>> The predict method has to identify the weights applying to the newdata.
>> So
>> it uses the region.id attribute of the neighbour object, and the
>> row.names
>> of the newdata object. If they do not match, it error-exits. If shp below
>> was read in the typical way, the default region.id may be the FID of the
>> input file (0, ..., (n-1)), but the default row.names of newdata may be
>> 1,
>> ..., n.
>>
>> For example:
>>
>> > library(sf)
>> Linking to GEOS 3.7.2, GDAL 3.0.0, PROJ 6.1.0
>> > boston_506 <- st_read(system.file(
>> + "shapes/boston_tracts.shp",
>> + package="spData")[1])
>> Reading layer `boston_tracts' from data source
>> `/home/rsb/lib/r_libs/spData/shapes/boston_tracts.shp' using driver `ESRI
>> Shapefile'
>> Simple feature collection with 506 features and 36 fields
>> geometry type: POLYGON
>> dimension: XY
>> bbox: xmin: -71.52311 ymin: 42.00305 xmax: -70.63823 ymax:
>> 42.67307
>> epsg (SRID): 4267
>> proj4string: +proj=longlat +datum=NAD27 +no_defs
>> > nb_q <- spdep::poly2nb(boston_506)
>> > lw_q <- spdep::nb2listw(nb_q, style="W")
>> > boston_489 <- boston_506[!is.na(boston_506$median),]
>> > nb_q_489 <- spdep::poly2nb(boston_489)
>> > lw_q_489 <- spdep::nb2listw(nb_q_489, style="W", zero.policy=TRUE)
>> > form <- formula(log(median) ~ CRIM + ZN + INDUS + CHAS +
>> + I((NOX*10)^2) + I(RM^2) + AGE + log(DIS) +
>> + log(RAD) + TAX + PTRATIO + I(BB/100) +
>> + log(I(LSTAT/100)))
>> > suppressPackageStartupMessages(library(spatialreg))
>> >
>> > eigs_489 <- eigenw(lw_q_489)
>> >
>> > SLM_489 <- lagsarlm(form, data=boston_489,
>> + listw=lw_q_489, zero.policy=TRUE,
>> + control=list(pre_eig=eigs_489))
>> >
>> > nd <- boston_506[is.na(boston_506$median),]
>> > t0 <- exp(predict(SLM_489, newdata=nd, listw=lw_q,
>> + pred.type="TS", zero.policy=TRUE))
>> > str(attr(lw_q, "region.id"))
>> chr [1:506] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13"
>> "14"
>> "15" "16" ...
>> > str(row.names(nd))
>> chr [1:17] "13" "14" "15" "17" "43" "50" "312" "313" "314" "317" "337"
>> "346" "355" ...
>> > all(row.names(nd) %in% attr(lw_q, "region.id"))
>> [1] TRUE
>> # introduce a wrong row.name
>> > row.names(nd)[1] <- "0"
>> > all(row.names(nd) %in% attr(lw_q, "region.id"))
>> [1] FALSE
>> > t0 <- exp(predict(SLM_489, newdata=nd, listw=lw_q,
>> + pred.type="TS", zero.policy=TRUE))
>> Error in predict.sarlm(SLM_489, newdata = nd, listw = lw_q,
>> pred.type = "TS", :
>> mismatch between newdata and spatial weights. newdata should have
>> region.id as row.names
>>
>> In this case, the row.names of the input object to spdep::poly2nb() and
>> the region.id matched, as the newdata were subsetted from the same
>> object.
>> We don't know the values for your data, but you should be able to check
>> them. It is important that they align the data with the weights correctly
>> for obvious reasons.
>>
>> Hope this helps,
>>
>> Roger
>>
>> >
>> > I have obtained the weight matrix from the function below
>> >
>> > weightMat <- function(shp){
>> >
>> > dnb <- knearneigh(coordinates(shp), k=4)
>> >
>> > dnb <- knn2nb(dnb) #create nb
>> >
>> > lw <- nb2listw(dnb, style="W",zero.policy=TRUE) #create lw
>> >
>> > return(lw)
>> >
>> > }
>> >
>> > To cross check and make sure there are no discrepancies, I have run the
>> > following lines
>> >
>> > length(weightmatrix$weights)
>> >
>> > nrow(missed_data)
>> >
>> > nrow(coordinates(shape))
>> >
>> > For all the codes above, the result is 182, which is the sample size of
>> > data.
>> >
>> > Can anyone offer me some guidance in solving this problem? Thanks for
>> your
>> > help.
>> >
>> >
>> > Thanks & regards,
>> >
>> > *Amitha Puranik*
>> >
>> > Assistant Professor,
>> >
>> > Department of Statistics, PSPH
>> >
>> > Phone:0820-2922407
>> > Address:Department of Statistics,
>> >
>> > Health Sciences Library, Level 6,
>> >
>> > Manipal Academy of Higher Education,Manipal,Karnataka,India
>> >
>> > An Institute of Eminence (Status Accorded by MHRD)
>> >
>> > [[alternative HTML version deleted]]
>> >
>> > _______________________________________________
>> > R-sig-Geo mailing list
>> > R-sig-Geo using r-project.org
>> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>> >
>>
>> --
>> Roger Bivand
>> Department of Economics, Norwegian School of Economics,
>> Helleveien 30, N-5045 Bergen, Norway.
>> voice: +47 55 95 93 55; e-mail: Roger.Bivand using nhh.no
>> https://orcid.org/0000-0003-2392-6140
>> https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
>
>
[[alternative HTML version deleted]]
More information about the R-sig-Geo
mailing list