Мне нужно сгладить некоторые смоделированные данные, но иногда возникают проблемы, когда смоделированные ординаты, которые нужно сглаживать, в основном имеют одно и то же значение. Вот небольшой воспроизводимый пример простейшего случая.
> 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
, а не другие функции, вызывают эту ошибку, и найти решение для этого лёсс
, но при этом оцените оценку в указанном количестве точек, которые могут отличаться от вектора x. Например, я мог бы использовать только x <- seq (0,50, 10)
при сглаживании, но оцените оценку как x <- 0:50
. Насколько мне известно, использование предсказать
с новым фреймом данных не поможет должным образом обработать эту ситуацию, но, пожалуйста, дайте мне знать, если я что-то упускаю. Заранее благодарим за любую помощь по этой проблеме.