2012-06-27 2 views
0

У меня есть следующий пример (который находится в том же формате, моим данным):черчения правильные значения для 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) 

Из этой модели, исход которого отложена во-первых, показывает изменение средней температуры как функцию дня года, а затем величину, при которой температура в каждом месте изменяется от этого значения. То же самое показано на Время дня.

Проблема заключается в том, что yaxis не показывают правильный диапазон значений, т.е. первый график не показывает среднюю температуру для этих местоположений. Как можно изменить графики, чтобы показать (1) среднюю температуру для обоих мест и (2) температуру в каждом месте по сравнению со средним значением, а не какое-то произвольное число.

Если я не был ясен в выражении своих намерений, дайте мне знать, и я постараюсь предоставить лучший пример.

+0

Участок использует правильные значения. Ваша интерпретация сюжетов неверна. – Thierry

ответ

0

Графики модели гаммы отображают эффект самой гладкой. Если вам нужен комбинированный эффект нескольких частей модели, тогда создайте data.frame с соответствующими значениями для каждого значения, рассчитайте предсказание для этих значений с помощью прогноза (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) 
+0

не могли бы вы привести пример из вопроса, вышедшего выше? Я понимаю, что вы говорите, просто трудно применить к игре с двумя местоположениями (например, в Великобритании и Франции) # – KatyB

+0

Не могли бы вы указать, почему пример не воспроизводится. Также я думаю, что предоставленный скрипт может работать, я думаю, что проблема заключается в построении графика, ggplot возвращает: Ошибка в aes (x = as.factor (Doy), y = as.numeric (Temp)) + geom_line(): нечисловой аргумент двоичному оператору – KatyB

+0

Loc должен быть фактором, чтобы ваш код работал на моей машине. В моем коде отсутствовали некоторые скобки (исправлено сейчас). – Thierry