Ошибка при использовании `loess. smooth, но не loess или lowess

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

> 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 будет работать без ошибок, но мне нужно, чтобы программа работала даже в самом крайнем случае.

Надеюсь, кто-нибудь сможет помочь мне с одним и / или всеми из следующих:

  1. Понять, почему только loess.smooth , а не другие функции, вызывают эту ошибку, и найти решение для этого
  2. Найдите обходной путь, используя лёсс , но при этом оцените оценку в указанном количестве точек, которые могут отличаться от вектора x. Например, я мог бы использовать только x <- seq (0,50, 10) при сглаживании, но оцените оценку как x <- 0:50 . Насколько мне известно, использование предсказать с новым фреймом данных не поможет должным образом обработать эту ситуацию, но, пожалуйста, дайте мне знать, если я что-то упускаю.
  3. Обработайте ошибку таким образом, чтобы программа не остановила переход к следующему набору смоделированных данных.

Заранее благодарим за любую помощь по этой проблеме.

7
задан Sandy 10 January 2011 в 10:20
поделиться