2016-08-10 11 views
3

Я запускаю LOESS регрессию в R и сталкивался с предупреждениями с некоторыми из моих меньших наборов данных.LOESS предупреждения/ошибки, связанные с диапазоном в R

предупредительные сообщения:

1: В simpleLoess (у, х, ш, продолжительность, степень = степень, параметрическая = параметрическое,: Псевдообратный используется при -2703.9

2: В simpleLoess (у, х, ш, продолжительность, степень = степень, параметрический = параметрическое,: радиус окрестностей 796,09

3: В simpleLoess (Y, X, W, продолжительность, степень = степень, параметрическое = параметрических,: взаимное условие номер 0

4: В simpleLoess (y, x, w, span, degree = degree, параметрический = параметрический: есть и другие близкие особенности. 6.1623e + 005

Эти ошибки обсуждаются в другом посте здесь: Understanding loess errors in R.

Похоже, что эти предупреждения относятся к диапазону, установленному для регрессии LOESS. Я пытаюсь применить аналогичную методологию, которая была сделана с другими наборами данных, где параметры приемлемого сглаживания были между 0,3 и 0,6. В некоторых случаях я могу настроить диапазон, чтобы избежать этих проблем, но в других наборах данных диапазон должен был быть увеличен за допустимые уровни, чтобы избежать ошибок/предупреждений.

Мне любопытно, что конкретно означают эти предупреждения, и будет ли это ситуацией, когда регрессия пригодна для использования, но следует отметить, что эти предупреждения произошли, или если регрессия полностью недействительна.

Ниже приведен пример набора данных, который возникли проблемы:

Period Value Total1 Total2 
-2950 0.104938272 32.4 3.4 
-2715 0.054347826 46 2.5 
-2715 0.128378378 37 4.75 
-2715 0.188679245 39.75 7.5 
-3500 0.245014245 39 9.555555556 
-3500 0.163120567 105.75 17.25 
-3500 0.086956522 28.75 2.5 
-4350 0.171038825 31.76666667 5.433333333 
-3650 0.143798024 30.36666667 4.366666667 
-4350 0.235588972 26.6 6.266666667 
-3500 0.228840125 79.75 18.25 
-4933 0.154931973 70 10.8452381 
-4350 0.021428571 35 0.75 
-3500 0.0625 28 1.75 
-2715 0.160714286 28 4.5 
-2715 0.110047847 52.25 5.75 
-3500 0.176923077 32.5 5.75 
-3500 0.226277372 34.25 7.75 
-2715 0.132625995 188.5 25 

А вот данные без разрывов строк

Period Value Total1 Total2 
-2950 0.104938272 32.4 3.4 
-2715 0.054347826 46 2.5 
-2715 0.128378378 37 4.75 
-2715 0.188679245 39.75 7.5 
-3500 0.245014245 39 9.555555556 
-3500 0.163120567 105.75 17.25 
-3500 0.086956522 28.75 2.5 
-4350 0.171038825 31.76666667 5.433333333 
-3650 0.143798024 30.36666667 4.366666667 
-4350 0.235588972 26.6 6.266666667 
-3500 0.228840125 79.75 18.25 
-4933 0.154931973 70 10.8452381 
-4350 0.021428571 35 0.75 
-3500 0.0625 28 1.75 
-2715 0.160714286 28 4.5 
-2715 0.110047847 52.25 5.75 
-3500 0.176923077 32.5 5.75 
-3500 0.226277372 34.25 7.75 
-2715 0.132625995 188.5 25 

Вот код, я использую:

Analysis <- read.csv(file.choose(), header = T) 
plot(Value ~ Period, Analysis) 
a <- order(Analysis$Period) 
Analysis.lo <- loess(Value ~ Period, Analysis, weights = Total1) 
pred <- predict(Analysis.lo, se = TRUE) 
lines(Analysis$Period[a], pred$fit[a], col="red", lwd=3) 
lines(Analysis$Period[a], pred$fit[a] - qt(0.975, pred$df)*pred$se[a],lty=2) 
lines(Analysis$Period[a], pred$fit[a] + qt(0.975,pred$df)*pred$se[a],lty=2) 

Спасибо за вашу помощь, и, пожалуйста, дайте мне знать, нужна ли какая-либо дополнительная информация.

+1

Где именно ваш код вызывает ошибку? – steveb

+0

На данный момент вы спрашиваете нас, почему вы получаете предупреждения от процедуры, которую вы не описываете. –

ответ

3

Предупреждений выдаются, поскольку алгоритм loess находит численные трудности, в связи с тем, что Period имеет несколько значений, которые повторяются относительно большое количеством раз, как вы можете видеть из вашего участка, а также с:

table(Analysis$Period) 

В этом отношении Period ведет себя фактически как дискретная переменная (фактор), а не непрерывная, как это необходимо для правильного сглаживания.Добавление некоторого джиттера удаляет предупреждение:

Analysis <- read.table(header = T,text="Period Value Total1 Total2 
-2950 0.104938272 32.4 3.4 
-2715 0.054347826 46 2.5 
-2715 0.128378378 37 4.75 
-2715 0.188679245 39.75 7.5 
-3500 0.245014245 39 9.555555556 
-3500 0.163120567 105.75 17.25 
-3500 0.086956522 28.75 2.5 
-4350 0.171038825 31.76666667 5.433333333 
-3650 0.143798024 30.36666667 4.366666667 
-4350 0.235588972 26.6 6.266666667 
-3500 0.228840125 79.75 18.25 
-4933 0.154931973 70 10.8452381 
-4350 0.021428571 35 0.75 
-3500 0.0625 28 1.75 
-2715 0.160714286 28 4.5 
-2715 0.110047847 52.25 5.75 
-3500 0.176923077 32.5 5.75 
-3500 0.226277372 34.25 7.75 
-2715 0.132625995 188.5 25") 

table(Analysis$Period)  
Analysis$Period <- jitter(Analysis$Period, factor=0.2) 

plot(Value ~ Period, Analysis) 
a <- order(Analysis$Period) 
Analysis.lo <- loess(Value ~ Period, Analysis, weights = Total1) 
pred <- predict(Analysis.lo, se = TRUE) 
lines(Analysis$Period[a], pred$fit[a], col="red", lwd=3) 
lines(Analysis$Period[a], pred$fit[a] - qt(0.975, pred$df)*pred$se[a],lty=2) 
lines(Analysis$Period[a], pred$fit[a] + qt(0.975,pred$df)*pred$se[a],lty=2) 

Увеличение параметра span имеет эффект «давя из», по Period оси, груды повторяющихся значений, где они происходят; с небольшими наборами данных вам нужно много раздавить, чтобы компенсировать нагромождение повторяющихся Period с.

С практической точки зрения, я, как правило, по-прежнему верю в регрессию, возможно, после изучения графического вывода. Но я бы определенно не увеличил span, чтобы добиться раздавливания: для этой цели гораздо лучше использовать крошечное количество jitter; span должны быть продиктованы другими соображениями, такими как общий разброс ваших данных Period и т. Д.

+0

Некоторые проблемы возникли при выполнении регрессии LOESS с использованием дрожащих данных. Линии из дрожавших данных и не дрожащие данные в какой-то момент были совершенно разными. Несмотря на то, что это было связано, казалось, что лучше всего ответить на его собственный вопрос. http://stackoverflow.com/questions/38948553/jittering-effects-on-loess – Corey

 Смежные вопросы

  • Нет связанных вопросов^_^