【问题标题】:plotting correct values for gam model in r在 r 中绘制 gam 模型的正确值
【发布时间】:2012-06-27 09:58:38
【问题描述】:

我有以下示例(与我的数据格式相似):

set.seed(1)
RandData <- runif(8760*2)
Locations <- rep(c('UK','France'),each=8760)

Date = seq(from=as.POSIXct("1991-01-01 00:00"), 
           to=as.POSIXct("1991-12-31 23:00"), length=8760)

Final <- data.frame(Loc = Locations,
                    Doy = as.numeric(format(Date,format = "%j")),
                    Tod = as.numeric(format(Date,format = "%H")),
                    Temp = RandData)
require(mgcv)
mod1 <- gam(Temp ~ Loc + s(Doy) + s(Doy,by = Loc) +
  s(Tod) + s(Tod,by = Loc),data = Final)
plot(mod1,pages = 1, scale = 0)

从这个模型中,绘制的结果首先显示了平均温度随一年中一天的变化,然后显示了每个位置的温度与该平均值的变化量。一天中的时间也是如此。

问题在于 y 轴没有显示正确的值范围,即第一个图没有显示这些位置的平均温度。如何更改绘图以显示 (1) 两个位置的平均温度和 (2) 每个位置的温度与平均值相比,而不是某个任意数字。

如果我没有明确表达我的意图,请告诉我,我会尽力提供一个更好的例子。

【问题讨论】:

  • 绘图使用正确的值。您对情节的解释是错误的。

标签: r gam


【解决方案1】:

gam 模型的图显示了平滑器本身的效果。如果您想要模型的几个部分的组合效果,则创建一个 data.frame,其中包含每个值的相关值,使用 predict(model, newdata) 计算这些值的预测并创建您想要的图。

dataset <- expand.grid(Loc = unique(Final$Loc), 
    Doy = pretty(Final$Doy), Tod = pretty(Final$Tod))
dataset$Temp <- predict(mod1, newdata = dataset)
library(ggplot2)
ggplot(dataset, aes(x = Doy, y = Temp, linetype = Loc)) + geom_line() + 
    facet_wrap(~Tod)

【讨论】:

  • 你能提供一个上面发布的问题的例子吗?我明白你的意思,只是觉得很难申请一个有两个地点(即英国和法国)的游戏#
  • 能否请您说明为什么该示例不可重现。另外我认为提供的脚本可能有效,我认为问题出在绘图上,ggplot 返回: aes(x = as.factor(Doy), y = as.numeric(Temp)) + geom_line() 中的错误:二元运算符的非数字参数
  • Loc 必须是让您的代码在我的机器上运行的一个因素。我的代码缺少一些括号(现已更正)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 2017-05-04
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多