我想在R中使用 mgcv
包来运行模型
df <- as.data.frame(spdf)
mod <- gam(y ~ s(geoid, bs = 'mrf', xt = list(nb = nb), k = 20) +
s(month, bs = 'cc', k = 12),
data = df,
method = 'REML',
family = Gamma(link = log))
其中spdf是SpatialPolygonDataFrame .
我在理解如何创建 nb
对象时遇到问题,因为数据 df
具有重复的 geoid
值(每月一个)并且当我运行时
nb <- poly2nb(spdf, row.names = spdf@data@geoid)
我收到了错误
Error in poly2nb(spdf, row.names = spdf@data@geoid): non-unique row.names given
谢谢
1 回答
邻域对象不需要拥有与数据一样多的行,就像
geoid
中的行一样多 .如果要从数据中使用
geoid
,则需要首先对对象进行子集以包含非重复的geoid
值 . 在SpatialPolygonsDataFrame
的@data
元素上使用典型的子集方法([
)和duplicated()
应该为您提供一组独特的geoid
来构建邻域对象 .