【发布时间】:2021-07-31 10:46:15
【问题描述】:
我从掌握如何使用样条线插入一维函数开始。
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")
它什么也不返回,也同样发出警告。
【问题讨论】:
-
最好发reproducible example 这样我们就可以看到和你一样的东西。请发布示例
bdp数据集(有关提示,请参阅链接)。这是矩阵吗?数据框架?它有名字吗?还要确保包含所有必要的library()语句以使代码运行。 -
MrFlick:我添加了一个我使用的确切代码和一个带有数据集的 .rar。
-
当我运行您的代码时,我在
bam()步骤中得到“特征错误(hess,对称 = TRUE):0 x 0 矩阵”。您应该真正专注于创建一个“最小”的可重现示例。您不应该期望其他人从垃圾网站下载大型数据集来帮助您。是“gam”还是“bam”的问题? -
很抱歉,我拼错了。这是关于游戏的。
-
我添加了一个最小的例子。我仍然不知道它是如何工作的。与以前在其他包中工作的预测不一致。
标签: r interpolation gam