使用 mgcViz 绘制 GAM 平滑效果时的时间(小时)格式

Posted

技术标签:

【中文标题】使用 mgcViz 绘制 GAM 平滑效果时的时间(小时)格式【英文标题】:Time (hours) formatting when plotting GAM smooth effects with mgcViz 【发布时间】:2022-01-16 19:53:25 【问题描述】:

我有一个 GAM 模型,其中一天中的时间是预测变量值之一。时间是数字格式,因为据我了解,mgcv::gam 不接受 POSIXct 类。该模型工作正常,但我希望看到平滑效果在 X 轴上具有 HH:MM 的图,而不是连续的 UNIX 纪元。我正在使用mgcViz 进行绘图。

如何在 X 轴标签上获得漂亮的时间格式 (HH/HH:MM)?

可重现的例子:

require(mgcv)
require(mgcViz)

min_datetime <- as.POSIXct(strptime("2021-12-27 06:00:00", "%Y-%m-%d %H:%M:%S"))
max_datetime <- as.POSIXct(strptime("2021-12-27 18:00:00", "%Y-%m-%d %H:%M:%S"))

x <- runif(100)
y <- runif(100)
tod <- runif(100, min = as.numeric(min_datetime), max = as.numeric(max_datetime))

df <- data.frame(x, y, tod)

mod <- gam(y ~ x + tod, data = df)

viz_mod <- getViz(mod)

plot_mod <- plot(viz_mod, select = 2) +
  l_fitLine(linetype = 1)

# Epoch on X-axis, should be HH:MM
print(plot_mod)

【问题讨论】:

【参考方案1】:

由于mgcVizggplot2 的包装,您可以使用标准的ggplot2::scale_... 函数来操作您的标签、中断或绘图中您想要的任何其他内容。在这里,我们可以使用scale_x_continuous 将数字x 轴转换回POSIXct,然后根据需要对其进行格式化。

plot_mod +
  scale_x_continuous(labels = ~ format(as.POSIXct(.x, origin = origin), "%H:%M"))

【讨论】:

以上是关于使用 mgcViz 绘制 GAM 平滑效果时的时间(小时)格式的主要内容,如果未能解决你的问题,请参考以下文章

如何跟踪触摸时的手指运动以绘制平滑曲线?

Stargazer和gam - 如何包含整个摘要输出?

视频什么是非线性模型与R语言多项式回归局部平滑样条 广义相加GAM分析工资数据|数据分享|附代码数据

在 matplotlib 图中绘制平滑曲线

各路大神DrawNode绘制的线锯齿太严重怎么解决

SVG悬停时的平滑过渡线性渐变