如何在GAM中可视化自然三次样条(ns)

时间:2018-04-16 01:42:59

标签: plot spline gam cubic-spline s

> # 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;,所以我想知道如何绘制这张图片?谢谢!

1 个答案:

答案 0 :(得分:1)

由于ns()不是由s()te()t2()ti()指示的(惩罚)样条曲线,因此它不是类{{}}的成员{1}}。当您绘制拟合的GAM对象时,代码会查看是否有任何mgcv平滑图。模型中的所有其他项都是参数项,包括您的自然样条。如果您执行"mgcv.smooth",则会在输出的参数效果部分中看到summary(b1)项。

基本上,ns()只是看着你的模型,好像它是一堆线性参数项。它不知道模型矩阵中的那些项映射到基函数,因此也映射到自然样条。

可视化并不容易; gam()将绘制每个基函数的线性效果,所以至少你会看到一些东西,但通常这不是你想要的。您必须在协变量plot(b1, all.terms = TRUE)的范围内从模型进行预测,然后将预测值与x1值的网格进行对比。

这引出了一个问题;您期望x1基于gam()做什么?