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

时间:2014-07-01 15:52:14

标签: r interpolation gam

我开始掌握如何使用样条线来插入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),type =“response”)

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

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

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

1 个答案:

答案 0 :(得分:3)

因此,几乎所有类型的模型都适合您,如果您打算使用predict功能,最好使用"适当的"使用列名而不是使用matrix / 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"

所以这里我们适合&#34; V1&#34;,&#34; V2&#34;,&#34; V3&#34;并且newdata有列&#34; V1&#34;,&#34; V2&#34;和&#34; V3&#34;

所以我只专注于R编码部分。至于是否适合分析的问题更适合https://stats.stackexchange.com/