0

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

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) 每个位置的温度与平均值相比,而不是某个任意数字。

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

4

1 回答 1

0

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)
于 2012-06-27T11:48:21.857 回答