在r中绘制gam模型的正确值

时间:2012-06-27 09:58:38

标签: r gam

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

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

如果我不清楚表达我的意图,请告诉我,我会尽力提供一个更好的例子。

1 个答案:

答案 0 :(得分: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)