[R-sig-Geo] How to get the Coefficient of Determination in the results of GWR

Roger Bivand Roger.Bivand at nhh.no
Thu May 13 11:43:06 CEST 2010


On Thu, 13 May 2010, huangykiz wrote:

> Hi,

> I am sorry I say that I cannot get the same R^2 between in R/spgwr and 
> SAM in my data.

Establish that the adaptive proportion is exactly the same.

You haven't done that - copy and paste from SAM to gwr(), not using 
gwr.sel(). Do it first for fixed Gaussian, then if you get a sensible 
figure from SAM for adaptive, do the same there. I see very different 
bandwidths chosen by SAM and by gwr.sel() and GWR3 - gwr.sel() and GWR3 
usually agree fairly well for CV fixed bandwidths, but gwr.sel() typically 
continues its search a little longer than GWR3.

I don't know how SAM chooses its bandwidth or adaptive proportion, it is 
closed source, so only its authors know.

Is SAM using Great Circle distances, if so, you should set longlat=TRUE in 
gwr.sel() and gwr()? Are your coordinates geographical (decimal degrees) 
or projected (metres)?

Roger

> In R/spgwr
> R^2:    0.972989;
> AICc (GWR p. 61, eq 2.33; p. 96, eq. 4.21): 4668.92
> Effective number of parameters (model: traceS): 435.7586; 
> Effective number of parameters (residual: 2traceS - traceS'S): 582.3581;
> Sigma (residual: 2traceS - traceS'S): 2.437066;
> Sigma (model: traceS): 1.927127;
> Sigma (ML): 1.325501;
> 
> In SAM,
> Coefficient of Determination :           0.696 
> Adjusted r-square (r?Adj):                 0.693 
> Sigma:                                             20.058 
> Effective Number of Parameters:          10.002 
> Akaike Information Criterion (AICc):      4838.299 
> Correlation Coefficient (r):                    0.834 
> F:                                                   207.852 
> 
> Here are my code:
> PET.adapt.gauss <- gwr.sel(SPECIES_RI ~ PET, data=Environmental_variables, coords=cbind(Environmental_variables$LONGX, 
> Environmental_variables$LATY),adapt=TRUE)
> 
> PET.gauss<- gwr(SPECIES_RI ~ PET, data=Environmental_variables, coords=cbind(Environmental_variables$LONGX, 
> Environmental_variables$LATY), gweight=gwr.Gauss,adapt=PET.adapt.gauss,hatmatrix=TRUE)
> 
> 1 - (PET.gauss$results$rss/crossprod(scale(Environmental_variables$SPECIES_RI, scale=FALSE)))
> 
> In SAM, I selecte "spatial Weighting Function"=gaussian, adaptive 
> Spatial Kernel, and compute Geographical Distances based on longitudinal 
> coordinate(X) and latitudinal coordinate(Y). I donot select method for 
> AIC optimisation.
> 
> So I donot know where is wrong.
> 
> Thank you very much for your great helps.
> 
> 
> 
> 
> 
>
> 在2010-05-13 00:07:23,"Roger Bivand" <Roger.Bivand at nhh.no> 写道:
>> On Wed, 12 May 2010, Roger Bivand wrote:
>>
>>> On Wed, 12 May 2010, huangykiz wrote:
>>>
>>>> Hi, Is "adapt=TRUE"(spgwr) not the same as "adaptive Spatial 
>>>> Kernel"(SAM)?The result of "adaptive Spatial Kernel" may be better than 
>>>> fixed bandwidth. If I want to ues "adaptive Spatial Kernel" in spgwr, how 
>>>> to write the code?
>>>
>>> READ THE HELP PAGES!
>>>
>>> adaptive_proportion <- gwr.sel(...)
>>>
>>> result <- gwr(..., adapt=adaptive_proportion; ...)
>>>
>>> exactly as on the example om the help page:
>>>
>>> data(georgia)
>>> g.adapt.gauss <- gwr.sel(PctBach ~ TotPop90 + PctRural + PctEld + PctFB +
>>>  PctPov + PctBlack, data=gSRDF, adapt=TRUE)
>>> res.adpt <- gwr(PctBach ~ TotPop90 + PctRural + PctEld + PctFB + PctPov +
>>>  PctBlack, data=gSRDF, adapt=g.adapt.gauss)
>>> res.adpt
>>>
>>> Clear?
>>
>> I have now compared the same data in R/spgwr and SAM for effective number 
>> of parameters, sigma, and your questionable R^2, and they agree adequately 
>> when the kernel and the bandwidth are the same. Having the algorithm 
>> choose the bandwidth does obscure what is going on. You should use SAM if 
>> you prefer GUI and not needing to know how things work, and remember that 
>> GWR is a very doubtful approach for anything beyond exploring 
>> non-stationarity, its original motivation.
>>
>>>
>>>> 
>>>> Thanks a lot.
>>>> 
>>>> Cheers.
>>>> 
>>>> 
>>>>> Hi,
>>>>> I think that I use the same bandwidth and kernel. In SAM, I use "spatial 
>>>>> Weighting Function"=gaussian, adaptive Spatial Kernel, and compute 
>>>>> Geographical Distances based on longitudinal coordinate(X) and latitudinal 
>>>>> coordinate(Y). In spgwr, gweight is gwr.Gauss and adapt is TRUE.
>>>>> 
>>>>> For example, this is my code:
>>>> 
>>>>> PET.bw <- gwr.sel(SPECIES_RI ~ PET, data=variables, 
>>>>> coords=cbind(variables$LONGX, variables$LATY),adapt=TRUE)
>>>> 
>>>>> PET.gauss <- gwr(SPECIES_RI ~ PET, data=variables, 
>>>>> coords=cbind(variables$LONGX, variables$LATY), bandwidth=PET.bw, 
>>>>> gweight=gwr.Gauss,adapt=TRUE,hatmatrix=TRUE)
>>>> 
>>>> So where do you pass PET.bw to the gwr() function? adapt=TRUE will treat 
>>>> the adaptive proportion as 1, so include all data points. If you want to 
>>>> compare, use a fixed bandwidth in both, with no CV selection. Then you 
>>>> compare like with like.
>>>> 
>>>> Note that your messages are *not* reaching the list, they must be sent to:
>>>> 
>>>> r-sig-geo at stat.math.ethz.ch, not
>>>> 
>>>> r-sig-geo-request at stat.math.ethz.ch
>>>> 
>>>> You are not thinking carefully and are rushing into things and drawing 
>>>> wrong conclusions.
>>>> 
>>>>> 
>>>>> Thanks a lot.
>>>>> 
>>>>> Cheers.
>>>>> 
>>>>> 
>>>>> 
>>>>> 在2010-05-12 20:28:47,"Roger Bivand" <Roger.Bivand at nhh.no> 写道:
>>>>>> On Wed, 12 May 2010, huangykiz wrote:
>>>>>> 
>>>>>>> Hi,
>>>>>>> One of SAM author ("José Alexandre Felizola Diniz 
>>>>>>> Filho"<diniz at icb.ufg.br>) say that they also base on GWR3 (the 
>>>>>>> Fotherigham book)  and the data used within each kernel may be some 
>>>>>>> slight differences
>>>>>> 
>>>>>> Naturally, if you are not using exactly the same kernel and bandwidth, 
>>>>>> you should not be surprised by differences in values. Please make sure 
>>>>>> that the bandwidth and kernel are the same and try again.
>>>>>> 
>>>>>> Roger
>>>>>> 
>>>>>>> Cheers
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 在2010-05-12 20:28:47,"Roger Bivand" <Roger.Bivand at nhh.no> 写道:
>>>>> On Wed, 12 May 2010, huangykiz wrote:
>>>>> 
>>>>>> Hi,
>>>>>> One of SAM author ("José Alexandre Felizola Diniz 
>>>>>> Filho"<diniz at icb.ufg.br>) say that they also base on GWR3 (the 
>>>>>> Fotherigham book)  and the data used within each kernel may be some 
>>>>>> slight differences
>>>>> 
>>>>> Naturally, if you are not using exactly the same kernel and bandwidth, you 
>>>>> should not be surprised by differences in values. Please make sure that 
>>>>> the bandwidth and kernel are the same and try again.
>>>>> 
>>>>> Roger
>>>>> 
>>>>>> Cheers.
>>>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 在2010-05-12 15:27:58,"Roger Bivand" <Roger.Bivand at nhh.no> 写道:
>>>>> On Wed, 12 May 2010, huangykiz wrote:
>>>>> 
>>>>>> Hi,
>>>>>> 
>>>>>> I am sorry I donot know how to install module spgwr from sourceforge (I 
>>>>>> can find it on the web 
>>>>>> http://r-spatial.cvs.sourceforge.net/viewvc/r-spatial/spgwr/R/gwr.R?view=log). 
>>>>>> So I use the code sketch to calculate quasi-global R2. The results are 
>>>>>> different between SAM and spgwr(Attached are the results ). The 
>>>>>> quasi-global R2 in R is 0.4515894, but in SAM is 0.696.
>>>>>> This is my code:
>>>>>> 
>>>>>> library(spgwr)
>>>>>> Environmental_variables<-read.csv("Environmental_variables100.csv",header=TRUE)
>>>>>> attach(Environmental_variables)
>>>>>> region_PET.bw <- gwr.sel(SPECIES_RI ~ PET, data=Environmental_variables, 
>>>>>> coords=cbind(Environmental_variables$LONGX, 
>>>>>> Environmental_variables$LATY),adapt=TRUE)
>>>>>> region_PET.gauss <- gwr(SPECIES_RI ~ PET, data=Environmental_variables, 
>>>>>> coords=cbind(Environmental_variables$LONGX, 
>>>>>> Environmental_variables$LATY), bandwidth=region_PET.bw, 
>>>>>> gweight=gwr.Gauss,adapt=TRUE,hatmatrix=TRUE)
>>>>>> names(region_PET.gauss$SDF)
>>>>>> region_PET.gauss$SDF$localR2
>>>>>> 1 - 
>>>>>> (region_PET.gauss$results$rss/crossprod(scale(Environmental_variables$SPECIES_RI, 
>>>>>> scale=FALSE)))
>>>>>> 
>>>>>> Thank you very much.
>>>>> 
>>>>> SAM is closed source - ask them how they compute it. For spgwr, the code 
>>>>> is provided, so you can read it for yourself. For the record, the current 
>>>>> gwr() code in spgwr gives the same value as GWR3, which is also closed 
>>>>> source, and where the Effective number of parameters (model: traceS), 
>>>>> Sigma, and Residual sum of squares also agree. I suppose SAM has a 
>>>>> different understanding of GWR internals than the authors of the GWR book.
>>>>> 
>>>>> Once again:
>>>>> 
>>>>> Please *do* write to the R-sig-geo list rather than to me directly -
>>>>> others can answer your question as well, perhaps better, and in a more
>>>>> timely way than I can. In addition, threads in the list can be searched in
>>>>> the archives, so others can avoid the same problem later.
>>>>> 
>>>>> Please summarise to the list if this resolves the problem.
>>>>> 
>>>>> Roger
>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 在2010-05-12 01:16:18,"Roger Bivand" <Roger.Bivand at nhh.no> 写道:
>>>>>>> On Wed, 12 May 2010, huangykiz wrote:
>>>>>>> 
>>>>>>>> Hi, I just need one for global, not *each* fit point. In this case, how 
>>>>>>>> can I select or do? Why in other software such as SAM(Spatial Analysis 
>>>>>>>> in Macroecology) just gives one R2?
>>>>>>> 
>>>>>>> If you believe theirs, good luck! The authors of the GWR book have local 
>>>>>>> R^2 values in GWR3 and formulae that are wrong by their own admission in 
>>>>>>> private emails. The localR2 now agrees with the as-yet unreleased GWR4 
>>>>>>> from the GWR authors. How SAM can be "better", I don't know. What you 
>>>>>>> are suggesting is that the model fitted with fit points at data points 
>>>>>>> (but not at other fit points) might have a "quasi-global" R^2, based on 
>>>>>>> the RSS of the pooled fit. For the columbus case, that might be:
>>>>>>> 
>>>>>>> 1 - (col.gauss$results$rss/crossprod(scale(columbus$crime, 
>>>>>>> scale=FALSE)))
>>>>>>> 
>>>>>>> but I don't know whether this is in any way correct. I've added it as:
>>>>>>> 
>>>>>>> Quasi-global R2:
>>>>>>> 
>>>>>>> to the print output of a GWR model fitted with a hatmatrix, and have 
>>>>>>> committed it to sourceforge, project r-spatial, module spgwr. Arguably, 
>>>>>>> it ought to be adjusted by the ratio of degrees of freedom, but I don't 
>>>>>>> trust the DF either. Could you please check out spgwr from sourceforge 
>>>>>>> ,install it from source, and confirm that the "quasi-global R2" does the 
>>>>>>> same as SAM, or use the code sketch above to do the same, and report 
>>>>>>> back?
>>>>>>> 
>>>>>>> Roger
>>>>>>> 
>>>>>>>> 
>>>>>>>> Thanks a lot.
>>>>>>>> 
>>>>>>>> Cheers,
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 在2010-05-11 23:59:44,"Roger Bivand" <Roger.Bivand at nhh.no> 写道:
>>>>>>>>> On Tue, 11 May 2010, huangykiz wrote:
>>>>>>>>> 
>>>>>>>>>> Hi,
>>>>>>>>>> 
>>>>>>>>>> There are 49  localR2 in the results. Which one do I need? The code 
>>>>>>>>>> "look for localR2:" cannot run.
>>>>>>>>> 
>>>>>>>>> Well, how many do you want? There is one for each fit point, they are 
>>>>>>>>> *local* R2. Please do try to grasp what GWR does - it fits one moddel 
>>>>>>>>> for *each* fit point.
>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> Thans a lot
>>>>>>>>>> 
>>>>>>>>>> Cheers.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 在2010-05-11 22:33:59,"Roger Bivand" <Roger.Bivand at nhh.no> 写道:
>>>>>>>>>>> On Tue, 11 May 2010, huangykiz wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> Hi, OK. But I need it for compariation. In what some contexts to 
>>>>>>>>>>>> get it? May you tell me how to get it?
>>>>>>>>>>> 
>>>>>>>>>>> library(spgwr)
>>>>>>>>>>> data(columbus)
>>>>>>>>>>> col.bw <- gwr.sel(crime ~ income + housing, data=columbus,
>>>>>>>>>>>  coords=cbind(columbus$x, columbus$y))
>>>>>>>>>>> col.gauss <- gwr(crime ~ income + housing, data=columbus,
>>>>>>>>>>>  coords=cbind(columbus$x, columbus$y), bandwidth=col.bw, 
>>>>>>>>>>> hatmatrix=TRUE)
>>>>>>>>>>> names(col.gauss$SDF)
>>>>>>>>>>> 
>>>>>>>>>>> look for localR2:
>>>>>>>>>>> 
>>>>>>>>>>> col.gauss$SDF$localR2
>>>>>>>>>>> 
>>>>>>>>>>> But do not rely on it or use it for anything at all! Like all GWR, 
>>>>>>>>>>> it is most unreliable!
>>>>>>>>>>> 
>>>>>>>>>>> Roger Bivand
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Thank you very much for your great helps
>>>>>>>>>>>> 
>>>>>>>>>>>> Best regards.
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 在2010-05-11 18:28:44,"Roger Bivand" <Roger.Bivand at nhh.no> 写道:
>>>>>>>>>>>>> On Tue, 11 May 2010, huangykiz wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Dear professor Bivand,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I am a strudent. I recently use GWR(Geographically weighted 
>>>>>>>>>>>>>> regression) model. May I ask you a question? There is not 
>>>>>>>>>>>>>> Coefficient of Determination in the results of GWR. How can I get 
>>>>>>>>>>>>>> it? What is the programs to get it?
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Please address questions like this to the R-sig-geo list rather 
>>>>>>>>>>>>> than to me directly in future.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The local R2 values are available in some contexts when running 
>>>>>>>>>>>>> gwr(), but are not well defined (neither in the GWR book nor in 
>>>>>>>>>>>>> implementations). I advise against their use - they are most 
>>>>>>>>>>>>> probably meaningless.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Hope this helps,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Roger Bivand
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Thank you very much for your any helps.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Best regards.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Yong Huang
>>>>>>>>>>>>> 
>>>>>>>>>>>>> -- 
>>>>>>>>>>>>> Roger Bivand
>>>>>>>>>>>>> Economic Geography Section, Department of Economics, Norwegian 
>>>>>>>>>>>>> School of
>>>>>>>>>>>>> Economics and Business Administration, Helleveien 30, N-5045 
>>>>>>>>>>>>> Bergen,
>>>>>>>>>>>>> Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
>>>>>>>>>>>>> e-mail: Roger.Bivand at nhh.no
>>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> -- 
>>>>>>>>>>> Roger Bivand
>>>>>>>>>>> Economic Geography Section, Department of Economics, Norwegian 
>>>>>>>>>>> School of
>>>>>>>>>>> Economics and Business Administration, Helleveien 30, N-5045 Bergen,
>>>>>>>>>>> Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
>>>>>>>>>>> e-mail: Roger.Bivand at nhh.no
>>>>>>>>> 
>>>>>>>>> -- 
>>>>>>>>> Roger Bivand
>>>>>>>>> Economic Geography Section, Department of Economics, Norwegian School 
>>>>>>>>> of
>>>>>>>>> Economics and Business Administration, Helleveien 30, N-5045 Bergen,
>>>>>>>>> Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
>>>>>>>>> e-mail: Roger.Bivand at nhh.no
>>>>>>> 
>>>>>>> -- 
>>>>>>> Roger Bivand
>>>>>>> Economic Geography Section, Department of Economics, Norwegian School of
>>>>>>> Economics and Business Administration, Helleveien 30, N-5045 Bergen,
>>>>>>> Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
>>>>>>> e-mail: Roger.Bivand at nhh.no
>>>>> 
>>>>> -- 
>>>>> Roger Bivand
>>>>> Economic Geography Section, Department of Economics, Norwegian School of
>>>>> Economics and Business Administration, Helleveien 30, N-5045 Bergen,
>>>>> Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
>>>>> e-mail: Roger.Bivand at nhh.no
>>>
>>>
>>
>> -- 
>> Roger Bivand
>> Economic Geography Section, Department of Economics, Norwegian School of
>> Economics and Business Administration, Helleveien 30, N-5045 Bergen,
>> Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
>> e-mail: Roger.Bivand at nhh.no

-- 
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no


More information about the R-sig-Geo mailing list