-
Notifications
You must be signed in to change notification settings - Fork 0
/
GAMMs.qmd
119 lines (71 loc) · 3.03 KB
/
GAMMs.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
---
title: "Generalized Additive Mixed Models"
format: html
---
## Generalized Additive Mixed Models
广义可加混合模型(Generalized Additive Mixed Models,GAMMs)是一种广义线性混合模型的扩展形式,用于建模非线性关系和非正态分布数据。它可以处理多个响应变量和多个随机效应,并且可以使用非参数平滑函数来建模预测变量和响应变量之间的关系。
GAMMs的核心思想是将模型中的每个预测变量都视为一个单独的非参数平滑函数,并将它们组合起来以形成整个模型。这些平滑函数可以是任何形式的曲线,例如样条、核函数、多项式等。这种方法允许建模复杂的非线性关系,并且可以使用交互作用项来捕捉变量之间的相互作用。
与传统的线性混合模型相比,GAMMs可以更好地处理非正态分布的数据,例如计数数据、二项分布数据和连续比例数据。此外,它还可以处理多个响应变量和多个随机效应,这使得它在许多实际应用中非常有用。
GAMMs的建模过程通常涉及到选择适当的平滑函数和平滑参数,以及确定哪些预测变量应该被包括在模型中。这些决策通常需要进行交叉验证和模型比较来确定最佳模型。
总之,GAMMs是一种非常有用的建模方法,可以用于处理复杂的非线性关系和非正态分布数据。它在许多实际应用中都得到了广泛的应用,并且可以通过现有的统计软件包进行实现和分析。
### A Demo by mgcv
```{r, include=FALSE}
library(agridat)
library(MASS)
library(gamm4) # use lme4 as default
library(mgcv) # syntax taken from the package nlme
library(gratia)
library(emmeans)
library(marginaleffects)
```
```{r}
# 所使用数据为一批次测试数据
# 在不同的年份采集的数据,年份为随机因素
dat <- lasrosas.corn
dat$year = as.factor(paste(dat$year))
```
```{r}
# 一个简单的随机截距模型
gam.ME <- mgcv::gamm(yield ~ nitro + nf + topo + s(bv),
data = dat,
random = list(year = ~1))
```
```{r}
# 返回一个list
summary(gam.ME)
gam.ME
```
```{r}
summary(gam.ME[[1]])
```
```{r}
summary(gam.ME[[2]])
```
```{r}
# 可以对返回对象里的任一对象进行对应的操作
# 如下可以查看GAM的曲线图
# 可是此刻应该作何解释呢?
plot(gam.ME$gam)
```
```{r}
dat$resid.gam.mod <- residuals(gam.ME$lme, type = "pearson")
dat$fit.gam.mod <- predict(gam.ME$gam, type = "link")
dat$fit2.gam.mod <- predict(gam.ME$gam, type = "response")
plot(dat$fit.gam.mod, dat$resid.gam.mod)
```
### by gamm4
同样是Simon Wood的作品,不过有短时间没有更新了。
```{r}
# do not run
model <- gamm4::gamm4(formula = yield ~ nitro + nf + topo + s(bv),
random = ~|year,
)
```
```{r}
# 查看模型摘要信息
summary(model)
# 绘制自变量与响应变量的关系图
plot(model, select = 2)
# 绘制自变量与响应变量的偏差图
plot(model, select = 3)
```