0

我运行一个带有变量选择的游戏。但我想评估所有变量组合的输出,而不仅仅是为了比较的最佳模型。我在 R 中使用 mgcv 包,是否有一些用于模型评估的命令(在我开始编写许多循环之前......)。

例子:

    set.seed(3);n<-200
    dat <- gamSim(1,n=n,scale=.15,dist="poisson")
    dat$x4 <- runif(n, 0, 1);dat$x5 <- runif(n, 0, 1) ## spurious
    b<-gam(y~s(x0)+s(x1)+s(x2)+s(x3)+s(x4)+s(x5),data=dat,
    family=poisson,select=TRUE,method="REML")

如果我使用 summary(b),我只能看到最佳模型的结果。

4

2 回答 2

1

你误解了select = TRUE正在做的事情;这里真的只有一个模型。

在由mgcv拟合的标准 GAM中,模型中每个平滑的摆动在拟合期间通过估计参数来确定,以最小化惩罚似然标准。每个平滑的惩罚(ies)可以惩罚摆动(通常是平滑器的曲率,通过平方二阶导数的惩罚),但它们不能惩罚样条基础中完全平滑的任何函数(即直线或协变量的线性函数)。这是因为完美光滑的组件没有曲率,斜率不会改变。这样的函数被称为在惩罚零空间中。

Marra 和 Wood (2011) 展示了两种向每个平滑添加额外惩罚的方法,这样惩罚适用于摆动函数和零空间中的函数。select = TRUE是这两个选项之一。

那么你所拥有的是一个模型,其中惩罚将平滑拉向线性函数并将线性函数拉向 0(平坦函数)。换句话说,我们说平滑向 0 收缩。

因此select = TRUE,模型选择过程更像是被称为 LASSO 的模型选择方法。

虽然我说有一个模型,但实际上有无数个模型,因为您会为“平滑度”参数的所有值组合获得不同的模型,这些参数控制惩罚(摆动或零空间)对惩罚的影响程度可能性。但这与说有无限数量的普通最小二乘(线性回归)模型是一样的,因为该模型的参数可以取任何实数值。这些参数,就像 GAM 中的平滑惩罚一样,在拟合期间更新以得到模型。碰巧的是,使用隐含的特定形式的零空间惩罚select = TRUE最终会为您进行模型选择。

请注意,您为不知道变量是否应该在模型中而付出代价;参考自由度(输出中的Ref.df列)是您在平滑中设置的summary(model)任何值。k即,您支付不知道平滑是否使用k基函数或〜0(当一个术语从模型中缩小时)或介于两者之间的全部成本;你总是支付k基函数的成本。

于 2018-10-19T03:48:37.373 回答
0

因此,如果我正确地关注您,您希望查看模型的模型输出,2^N - 1其中N变量的数量是,因为每个变量要么在模型中,要么不在模型中。听起来您需要制作一个包含每个可能的模型规范的向量,然后使用它map来运行每个模型规范并将所需的结果存储在列表中。

于 2018-10-09T15:35:18.050 回答