0

スプラインを使用して 1 次元関数を補間する方法を習得することから始めました。

model = spline(bdp[,4]~bdp[,1])

その後、使用できました

predict(model, c(0))

ポイント0の関数値を予測します。

次に、インターネットを検索して 3 次元データをスプライン化するものを見つけたところ、stackoverflow でmgcv::gamが最良の選択であることを示唆する回答に出会いました。

そして、私は試しました:

model=gam(bdp[,4]~s(bdp[,1],bdp[,2],bdp[,3]))

そして、私はしました:

predict(model, newdata=c(0,0,0), type="response")

ポイント(0,0,0)のスプライン補間の値を返すことを期待しています。しばらく計算すると、理解できない多次元データがたくさん返ってきました。

私は何か間違ったことをしているに違いない。gam オブジェクトから 1 つのポイントの値を受け取るにはどうすればよいですか? そして、念のため、gam が 3D データのスプラインを補間するための正しい選択であることに同意できますか、または同意できませんか?

再現可能な例を追加しています。

これはデータファイルです (c:/r/ で解凍してください) https://www.sendspace.com/file/b4mazl

# install.packages("mgcv")

library(mgcv)

bdp = read.table("c:/r/temp_bdp.csv")
bdg=gam(bdp[,4]~s(bdp[,1],bdp[,2],bdp[,3]))

#this returns lots of data, not just function value that I wanted.
predict(bdg, newdata=data.frame(0,0,0,0), type="response")

最小限の再現可能な例:

tmp = t(matrix(runif(4*200),4))
tmpgam=gam(tmp[,4]~s(tmp[,1],tmp[,2],tmp[,3]))
predict(tmpgam, newdata=data.frame(0,0,0,0), type="response")

predict(bdg, newdata=data.frame(0,0,0,0), type="response") の場合

newdata に十分なデータがないことを警告する多くの数値を返します

為に

predict(bdg, c(0,0,0,0), type="response")

何も返さず、同じことについて警告します。

4

1 に答える 1