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

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

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.


person random_forest_fanatic    schedule 17.12.2014    source источник
comment
Этот пост может оказаться полезным для вас: stat.ethz.ch/pipermail /r-help/2005-ноябрь/082853.html. Вы можете вычислить AIC лёссовых посадок с несколькими различными пролетами и выбрать пролет с минимальным AIC.   -  person bdemarest    schedule 17.12.2014
comment
@bdemarest Спасибо за ссылку! Тем не менее, я пытаюсь найти способ математически выбрать диапазон вместо использования AIC/перекрестной проверки/и т.д. Для моего сценария слишком дорого выполнять каждую подгонку несколько раз.   -  person random_forest_fanatic    schedule 17.12.2014
comment
Пожалуйста, дайте мне знать, какое решение вы в конечном итоге используете. Мои собственные усилия привели меня к мысли, что решения в замкнутой форме для задач оптимизации лёсса просто невозможны, но я хотел бы изучить лучший/быстрый способ выбора пролета.   -  person bdemarest    schedule 17.12.2014


Ответы (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()

введите здесь описание изображения

person Khashaa    schedule 17.12.2014
comment
Я смотрю на fit$fitted 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))? - person random_forest_fanatic; 17.12.2014
comment
О, и перекрестная проверка — отличная идея! Но это слишком затратно в вычислительном отношении для моих целей, потому что мне нужно подогнать эту модель ко многим временным рядам. - person random_forest_fanatic; 17.12.2014
comment
Извините, я должен был опубликовать это как комментарий, так как это не очень конструктивно о том, как настроить параметр span. Я думаю, что мое замечание о коллинеарности не совсем неуместно, потому что для некоторого интервала, когда доступно только одно наблюдение, оно обязательно создает коллинеарность. 5 последовательных NA в y предполагают как минимум 2 таких точки. - person Khashaa; 17.12.2014
comment
Я согласен с тем, что коллинеарность становится проблемой, когда у вас есть только одно наблюдение (или только одно уникальное значение x). Но я не понимаю, что происходит в модели лёсса при x=16. Есть три точки, достаточно близкие, чтобы их можно было использовать для подгонки, но, похоже, это приводит к числовой проблеме. Есть идеи, что происходит в этот момент? - person random_forest_fanatic; 17.12.2014