绘制mgcv :: gam

时间:2019-04-28 08:08:58

标签: r gam mgcv

因此,我有一个统计模型,其中我使用逐曲线系数,即为某些类别拟合单独的平滑曲线,如下所示。 (我并没有特别注意数据/模型的含义,只是将其作为一个最小的示例。)

library(dplyr)
library(qgam)
library(mgcv)
data(UKload)
test <- gam(
  NetDemand ~ te(wM, Posan, by = Year), 
  data = UKload %>% mutate(Year = as.factor(Year))
)

当我只用s而不是张量对曲线进行平滑处理时,我很高兴使用visreg包,如下所示:

library(visreg)
test2 <- gam(
  NetDemand ~ s(wM, by = Year),
  data = UKload %>% mutate(Year = as.factor(Year))
)
visreg(test2, xvar = "wM", by = "Year")

enter image description here

但是,当我包含张量时,我似乎无法做类似的事情---它只会简单地绘制一个具有完整数据的等高线图,而不是将其按感兴趣的因子变量进行分区:< / p>

visreg2d(test, xvar = "wM", yvar = "Posan", by = "Year")
  

警告信息:   在title(...)中:“ by”不是图形参数

enter image description here

我可以在满足以下条件的情况下使用mgcv::vis.gam

vis.gam(test, plot.type = "contour", cond = list(Year = 2011))

,然后按Rmisc::multiplot或基数plot汇总图,但是从美学和工作流程两方面,我对这些解决方案都不满意。有一些方便的技巧可以针对张量积用曲线系数平滑绘制漂亮的图吗?

1 个答案:

答案 0 :(得分:1)

取决于您的意思是更漂亮吗? ;-)

我的 gratia 软件包将生成因数平滑图。例如

draw(test, ncol = 2)

产生

enter image description here

表面的灰色部分是人们将其与可用数据相距太远的地方。 “太远”的程度由dist参数控制,默认情况下,该参数设置为将网格上的任何点标记为NA(如果超过10%(dist = 0.1)距离最近的数据点的数据范围。

我还不愿意允许以相同的比例绘制这些表面并使用相同的色条图例,但是 gratia 仍在进行中。

如果您想自己进行绘图,那么 gratia 也可以生成类似整洁的对象(小物件,数据排列的形式适合于 ggplot2 )通过evaluate_smooth()函数

> es <- evaluate_smooth(test, smooth = 'te(wM,Posan)')
> es
# A tibble: 60,000 x 7
   smooth                by_variable     wM   Posan   est    se Year 
   <chr>                 <fct>        <dbl>   <dbl> <dbl> <dbl> <fct>
 1 te(wM,Posan):Year2011 Year        -1.43  0.00137 7556. 1516. 2011 
 2 te(wM,Posan):Year2011 Year        -1.11  0.00137 7506. 1466. 2011 
 3 te(wM,Posan):Year2011 Year        -0.789 0.00137 7456. 1417. 2011 
 4 te(wM,Posan):Year2011 Year        -0.470 0.00137 7405. 1368. 2011 
 5 te(wM,Posan):Year2011 Year        -0.150 0.00137 7355. 1319. 2011 
 6 te(wM,Posan):Year2011 Year         0.169 0.00137 7305. 1271. 2011 
 7 te(wM,Posan):Year2011 Year         0.489 0.00137 7255. 1224. 2011 
 8 te(wM,Posan):Year2011 Year         0.808 0.00137 7205. 1178. 2011 
 9 te(wM,Posan):Year2011 Year         1.13  0.00137 7154. 1132. 2011 
10 te(wM,Posan):Year2011 Year         1.45  0.00137 7104. 1087. 2011 
# … with 59,990 more rows

在这里,您会看到有一些变量编码特定的平滑度,指示by变量是什么,并且所有数据列均与上面显示的曲面相关联。在评估协变量组合的平滑度之前,这里wMPosan在数据范围内的100x100点网格上进行评估。