2017-11-14 12 views
0

Windowsの10 x64のRバージョン3.3.3で 'pracma'パッケージ(v 2.0.7)のinterp1を使用しています。Rでのinterp1の使用

xixの範囲外になるとNAが返されます。これは基本的な質問ですが、私はオンラインで見てみましたが、探しているものを正確に見つけることができません。

interp1この機能('extrap')を使用するのに使用しますか? Doc for version 0.7。代わりに、エラーの

#library(pracma) 
x = c(2,4,5,6,8,9) 
y = c(0.3,0.5,0.4,0.7,0.3,0.2) 
xi = c(1,2,4,6,8) 
yi = interp1(x,y,xi,method = "linear") 

# my error message: 
Error in interp1(x, y, xi, method = "linear") : 
    Points 'xi' outside of range of argument 'x'. 

それだけxixの範囲外にある端にNAを言うように、どのように私はyiを取得することができますか?

たとえば、MatLabでこの同じコードを実行すると、それはinterp1関数となります。私は外挿を得る。

yi = interp1(x,y,xi,'linear','extrap') 
yi = 0.2 0.3 0.5 0.7 0.3 

そして、私は'extrap'句を削除すると、私はNaNを取得:

yi = NaN 0.3 0.5 0.7 0.3 

interp1機能を書き換えることなく、Rの等価を達成するための方法はありますか? ?interp1として

答えて

0

(強調鉱山)のことを教えてくれます:

XI:数値ベクトル。補間を計算する点。 すべてのポイントは 'min(x)'と 'max(x)'の間にある必要があります

xiがその範囲外にある場合は、自分でコードを作成する必要があります。ここ

私はrange(x)の外側xi値についてNA年代を与える短い新しい機能interp2を定義する例です。

# Your sample data 
x <- c(2,4,5,6,8,9); 
y <- c(0.3,0.5,0.4,0.7,0.3,0.2); 
xi <- c(1,2,4,6,8); 

# New function interp2 
interp2 <- function(x, y, xi = x, ...) { 
    yi <- rep(NA, length(xi)); 
    sel <- which(xi >= range(x)[1] & xi <= range(x)[2]); 
    yi[sel] <- interp1(x = x, y = y, xi = xi[sel], ...); 
    return(yi); 
} 

yi <- interp2(x, y, xi, method = "linear"); 
#[1] NA 0.3 0.5 0.7 0.3 

あなたがサンプルデータを見てみる場合は、より一般的なコメントは、任意の補間結果は、塩の穀物で撮影することがおそらくあります。より一般的に、より堅牢なアプローチは、あなたがして(不確実性を含む)任意の新しい値xあなたのサンプルデータの場合

ynew <- predict(lm(y ~ x), data.frame(x = xi)); 
# 1  2  3  4  5 
#0.484 0.466 0.430 0.394 0.358 

の予測を取得するために使用できる線形モデルを、合わせてだろう、線形フィットです明らかにそれほど良くない。

また、ローカル多項式回帰近似(LOESS)に基づいて予測を得ることもできます。これにより、同様の結果がpracma::interp1になります(データポイントが少なすぎるという警告は無視されます)。

ynew <- predict(loess(y ~ x), data.frame(x = xi)); 
# 1 2 3 4 5 
# NA 0.3 0.5 0.7 0.3 
+0

ありがとうございました!これは非常に役に立ちます。LOESSは、interp2を変更する代わりに、最善の方法かもしれません。再度、感謝します! – Syd26S

+0

@ SydS112688の心配はありません。喜んで助けてください。 –

関連する問題