r - R中具有空间自相关的GAMM
问题描述
据我了解,GAMM 具有随机误差或空间自相关误差结构。
我正在尝试运行具有空间自相关错误结构的 GAMM 模型,例如 corExp(请参阅https://stat.ethz.ch/R-manual/R-devel/library/nlme/html/corClasses.html)。
但是我对从 GAM 建模 GAMM 感到困惑。
下面是我的 GAM(广义加法模型)代码。
library(mgcv)
mod.gam <- gam(Chave~s(Band_3) + s(Band_7) + s(Band_8) + s(BaCo_3_2) + s(BaCo_5_2) +
s(BaCo_5_3) + s(BaCo_5_4) + s(BaCo_8_2) + s(BaCo_8A_2),data = data)
summary(mod.gam)
fits = predict(mod.gam, newdata=data, type='response')
plot(data$Chave, fits, col='blue', ylab = "Predicted AGB KNN", xlab = "Estimated AGB")
plot(mod.gam)
如何将其更改为 GAMM?当我尝试使用 GAMM(如下所述)时,我没有看到太大的变化:
model <- gamm(Chave~s(Band_3) + s(Band_7) + s(Band_8) + s(BaCo_3_2) +
s(BaCo_5_2) + s(BaCo_5_3) + s(BaCo_5_4) + s(BaCo_8_2) + s(BaCo_8A_2),
data = data, correlation=corExp(1,form = ~ Latitude + Longitude)))
summary(model$gam)
plot(model$gam,pages=1)
据我了解,空间自相关函数应该以纬度和经度作为输入。我做得对吗?GAMM 的输出与 GAM 的输出有何不同?
不同型号的输出:
model.gamm <- gamm(Chave~s(Band_3) + s(Band_7) + s(Band_8) + s(BaCo_3_2) + s(BaCo_5_2) +
s(BaCo_5_3) + s(BaCo_5_4) + s(BaCo_8_2) + s(BaCo_8A_2), data = data,
correlation=corSpher(form = ~ Latitude + Longitude))
summary(model.gam$lme)
[Output]:
Linear mixed-effects model fit by maximum likelihood
Data: strip.offset(mf)
AIC BIC logLik
1176.797 1232.729 -567.3985
Correlation Structure: Spherical spatial correlation
Formula: ~Latitude + Longitude | g/g.0/g.1/g.2/g.3/g.4/g.5/g.6/g.7
Parameter estimate(s):
range
0.003845795
Fixed effects: y ~ X - 1
Value Std.Error DF t-value p-value
X(Intercept) 125.44208 5.23505 96 23.961953 0.0000
Xs(Band_3)Fx1 95.48991 38.42171 96 2.485311 0.0147
Xs(Band_7)Fx1 -17.69103 40.27462 96 -0.439260 0.6615
Xs(Band_8)Fx1 -84.45737 60.83131 96 -1.388386 0.1682
Xs(BaCo_3_2)Fx1 -183.67952 179.22609 96 -1.024848 0.3080
Xs(BaCo_5_2)Fx1 111.84971 266.21261 96 0.420152 0.6753
Xs(BaCo_5_3)Fx1 -46.55365 131.32239 96 -0.354499 0.7237
Xs(BaCo_5_4)Fx1 -10.57644 9.59420 96 -1.102378 0.2731
Xs(BaCo_8_2)Fx1 76.30654 52.36900 96 1.457094 0.1484
Xs(BaCo_8A_2)Fx1 35.37155 39.34172 96 0.899085 0.3709
#########################
model.gam <- gamm(Chave~s(Band_3) + s(Band_7) + s(Band_8) + s(BaCo_3_2) +
s(BaCo_5_2) + s(BaCo_5_3) + s(BaCo_5_4) + s(BaCo_8_2) + s(BaCo_8A_2), data = data)
summary(model.gamm$lme)
[Output]:
Linear mixed-effects model fit by maximum likelihood
Data: strip.offset(mf)
AIC BIC logLik
1177.106 1230.375 -568.553
Fixed effects: y ~ X - 1
Value Std.Error DF t-value p-value
X(Intercept) 123.71814 4.94795 96 25.003936 0.0000
Xs(Band_3)Fx1 102.63429 38.76940 96 2.647301 0.0095
Xs(Band_7)Fx1 -26.65351 42.00784 96 -0.634489 0.5273
Xs(Band_8)Fx1 -81.96547 61.57940 96 -1.331053 0.1863
Xs(BaCo_3_2)Fx1 -312.47086 191.52784 96 -1.631464 0.1061
Xs(BaCo_5_2)Fx1 283.77313 280.17983 96 1.012825 0.3137
Xs(BaCo_5_3)Fx1 -126.82534 139.08953 96 -0.911825 0.3641
Xs(BaCo_5_4)Fx1 -11.82504 9.69256 96 -1.220012 0.2254
Xs(BaCo_8_2)Fx1 78.95786 52.86484 96 1.493580 0.1386
Xs(BaCo_8A_2)Fx1 38.03149 40.01424 96 0.950449 0.3443
##############################
mod.gam.gam <- gam(Chave~s(Band_3) + s(Band_7) + s(Band_8) + s(BaCo_3_2) + s(BaCo_5_2) +
+ s(BaCo_5_3) + s(BaCo_5_4) + s(BaCo_8_2) + s(BaCo_8A_2),data = data)
summary(mod.gam.gam)
[Output]:
Family: gaussian
Link function: identity
Formula:
Chave ~ s(Band_3) + s(Band_7) + s(Band_8) + s(BaCo_3_2) + s(BaCo_5_2) +
s(BaCo_5_3) + s(BaCo_5_4) + s(BaCo_8_2) + s(BaCo_8A_2)
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 123.718 4.155 29.78 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df F p-value
s(Band_3) 1.000 1.000 1.125 0.2922
s(Band_7) 5.854 6.945 2.419 0.0268 *
s(Band_8) 4.130 5.210 2.989 0.0143 *
s(BaCo_3_2) 4.724 5.694 3.128 0.0113 *
s(BaCo_5_2) 2.628 3.431 1.449 0.2275
s(BaCo_5_3) 2.614 3.262 2.713 0.0530 .
s(BaCo_5_4) 4.441 5.454 1.045 0.4176
s(BaCo_8_2) 1.000 1.000 1.144 0.2881
s(BaCo_8A_2) 3.373 4.250 1.077 0.3394
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.445 Deviance explained = 60.2%
GCV = 2578.1 Scale est. = 1829.9 n = 106
解决方案
你是,我想,叫corExp()
错了。你用:
corExp(1, form = ~ Latitude + Longitude)
这是将指数相关函数中的相关参数的值固定为固定值,1
而不是从数据中估计,这可以通过使用来实现
corExp(form = ~ Latitude + Longitude)
如果来自 GAM gam()
(通过平均结构。
如果要查看包含相关函数效应的残差gamm()
,则需要使用:
resid(model$lme, type = "normalized")
另外,如果你想比较一个有结构和没有结构的模型,你需要在模型anova()
的$lme
组件上使用,因此你需要使用 重新gam()
拟合模型gamm()
,只需留下correlation
部分。然后anova(mod1$lme, mod2$lme)
将为您提供指数相关函数中参数的广义似然比检验。
推荐阅读
- javascript - 在Javascript中读取CSV文件并将名称写入一个数组并将值写入另一个数组
- amazon-web-services - 如何从 Azure Devops 连接 Amazon RDS SQL 以实现数据库自动化
- java - Spring OAuth2 从访问令牌字符串中提取主体
- excel - 用VBA提取趋势线斜率
- javascript - 如何将数据写入一个csv文件?
- spring-boot - 在 3.0.0 之前的 String Cloud Stream 中使用仲裁队列
- c++ - 为什么在使用无序集时,带有非常量运算符 () 的哈希函子无法在 Visual Studio 中编译?
- c# - MVVM - 使用 View1 上的按钮来利用来自 SubView1 的数据
- libssh - 使用 Libssh 在 Windows 和 Linux 上检测超时
- amazon-web-services - Kubernetes:集群运行但对更改无响应,无法检索日志