Понимание ошибок лесса в R

Я пытаюсь подобрать модель, используя лесс, и получаю такие ошибки, как "псевдообратное использование в 3", "радиус соседства 1" и "взаимное условие номер 0". Вот MWE:

x = 1:19
y = c(NA,71.5,53.1,53.9,55.9,54.9,60.5,NA,NA,NA
      ,NA,NA,178.0,180.9,180.9,NA,NA,192.5,194.7)
fit = loess(formula = y ~ x,
        control = loess.control(surface = "direct"),
        span = 0.3, degree = 1)
x2 = seq(0,20,.1)
library(ggplot2)
qplot(x=x2
    ,y=predict(fit, newdata=data.frame(x=x2))
    ,geom="line")

Я понимаю, что могу исправить эти ошибки, выбрав большее значение диапазона. Тем не менее, я пытаюсь автоматизировать эту подгонку, так как у меня есть около 100 000 временных рядов (каждый длиной около 20), подобных этому. Есть ли способ, которым я могу автоматически выбрать значение диапазона, которое предотвратит эти ошибки и при этом обеспечит довольно гибкое соответствие данных? Или кто-нибудь может объяснить, что означают эти ошибки? Я немного поковырялся в функциях loess() и simpleLoess(), но я сдался в тот момент, когда был вызван C-код.

1 ответ

Сравнить fit$fitted в y, Вы заметите, что что-то не так с вашей регрессией. Выберите подходящую пропускную способность, иначе он просто будет интерполировать данные. При слишком малом количестве точек данных линейная функция ведет себя как постоянная на небольшой полосе пропускания и запускает коллинеарность. Таким образом, вы видите ошибки, предупреждающие псевдообращения, особенности. Вы не увидите таких ошибок, если вы используете degree=0 или же ksmooth, Один понятный, управляемый данными выбор span использовать для перекрестной проверки, о которой вы можете спросить в Cross Validated.

> fit$fitted
 [1]  71.5  53.1  53.9  55.9  54.9  60.5 178.0 180.9 180.9 192.5 194.7
> y
 [1]    NA  71.5  53.1  53.9  55.9  54.9  60.5    NA    NA    NA    NA    NA 178.0
[14] 180.9 180.9    NA    NA 192.5 194.7

Вы видите избыточное соответствие (идеально подходящее), потому что в вашей модели количество параметров равно эффективному размеру выборки.

fit
#Call:
#loess(formula = y ~ x, span = 0.3, degree = 1, control = loess.control(surface = "direct"))

#Number of Observations: 11 
#Equivalent Number of Parameters: 11 
#Residual Standard Error: Inf 

Или вы можете просто использовать автоматизированный geom_smooth, (снова настройка geom_smooth(span=0.3) выкидывает предупреждения)

ggplot(data=data.frame(x, y), aes(x, y)) + 
  geom_point() + geom_smooth()

Другие вопросы по тегам