シミュレートされたデータを平滑化する必要がありますが、平滑化されるシミュレートされた縦座標がほぼ同じ値である場合に問題が発生することがあります。これは、最も単純なケースの再現可能な小さな例です。
> 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
他の関数ではなく のみがこのエラーを生成する理由を理解し、この問題の解決策を見つけてください。loess
ベクトル x とは異なる可能性がある指定された数のポイントで推定値を使用して評価する回避策を見つけます。たとえばx <- seq(0,50,10)
、平滑化でのみ使用したい場合がありますが、推定値は で評価しx <- 0:50
ます。私の知る限りpredict
、新しいデータ フレームを使用すると、この状況を適切に処理できませんが、何か不足している場合はお知らせください。- プログラムが次のシミュレートされたデータ セットに移動するのを止めない方法でエラーを処理します。
この問題についてご協力いただきありがとうございます。