0
> # 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 中运行代码时,它显示“没有要绘制的术语”,所以我想知道如何绘制这张图片?谢谢!

4

1 回答 1

1

因为ns()不是由 、 或 指示的(惩罚)样条曲线s(),所以te()它不是 class 的成员。当您绘制拟合的 GAM 对象时,代码会查看是否有任何 mgcv 平滑要绘制。模型中的所有其他项都是参数项,包括您的自然样条。如果这样做,您将在输出的“参数化效果”部分中看到该术语。t2()ti()"mgcv.smooth"summary(b1)ns()

基本上,gam()只是将您的模型视为一堆线性参数项。它不知道模型矩阵中的这些项映射到基函数,因此映射到自然样条。

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

这就引出了一个问题;你期望gam()ns()基础做什么?

于 2018-04-20T17:32:12.213 回答