我有以下示例(格式与我的数据类似):
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)每个位置的温度与平均值相比而不是某个任意数量。
如果我不清楚表达我的意图,请告诉我,我会尽力提供一个更好的例子。
答案 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)