gwr在R中使用包mgcv和R2Bayesx进行拟合

时间:2013-12-13 04:39:13

标签: r bayesian gam mgcv

我想比较spgwr和mgcv之间产生的GWR配件,但是我得到了mgcv的gam函数错误。这是一个例子:

require(spgwr)
require(mgcv)
require(R2BayesX)

data(columbus)
col.bw <- gwr.sel(crime ~ income + housing, data=columbus,verbose=F,
                  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)

#gwr fitting with Intercept
col.gam<-gam(crime ~s(x,y)+s(x,y)*income+s(x,y)*housing, data=columbus)#mgcv ERROR
b1<-bayesx(crime ~sx(x,y)+sx(x,y)*income+sx(x,y)*housing, data=columbus)#R2Bayesx ERROR

问题:

  1. 如何使用gam和bayesx功能(位置的平滑功能)适合相同的gwr

  2. 如何控制参数尽可能类似,包括最佳带宽

1 个答案:

答案 0 :(得分:1)

mgcv 错误来自您指定空间平滑与变量incomehousing之间的“互动”的因素。有关使用?gam.models条款的详细信息,请阅读by。我认为你需要

col.gam <- gam(crime ~s(x,y, k = 5) + s(x,y, by = income, k = 5) + 
               s(x,y, by = housing, k = 5), data=columbus)

在此示例中,由于只有49个观察值,因此您需要限制基函数的维度,我在此处使用k = 5,但您应该调查是否需要更改这些内容,数据的约束。

根据bayesx的错误外观,您在错误地指定模型时遇到同样的问题。我不熟悉bayesx(),但看起来它使用了与 mgcv 一样的s()函数,因此模型规范应与我在上面显示的相同

至于2.你可以在这里扩展你的意思可比较的gam()bayesx()之间或两者之间或其中一个与spgwr()模型相当吗?