【问题标题】:Understanding loess errors in R了解 R 中的黄土错误
【发布时间】:2014-12-17 15:22:28
【问题描述】:

我正在尝试使用 loess 拟合模型,但我遇到了诸如“使用 3 处的伪逆”、“邻域半径 1”和“倒数条件数 0”之类的错误。这是一个 MWE:

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 代码时我放弃了。

【问题讨论】:

  • 您可能会发现这篇文章很有用:stat.ethz.ch/pipermail/r-help/2005-November/082853.html。您可以计算具有多个不同跨度的黄土拟合的 AIC,并选择具有最小 AIC 的跨度。
  • @bdemarest 感谢您的链接!但是,我试图找出一种“数学”选择跨度而不是通过 AIC/交叉验证/等的方法。对于我的场景来说,多次运行每个拟合的计算成本太高。
  • 请告诉我您最终使用的解决方案。我自己的努力使我相信黄土优化问题的封闭式解决方案是不可能的,但我很想学习一种更好/更快的选择跨度的方法。

标签: r loess


【解决方案1】:

比较 fit$fittedy。你会注意到你的回归有问题。选择足够的带宽,否则它只会插入数据。如果数据点太少,线性函数在小带宽上表现得像常数并触发共线性。因此,您会看到警告伪逆、奇点的错误。如果您使用degree=0ksmooth,您将不会看到此类错误。 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()

【讨论】:

  • 我正在查看 fit$fitted vs y,但我没有看到您所指的问题(除非您的意思是我在 [80,160] 中没有任何 y 值)。我认为 0.3 的跨度意味着最大距离 =(19-1)*.3=5.4。因此,例如,在 x=16 处估计 y 时,函数不会使用 x=14、15 和 18 处的观测值吗?该模型如何具有共线性(因为 (1,1,1) 独立于 (14,15,18))?
  • 哦,交叉验证是个好主意!但是,对于我的目的来说,它的计算成本太高了,因为我必须让这个模型适应许多时间序列。
  • 抱歉,我应该将此作为评论发布,因为关于如何调整 span 参数不是很有建设性。我认为我关于共线性的评论并没有完全错位,因为对于只有一个观察值的某个区间,它必然会产生共线性。 y 中的 5 个连续 NA 表明至少有 2 个这样的点。
  • 我同意当您只有一个观察值(或只有 1 个唯一的 x 值)时,共线性会成为一个问题。但是,我对 x=16 时黄土模型中发生的情况感到困惑。有足够接近的三个点可以在拟合中使用,但这似乎会导致数值问题。知道当时发生了什么吗?
猜你喜欢
  • 2012-09-23
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
相关资源
最近更新 更多