> # 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)
按照上面的代码,我可以得到这样的情节:在此处输入图像描述
现在,我想使用 GAM 中的 ns() 函数获得类似的绘图:
> b1 <- gam(y ~ ns(x1), data=dat)
> plot(b1)
但是当我在R中运行代码时,它显示">没有要绘制的项",所以我想知道如何绘制这张图片?谢谢!
因为ns()
不是s()
、te()
、t2()
或ti()
表示的(惩罚)样条,所以它不是类"mgcv.smooth"
的成员。打印拟合的 GAM 对象时,代码会查看是否有任何要绘制的 mgcv 平滑。模型中的所有其他项都是参数项,包括自然样条。如果执行summary(b1)
将在输出的"参数化效果"部分看到ns()
项。
基本上,gam()
只是看着你的模型,就好像它是一堆线性参数项一样。它不知道模型矩阵中的这些项映射到基函数,因此映射到自然样条。
可视化并不容易;plot(b1, all.terms = TRUE)
绘制每个基函数的线性效应,所以至少你看到了一些东西,但通常这不是你想要的。您必须从模型中预测协变量x1
的范围,然后根据x1
值网格绘制预测值。
这就引出了一个问题:你期望gam()
如何处理ns()
基础?