【发布时间】:2011-01-10 10:20:02
【问题描述】:
我需要对一些模拟数据进行平滑处理,但是当要平滑处理的模拟纵坐标几乎是相同的值时,偶尔会遇到问题。这是最简单情况的一个可重复的小示例。
> x <- 0:50
> y <- rep(0,51)
> loess.smooth(x,y)
Error in simpleLoess(y, x, w, span, degree, FALSE, FALSE, normalize = FALSE, :
NA/NaN/Inf in foreign function call (arg 1)
loess(y~x)、lowess(x,y) 以及它们在 MATLAB 中的类似物在此示例中产生了预期的结果而没有错误。我在这里使用loess.smooth,因为我需要在一定数量的点上评估估计值。根据文档,我相信loess.smooth 和loess 使用相同的估计函数,但前者是处理评估点的“辅助函数”。错误似乎来自 C 函数:
> traceback()
3: .C(R_loess_raw, as.double(pseudovalues), as.double(x), as.double(weights),
as.double(weights), as.integer(D), as.integer(N), as.double(span),
as.integer(degree), as.integer(nonparametric), as.integer(order.drop.sqr),
as.integer(sum.drop.sqr), as.double(span * cell), as.character(surf.stat),
temp = double(N), parameter = integer(7), a = integer(max.kd),
xi = double(max.kd), vert = double(2 * D), vval = double((D +
1) * max.kd), diagonal = double(N), trL = double(1),
delta1 = double(1), delta2 = double(1), as.integer(0L))
2: simpleLoess(y, x, w, span, degree, FALSE, FALSE, normalize = FALSE,
"none", "interpolate", control$cell, iterations, control$trace.hat)
1: loess.smooth(x, y)
loess 也调用simpleLoess,但参数似乎不同。当然,如果你改变足够多的 y 值使其不为零,loess.smooth 运行不会出错,但我需要程序在最极端的情况下运行。
希望有人可以帮助我完成以下一项和/或全部工作:
- 了解为什么只有
loess.smooth而不是其他函数会产生此错误并找到解决此问题的方法。 - 使用
loess找到解决方法,但仍会在可能与向量x 不同的指定点数处评估估计值。例如,我可能只想在平滑中使用x <- seq(0,50,10),但在x <- 0:50处评估估计值。据我所知,将predict与新数据框一起使用将无法正确处理这种情况,但如果我在那里遗漏了什么,请告诉我。 - 以不阻止程序移动到下一个模拟数据集的方式处理错误。
在此先感谢您对此问题的任何帮助。
【问题讨论】: