【问题标题】:Plotting factor-by-curve tensor product smooths of mgcv::gam绘制 mgcv::gam 的逐曲线张量积平滑
【发布时间】:2019-04-28 08:08:57
【问题描述】:

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

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")

然而,当我包含一个张量时,我似乎无法做类似的事情——它只会用完整的数据绘制一个等高线图,而不是让它被感兴趣的因子变量分区:

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

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

我可以在一个条件下执行mgcv::vis.gam

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

然后通过Rmisc::multiplot 或基础plot 聚合图,但我对这些解决方案不太满意,无论是在美学方面还是在工作流程方面。关于使用逐个曲线为张量积平滑绘制漂亮图的任何方便技巧?

【问题讨论】:

    标签: r gam mgcv


    【解决方案1】:

    取决于你所说的更漂亮是什么意思? ;-)

    我的 gratia 包将生成因子平滑图。例如

    draw(test, ncol = 2)
    

    生产

    表面的灰色部分是从可用数据推断得太远的地方。 “太远”的距离由dist 参数控制,默认情况下,如果它超过数据范围的 10% (dist = 0.1),则将网格上的任何点标记为NA远离最近的数据点。

    我还没有考虑让这些表面以相同的比例绘制并有一个共同的颜色条图例,但是感谢是一项正在进行中的工作。

    如果你想自己绘制,那么 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 点网格上进行评估,然后评估这些协变量组合的平滑度。

    【讨论】:

    • 谢谢,这很简单!它绝对符合“更漂亮”的标准。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2022-01-22
    • 2017-06-10
    • 2017-01-14
    相关资源
    最近更新 更多