我已经开始掌握如何使用样条函数来插入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 回答
因此,对于几乎所有类型的模型,如果计划使用
predict
函数,最好使用带有列名的"proper"公式,而不是使用矩阵/ data.frame切片 . 原因是当预测运行时,它使用两者中的名称将newdata
中的值与模型匹配,因此它们应该相同匹配 . 当您像这样索引data.frame时,它会在模型中创建奇怪的名称 . 做最适合模型和预测的方法是这是假设
所以这里我们适合"V1","V2","V3"和
newdata
有列"V1","V2"和"V3"所以我只专注于R编码部分 . 至于问题,如果这是一个适当的分析更适合https://stats.stackexchange.com/