我开始掌握如何使用样条线来插入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")
它什么都不返回,也警告同样的事情。
答案 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/