Создание прогнозных уравнений регрессии с использованием MRF в пакете MGCV RStudio

Я работаю с историческими данными о концентрации питательных веществ с ряда станций мониторинга, а также с соответствующими историческими потоками. Я пытаюсь написать прогностические уравнения регрессии для оценки концентраций на станциях, которые сейчас закрыты. Я просмотрел несколько руководств по пакету MGCV и решил, что марковские случайные поля подойдут для того, что я делаю. Я не был уверен, как выбрать определенные параметры для построения регрессии из более крупного фрейма данных, поэтому я настроил фреймы данных так, чтобы они содержали только информацию, необходимую для регрессии каждой станции. Вот пример для станции C9:

C9_TP_Reg:

Station, Date.x, Month, Year, Day, TP, SWP, CVP
D19, 1975-1-07, 1, 1975, 7, 0.1, 3593, 1071
C9, 1975-1-22, 1, 1975, 22, 0.16, 1914, 3483
D28A, 1975-02-03, 2, 1975, 3, 0.11, 2360, 4506
...

Это большой набор данных, который охватывает несколько лет...

Я попытался написать свою регрессию, используя следующий код:

TP_C9 <- gam(TP ~ s(Date.x) + s(Station,bs="mrf",xt=list(nb=nb)) + 
             s(SWP) + s(CVP), data=C9_TP_reg)

Я получил эту ошибку:

Error in names(dat) <- object$term : 'names' attribute [1] must be 
the same length as the vector [0]

Если кто-нибудь может мне помочь, я был бы очень благодарен. Я часами просматривал руководства по пакету MGCV и не могу заставить его работать.

Я предполагаю, что если я просто подойду для всех станций, я смогу переделать уравнение и решить для C9, чтобы оценить будущие концентрации...


person MicaelaB    schedule 10.06.2020    source источник
comment
Кодируется ли Station как фактор?   -  person Gavin Simpson    schedule 11.06.2020
comment
Я только что посмотрел, и мои станции в настоящее время закодированы как символы. Я поменяю их на коэффициенты. Я только что начал изучать пакет под названием «baytrends», который применяет GAM к составляющим качества воды. Я рассматриваю попытку следовать формату, подобному этому:   -  person MicaelaB    schedule 12.06.2020
comment
Я начал изучать пакет под названием «baytrends», который применяет GAM к составляющим качества воды. Я рассматриваю возможность использования формата, подобного этому: gam2_flwsal: gam(y ∼ cyear + s(cyear, k = gamK1) + s (doy,bs = 'cc') + ti(cyear,doy,bs = c( 'tp','cc')) + s (flw_sal,k = gamK2) + ti(flw_sal,doy,bs = c('tp','cc')) + ti(flw_sal, cyear,bs = c(' tp','tp')) + ti(flw_sal,doy,cyear, bs = c('tp','cc','tp')), узлы=список(doy=c(1,366)), select=TRUE ) Где gamK1=c(10,1/3), gamK2=c(10,2/3), cyear=нулевая центрированная дата в десятичной форме и doy=день года в числовом виде (366 для учета високосных лет) .   -  person MicaelaB    schedule 12.06.2020
comment
Исследование, которое я читаю, использует этот GAM для оценки тенденций на каждой станции, в то время как я пытаюсь написать уравнения для исторических станций, которые могут быть описаны концентрациями питательных веществ на окружающих станциях, которые все еще отслеживаются вместе с условиями потока. Я пытаюсь написать эти уравнения для соединений азота и фосфора, которые претерпевают биогеохимические преобразования. Уравнения для соединений азота были написаны моей коллегой в прошлом с использованием изотопных данных для дельты 15 N, хотя ее уравнения применимы только для июня-октября.   -  person MicaelaB    schedule 12.06.2020
comment
Есть надежда, что этот код может помочь предоставить информацию, необходимую для создания TMDL, а также помочь уменьшить эвтрофические условия и улучшить качество воды. Если у вас есть какие-либо советы или ресурсы, которые вы можете предложить, я был бы невероятно благодарен.   -  person MicaelaB    schedule 12.06.2020
comment
После изменения Station на фактор я получаю эту ошибку: Ошибка в именах (dat) ‹- object$term: атрибут 'names' [1] должен быть той же длины, что и вектор [0]   -  person MicaelaB    schedule 13.06.2020


Ответы (1)


Вы можете включить функцию as.factor в формулу:

s(as.factor(Station),bs="mrf",xt=list(nb=objectpolygon))

И дайте вашему объекту nb имена файла формы, который вы используете, например

names(objectpolygon) <- attr(objectpolygon, "station.id")

Был вопрос, который я недавно прочитал об этой проблеме. Добавлю ссылку, когда найду. Возможно, проблема в этом. Я новичок в mgcv и пытаюсь подобрать модель со сглаживанием mrf. Кстати, я создал свой objectpolygon с помощью функции poly2nb из пакета spdep.

person Lil    schedule 25.06.2020