Понимание ошибок лесса в 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()