2016-08-10 55 views
3

我在R中運行LOESS迴歸,並且遇到了一些較小數據集的警告。LOESS與R中跨度相關的警告/錯誤

警告消息:

1:在simpleLoess(Y,X,W,跨度,度=度,參數= 參數,:僞逆用於在-2703.9

2:在simpleLoess( Y,X,W,跨度,度=度,參數= 參數,:鄰域半徑796.09

3:在simpleLoess(Y,X,W,跨度,度=度,參數= 參數,:倒數條件數字0

4:在simpleLoess(y,x,w,span,degree = degree,parametric = parametric,:還有其他的近似奇點。 Understanding loess errors in R: 6.1623e + 005

在另一篇文章在這裏討論這些錯誤。

似乎這些警告與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 s的堆積。

從實踐的角度來看,我通常仍然會相信迴歸,可能在檢查圖形輸出後。但我肯定不會增加span來實現壓扁:爲此目的使用微量的jitter好得多; span應該由其他考慮決定,例如您的Period數據等的整體傳播等。

+0

使用抖動數據運行LOESS迴歸出現了一些問題。來自抖動數據和非抖動數據的線在一點上是完全不同的。雖然相關,但它似乎可以在自己的問題下得到最好的回答。 http://stackoverflow.com/questions/38948553/jittering-effects-on-loess – Corey