首页 文章

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

提问于
浏览
0

我已经开始掌握如何使用样条函数来插入1维函数 .

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 /中解包)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),输入=“响应”)

它返回了很多数字,任何警告说newdata没有足够的数据

对于

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

它什么都不返回,也警告同样的事情 .

1 回答

  • 3

    因此,对于几乎所有类型的模型,如果计划使用 predict 函数,最好使用带有列名的"proper"公式,而不是使用矩阵/ data.frame切片 . 原因是当预测运行时,它使用两者中的名称将 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/

相关问题