> # simulate some data...
> dat <- gamSim(1,n=400,dist="normal",scale=2)
> # fit model&plot
> library(mgcv)
> library(splines)
> b0 <- gam(y~s(x1),data=dat)
> plot(b0)
按照上面的代码,我可以得到这样的情节:enter image description here
现在,我想在GAM中使用ns()函数获得类似的图:
> b1 <- gam(y ~ ns(x1), data=dat)
> plot(b1)
但是当我在R中运行代码时,它显示&#34; 没有用于绘制的术语&#34;,所以我想知道如何绘制这张图片?谢谢!
答案 0 :(得分:1)
由于ns()
不是由s()
,te()
,t2()
或ti()
指示的(惩罚)样条曲线,因此它不是类{{}}的成员{1}}。当您绘制拟合的GAM对象时,代码会查看是否有任何mgcv平滑图。模型中的所有其他项都是参数项,包括您的自然样条。如果您执行"mgcv.smooth"
,则会在输出的参数效果部分中看到summary(b1)
项。
基本上,ns()
只是看着你的模型,好像它是一堆线性参数项。它不知道模型矩阵中的那些项映射到基函数,因此也映射到自然样条。
可视化并不容易; gam()
将绘制每个基函数的线性效果,所以至少你会看到一些东西,但通常这不是你想要的。您必须在协变量plot(b1, all.terms = TRUE)
的范围内从模型进行预测,然后将预测值与x1
值的网格进行对比。
这引出了一个问题;您期望x1
基于gam()
做什么?