Кажется, что я решил проблему, возможно, не совсем понимая, как она поступила со статусом новичка.
Во-первых, ни один NA не должен присутствовать в смоделированных данных.Был один.После этого mcgv, казалось, запускался, но это заняло много времени (четверть часа) и необъяснимо для меня, только когда я ограничил число узлов k=50,
с плохими результатами (меньше или больше, и он не дал никакого результата)и с предупреждением быть осторожным о результатах.Затем я попытался удалить offset=log(liczba_wyborcow)
, то есть сместить число избирателей, и набрал число недействительных голосов на 1000 мою прогнозируемую переменную.
elections <-
boroughs_shp %>%
left_join(elections_xls, by = "teryt") %>% na.omit() %>%
arrange(teryt) %>%
mutate(idx = row_number() %>% as.factor()) %>%
mutate(void_ratio=round(glosy_niewazne/liczba_wyborcow,3)*1000)
Теперь, когда это подсчет, почему бы не попробоватьизменить family = betar()
в формуле гаммы на poisson()
- все еще не очень хороший результат, а затем на отрицательный бином family = nb()
Теперь моя формула выглядит как
m1 <-
gam(
void_ratio ~ s(
idx,
bs = 'mrf',
k =500,
xt = list(nb = boroughs_nb),
fx = TRUE),
data = elections_df,
method = 'REML',
control = gam.control(nthreads = 4),
family = nb()
)
Кажется, теперьбыть невероятно быстрым и возвращать достоверные результаты без предупреждений или ошибок.На ноутбуке с 4 ядрами Intel Core I7 6820HQ @ 2,70 ГГц 16 ГБ Win10 сейчас требуется 1-2 минуты, чтобы собрать модель.
Вкратце, я изменил следующее: удалите один NA, удалите смещение из формулы и используйте отрицательное биномиальное распределение .
Вот результат того, что я хотел достичь, слева направо, реальную ставку недействительных голосов, ставку, сглаженную моделью, и остатки, указывающие на расхождения.Код mcgv позволяет мне это сделать.