首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解R中的loess错误

理解R中的loess错误
EN

Stack Overflow用户
提问于 2014-12-17 23:22:29
回答 1查看 3K关注 0票数 6

我正在尝试使用loess来拟合一个模型,但是我得到了一些错误,比如“在3处使用伪逆”、“邻域半径1”和“倒数0”。这是一个MWE:

代码语言:javascript
复制
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")

我意识到我可以通过选择更大的span值来修复这些错误。然而,我正在尝试自动化这种拟合,因为我有大约100,000个时间序列(每个序列的长度约为20)与此类似。有没有一种方法可以让我自动选择一个跨度值来防止这些错误,同时仍然为数据提供相当灵活的拟合?或者,谁能解释一下这些错误是什么意思?我对loess()和simpleLoess()函数做了一些探索,但在调用C代码时放弃了。

EN

回答 1

Stack Overflow用户

发布于 2014-12-18 01:33:07

试比较fit$fittedy。你会注意到你的回归出了问题。选择足够的带宽,否则它只会插入数据。在数据点太少的情况下,线性函数在小带宽上表现为常数,并触发共线性。因此,您会看到警告伪反转、奇点的错误。如果你使用degree=0ksmooth,你不会看到这样的错误。一种易于理解的、数据驱动的span选择是使用交叉验证,您可以在Cross Validated上询问这方面的问题。

代码语言:javascript
复制
> 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

你会看到过拟合( perfect-fit),因为在你的模型中,参数的数量与有效样本大小一样多。

代码语言:javascript
复制
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)会抛出警告)

代码语言:javascript
复制
ggplot(data=data.frame(x, y), aes(x, y)) + 
  geom_point() + geom_smooth()

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27528918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档