我正在拟合一个具有滞后结构的典型 GAM。该游戏具有一般形式:
g1<-gam(y~te(e, l), data=df)
具体:
#exposure
e <- matrix(rnorm(2500, mean = 100, sd = 25), ncol=50)
#lag
l<-matrix(rep(seq(49,0),50), ncol = 50, byrow=T)
#reponse y as sum of the exposures "e" weighted by lag (basically what the GAM shoud
estimate)
we<-matrix(sample(seq(0.01, 0.5, 0.02),2500, replace = T), ncol = 50, byrow=T)#random weights
ex<-e*we #weighted exposures by lag
df<-data.frame(y=apply(ex, 1, FUN = sum))#response
上面的代码为每个特定响应“y”生成一组简单的暴露滞后组合,并且数据按照 S.Wood 书中的建议进行组织:“广义加法模型:R 中的介绍。上面的 GAM (g1 )有以下输出:
enter code here
Family: gaussian
Link function: identity
Formula:
y ~ te(e, l)
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1267.97 12.63 100.4 <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
te(e,l) 2.605 3.054 4.808 0.00512 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Rank: 24/25
R-sq.(adj) = 0.208 Deviance explained = 25%
GCV = 8595 Scale est. = 7975.3 n = 50}
无论获得的结果如何,我想知道为什么以长 data.frame 格式组织数据会产生不同的结果:
df<-data.frame(l=rep(seq(0,49),each=50), e=c(e[,seq(50,1)]), y=rep(y$y, 50))
##GAM output
Formula:
y ~ te(e, l)
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1267.966 1.984 639.2 <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
te(e,l) 4.11 4.848 2.215 0.0448 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.00337 Deviance explained = 0.501%
GCV = 9858.2 Scale est. = 9838.1 n = 2500
如果这个问题可能很基本,我很抱歉,但我会很高兴得到一些反馈和参考,以更好地理解这一点。谢谢
使用矩阵会调用平滑的求和约定。当您仅将向量传递给平滑时,不会发生这种求和。
具有矩阵协变量的模型是
$$ g(\mu_i) = \sum_j l_{ij} f(x_{ij}) $$
而长向量版本的模型是
$$ g(\mu_i) = f(x_{i}, l_{i}) $$
表示差异。第一个例子中,链路尺度上响应的预期值是一组平滑的总和,每个滞后一个。在第二个中,相同的期望值取决于 $x_{i}$ 的值和 $l_{i}$ 的值,即第 $i$ 个值的滞后。
我想您可以将 $f(x_{i}, l_{i})$ 对长模型滞后的贡献求和,但您需要手动执行此操作。