我从掌握如何使用样条线插入一维函数开始。
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 对象接收单个点的值?而且,可以肯定的是,您是否同意/不同意 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")
对于预测(bdg, newdata=data.frame(0,0,0,0), type="response")
它返回很多数字任何警告newdata没有足够的数据
为了
predict(bdg, c(0,0,0,0), type="response")
它什么也不返回,也同样发出警告。