2014-12-17 5 views
4

Я пытаюсь подгонять модель с помощью лёсса, и я получаю такие ошибки, как «псевдоинверсия, используемая в 3», «радиус окрестности 1» и «число обратных условий 0». Вот MWE:Понимание ошибок лёсса в R

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.

+0

Вы можете найти этот пост полезным: https://stat.ethz.ch/pipermail/r-help/2005-November/082853.html. Вы можете вычислить AIC для лёссовых приемов с несколькими различными пролетами и выбрать диапазон с минимальным AIC. – bdemarest

+0

@bdemarest Спасибо за эту ссылку! Тем не менее, я пытаюсь найти способ «математически» выбрать диапазон, а не через AIC/cross-validation/etc. Для моего сценария слишком сложно вычислить дорогостоящие сценарии, которые можно использовать каждый раз несколько раз. –

+0

Пожалуйста, дайте мне знать, какое решение вы в конечном итоге используете. Мои собственные усилия заставили меня поверить, что решения закрытой формы для проблем с лёссовой оптимизацией просто невозможны, но я хотел бы узнать лучший/более быстрый способ выбора диапазона. – bdemarest

ответ

6

Сравнить 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), потому что в вашем модельном ряду параметров столько, сколько эффективного размера выборки.

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() 

enter image description here

+0

Я смотрю на подходящую $ установленную vs y, и я не вижу проблемы, о которой вы говорите (если вы не имеете в виду, что у меня нет y-значений в [80,160]). Я думал, что интервал 0,3 будет означать максимальное расстояние = (19-1) *. 3 = 5.4. Итак, при оценке y при x = 16, например, не будет ли функция использовать наблюдения, где x = 14, 15 и 18? Как эта модель имеет коллинеарность (поскольку (1,1,1) не зависит от (14,15,18))? –

+0

О, и перекрестная проверка - отличная идея! Но это слишком дорогостоящее вычисление для моих целей, потому что я должен подгонять эту модель во многие временные ряды. –

+0

Извините, я должен был опубликовать это как комментарий, так как это не очень конструктивно о том, как настроить параметр «span». Я думаю, что мое замечание о коллинеарности не совсем неуместно, потому что на некотором интервале, где имеется только одно наблюдение, оно обязательно создает коллинеарность. 5 последовательных NA в 'y' предлагают не менее 2 таких точек. – Khashaa