Переменная date
не будет автоматически преобразована в числовую переменную;вам нужно сделать это самостоятельно.Обычно я обрабатываю такую информацию следующим образом:
mydata <- transform(mydata, ndate = as.numeric(date),
nyear = as.numeric(format(date, '%Y')),
nmonth = as.numeric(format(date, '%m')),
doy = as.numeric(format(date, '%j')))
Затем я могу выбрать моделирование компонента времени несколькими способами:
- тренд на основе
ndate
из nyear
с нециклическим сплайном, или - циклическим шаблоном на основе
nmonth
или doy
(для дня года), или - комбинацией тренда и циклического шаблона
Из вашего вопроса неясно, ограничены ли ваши данные одним годом.Если данные охватывают несколько лет, вы не можете просто использовать циклический сплайн для переменной ndate
.Вам потребуется либо очень сложный стандартный сплайн (вариант 1), либо два сплайна: один для части года и один для части года (вариант 3).
Если вашданные за несколько лет, тогда я бы установил модель как
O3 ~ s(X, Y, bs = "tp", k = 10) + wd + s(doy, bs = 'cc', k = 20) +
s(ndate, bs = "tp", k = 50) + district
или, возможно, будет достаточно s(nyear, .... )
вместо s(ndate, .... )
.
Этот вид разложения компонента времениэто полезно, так как вы часто можете лучше подгонять ряды с помощью двух простых, хорошо оцененных сглаживаний, чем одно более сложное сглаживание.Он также позволяет вам проверять эффекты в течение года и между годами.
Если вам нужно, чтобы сезонный цикл изменялся с трендом, то тензорный продукт полезен:
O3 ~ s(X, Y, bs = "tp", k = 10) + wd +
te(doy, ndate, bs = c('cc','tp'), k = c(20,50)) + district
Для циклических сплайновВы также можете установить аргумент knots
, особенно если ваши данные не охватывают весь диапазон дней года и т. д. Для doy
я бы использовал knots = list(doy = c(0.5, 366.5))
, поскольку это позволяет 31 декабря и 1 января иметьнемного отличающиеся оценочные значения.Для nmonth
это более важно, так как в противном случае декабрь и январь получат одинаковое установленное значение.Я использую: knots = list(nmonth = c(0.5, 12.5))
.
Идея заключается в том, что 1
и 12
отражают середину соответствующего месяца, а 0.5
и 12.5
- начало и конец первого и последнего месяцев., что мы могли бы ожидать, что то же самое.