[R-sig-Geo] Cause of error in spdep::errorsarlm

Frede Aakmann Tøgersen frtog at vestas.com
Wed Nov 5 08:33:17 CET 2014


Hi

Please remember to keep the r-sig-geo on the list.

See ?formula. I guess that somewhere under the hood of glm() as.formula() is called. Checking the code of glm() you can see that model.frame() is called. From ?model.frame one notice that:

     If either 'formula' or 'data' is already a model frame (a data
     frame with a '"terms"' attribute) and the other is missing, the
     model frame is returned.  Unless 'formula' is a terms object,
     'as.formula' and then 'terms' is called on it.  (If you wish to
     use the 'keep.order' argument of 'terms.formula', pass a terms
     object rather than a formula.)

All this happens in glm() but not in errorsarlm():

> my_formula    <- "resp ~  pred1 + pred2"
> SAR.mod           <- errorsarlm(my_formula, data=df, listw=weight_list)
Error: $ operator is invalid for atomic vectors
> traceback()
3: terms.default(formula, data = data)
2: terms(formula, data = data)
1: errorsarlm(my_formula, data = df, listw = weight_list)
>
> class(my_formula)
[1] "character"
> class(resp ~  pred1 + pred2)
[1] "formula"
>

In errorsarlm() terms() is called with my_formula and data and since formula is a string an error is raised.

In the man page of errorsarlm() one sees:

formula: a symbolic description of the model to be fit. The details of
          model specification are given for 'lm()'

And in ?lm we see:

formula: an object of class '"formula"' (or one that can be coerced to
          that class): a symbolic description of the model to be
          fitted.  The details of model specification are given under
          'Details'.

So strictly speaking errorsarlm() should be able to handle a formula defined as a string (maintainer on cc).


Yours sincerely / Med venlig hilsen


Frede Aakmann Tøgersen
Specialist, M.Sc., Ph.D.
Plant Performance & Modeling

Technology & Service Solutions
T +45 9730 5135
M +45 2547 6050
frtog at vestas.com
http://www.vestas.com

Company reg. name: Vestas Wind Systems A/S
This e-mail is subject to our e-mail disclaimer statement.
Please refer to www.vestas.com/legal/notice
If you have received this e-mail in error please contact the sender. 


> -----Original Message-----
> From: Dan Rosauer [mailto:dan.rosauer at anu.edu.au]
> Sent: 5. november 2014 07:59
> To: Frede Aakmann Tøgersen
> Subject: RE: Cause of error in spdep::errorsarlm
> 
> That worked.  Thank you!
> 
> But I don't understand.  Normally if you try to assign unquoted text to a
> variable, it check if the text refers to named objects, and if not gives an error.
> 
> And the quoted version worked perfectly for GLM models.
> 
> So problem solved, and something learned.
> 
> cheers
> Dan
> 
> ~~~~~~~~~~~~~~~~~~~~~~
> Dan Rosauer
> Postdoctoral Researcher
> Moritz Lab
> Ecology, Evolution & Genetics
> Research School of Biology
> Gould Building, Daley Road
> Australian National University
> Canberra ACT 0200
> 
> +61 413 950 275 (mobile)
> +61 2 6125 1028 (office)
> dan.rosauer at anu.edu.au
> 
> sites.google.com/site/danielrosauer
> 
> 
> 
> 
> -----Original Message-----
> From: Frede Aakmann Tøgersen [mailto:frtog at vestas.com]
> Sent: Wednesday, 5 November 2014 5:19 PM
> To: Dan Rosauer; r-sig-geo at r-project.org
> Subject: RE: Cause of error in spdep::errorsarlm
> 
> Hi Dan
> 
> Remove the " from your formula. It should be
> 
> my_formula    <- resp ~  pred1 + pred2
> 
> 
> Yours sincerely / Med venlig hilsen
> 
> 
> Frede Aakmann Tøgersen
> Specialist, M.Sc., Ph.D.
> Plant Performance & Modeling
> 
> Technology & Service Solutions
> T +45 9730 5135
> M +45 2547 6050
> frtog at vestas.com
> http://www.vestas.com
> 
> Company reg. name: Vestas Wind Systems A/S This e-mail is subject to our e-
> mail disclaimer statement.
> Please refer to www.vestas.com/legal/notice If you have received this e-mail
> in error please contact the sender.
> 
> > -----Original Message-----
> > From: r-sig-geo-bounces at r-project.org [mailto:r-sig-geo-bounces at r-
> > project.org] On Behalf Of Dan Rosauer
> > Sent: 5. november 2014 03:21
> > To: r-sig-geo at r-project.org
> > Subject: [R-sig-Geo] Cause of error in spdep::errorsarlm
> >
> > Hi Roger et al
> >
> > I hope someone can help me with the following error with a call to the
> > spdep function errorsarlm()
> >
> > Calling the function returns this:  Error: $ operator is invalid for
> > atomic vectors
> >
> > Things I have already tried:
> > * testing with real and simulated data - error occurs
> > * running it on windows and linux - error is identical
> > * omitting various arguments to the function to see which one is the
> > cause - error occurs with or without the data or listw arguments.  So
> > it apparently triggers this error before it even gets to the problem
> > of the missing arguments, and apparently they don't relate to the
> > actual content of the data or spatial weights.
> >
> > Here is a test script which generates the error:
> >
> > ######################
> > library(spdep)
> >
> > # create a sample data frame
> > df            <- data.frame(lat=runif(100,0,3),long=runif(100,0,3),
> > pred1=runif(100,0,1), pred2=runif(100,0,1), resp=runif(100,0,10))
> >
> > cat("\nPreparing neighbourhood weights for SARLM\n\n")
> > coords        <-as.matrix(cbind(df$long, df$lat))
> > cont.nb       <- dnearneigh(coords,d1=0, d2=100,longlat=TRUE)
> > weight_list   <- nb2listw(cont.nb, glist=NULL, style="W", zero.policy=TRUE)
> >
> > my_formula    <- "resp ~  pred1 + pred2"
> >
> > # this line gives the error: $ operator is invalid for atomic vectors
> > SAR.mod           <- errorsarlm(my_formula, data=df, listw=weight_list)
> > ######################
> >
> > The R version is 3.1.0, and spdep 0.5-77
> >
> > Any advice on how to fix this problem would be much appreciated.
> >
> > The best possibility is that I've made a dumb mistake which can be
> > easily fixed... :-)
> >
> > thanks
> >
> > Dan
> >
> >
> > ~~~~~~~~~~~~~~~~~~~~~~
> > Dan Rosauer
> > Postdoctoral Researcher
> > Moritz Lab
> > Ecology, Evolution & Genetics
> > Research School of Biology
> > Gould Building, Daley Road
> > Australian National University
> > Canberra ACT 0200
> >
> > +61 413 950 275 (mobile)
> > +61 2 6125 1028 (office)
> > dan.rosauer at anu.edu.au
> >
> > sites.google.com/site/danielrosauer
> >
> > _______________________________________________
> > R-sig-Geo mailing list
> > R-sig-Geo at r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo



More information about the R-sig-Geo mailing list