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 に答える