代码之家  ›  专栏  ›  技术社区  ›  Kim

用mgcv::gam的曲线张量积平滑绘制因子

  •  0
  • Kim  · 技术社区  · 6 年前

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

    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

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

    警告消息: 在标题(…)中:“by”不是图形参数

    enter image description here

    mgcv::vis.gam 有条件:

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

    然后根据 Rmisc::multiplot 或基础 plot ,但我对这些解决方案不太满意,无论是在美观方面还是在工作流程方面。关于使用逐曲线因子绘制张量积平滑的漂亮图,有什么有用的技巧吗?

    0 回复  |  直到 6 年前
        1
  •  2
  •   Gavin Simpson    6 年前

    取决于你说的更漂亮是什么意思

    我的 恩惠 包将通过平滑生成因子图。例如

    draw(test, ncol = 2)
    

    生产

    enter image description here

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

    我还没有来得及允许这些曲面以相同的比例绘制,也没有来得及拥有一个通用的色条图例,但是 恩惠 这在很大程度上是一项正在进行的工作。

    如果你想自己绘制,那么 恩惠 还可以生成一个整洁的类似对象(TIBLE,数据以适合打印的形式排列) 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 变量为,所有数据列都与上面显示的曲面相关联。在这里 wM Posan 在评估这些协变量组合的平滑度之前,在数据范围内的100x100点网格上进行评估。