R 如何使用mgcv::gam进行插值和“预测”?

R 如何使用mgcv::gam进行插值和“预测”?,r,interpolation,gam,R,Interpolation,Gam,我已经开始掌握如何使用样条插值一维函数 model = spline(bdp[,4]~bdp[,1]) 然后我可以使用 predict(model, c(0)) 预测点0处的函数值 然后我在互联网上搜索了一些三维数据样条,我在stackoverflow上找到了一个答案,表明mgcv::gam是最好的选择 所以我试着: model=gam(bdp[,4]~s(bdp[,1],bdp[,2],bdp[,3])) 然后我做了: predict(model, newdata=c(0,0,0), t

我已经开始掌握如何使用样条插值一维函数

model = spline(bdp[,4]~bdp[,1])
然后我可以使用

predict(model, c(0))
预测点0处的函数值

然后我在互联网上搜索了一些三维数据样条,我在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/解包)

最小可复制示例:

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
函数,最好使用带有列名的“适当”公式,而不是使用矩阵/data.frame切片。原因是,当predict运行时,它使用这两个名称将
newdata
中的值与模型匹配,因此它们应该匹配相同。这样索引data.frame时,会在模型中创建奇怪的名称。最好的方法是对模型进行拟合和预测

bdg <- gam(V4~s(V1,V2,V3), data=bdp)
predict(bdg, newdata=data.frame(V1=0, V2=0, V3=0))
#           1 
# 85431440244 
因此,我们在这里使用“V1”、“V2”、“V3”和
newdata
中的“V1”、“V2”和“V3”列


所以我只关注R编码部分。至于这个问题,如果这是一个合适的分析是否更适合

的话,最好发布一篇文章,这样我们就可以看到与你相同的东西。请发布一个样本
bdp
数据集(有关提示,请参见链接)。这是矩阵吗?数据帧?它有名字吗?还要确保包含所有必要的
library()
语句以运行代码。MrFlick:我已经添加了一个我使用的确切代码和一个.rar数据集。当我运行代码时,我在
bam()
步骤中得到“Error in eigen(hess,symmetric=TRUE):0 x 0矩阵”。您应该真正专注于创建一个“最小”的可复制示例。你不应该指望别人从垃圾网站下载大数据集来帮助你。“gam”或“bam”有问题吗?对不起,我拼错了。这是关于gam的。我添加了一个最小的示例。我仍然不知道它是如何工作的。与haw predcit在其他软件包中的工作方式不一致。谢谢。所以这是R的一个弱点,不是说它是一个bug。不管怎样,这是你的方式。
predict(bdg, c(0,0,0,0), type="response")
bdg <- gam(V4~s(V1,V2,V3), data=bdp)
predict(bdg, newdata=data.frame(V1=0, V2=0, V3=0))
#           1 
# 85431440244 
names(bdp)
# [1] "V1" "V2" "V3" "V4"