【问题标题】:How to interpolate and `predict` using mgcv::gam?如何使用 mgcv::gam 进行插值和“预测”?
【发布时间】: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


【解决方案1】:

因此,对于您适合的几乎所有类型的模型,如果您打算使用 predict 函数,最好使用带有列名的“正确”公式,而不是使用 matrix/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 

假设

names(bdp)
# [1] "V1" "V2" "V3" "V4"

所以这里我们适合 "V1","V2","V3" 和 newdata 有列 "V1","V2" 和 "V3"

所以我只关注 R 编码部分。至于这是否是一个适当的分析更适合https://stats.stackexchange.com/

的问题

【讨论】:

  • 谢谢。所以这是 R 的弱点,而不是称之为错误。无论如何,它按你的方式工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 2020-03-21
  • 1970-01-01
相关资源
最近更新 更多