因此,我有一个统计模型,其中我使用逐曲线系数,即为某些类别拟合单独的平滑曲线,如下所示。 (我并没有特别注意数据/模型的含义,只是将其作为一个最小的示例。)
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")
但是,当我包含张量时,我似乎无法做类似的事情---它只会简单地绘制一个具有完整数据的等高线图,而不是将其按感兴趣的因子变量进行分区:< / p>
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
汇总图,但是从美学和工作流程两方面,我对这些解决方案都不满意。有一些方便的技巧可以针对张量积用曲线系数平滑绘制漂亮的图吗?
答案 0 :(得分:1)
取决于您的意思是更漂亮吗? ;-)
我的 gratia 软件包将生成因数平滑图。例如
draw(test, ncol = 2)
产生
表面的灰色部分是人们将其与可用数据相距太远的地方。 “太远”的程度由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
变量是什么,并且所有数据列均与上面显示的曲面相关联。在评估协变量组合的平滑度之前,这里wM
和Posan
在数据范围内的100x100点网格上进行评估。