R 从 model.frame 恢复原始 data.frame

Ste*_*mer 4 regression r linear-regression lm mgcv

在 R 中,您可以mgcv使用包含诸如log或 之类的变换的公式来拟合包中的 GAM 模型sqrt,并且默认情况下model.frame会返回 (仅返回公式中指定的已应用变换的变量)。

有什么办法可以恢复未变形的吗data.frame

例子:

reg <- mgcv::gam(log(mpg) ~ disp + I(hp^2), data=mtcars)

回报

> head(reg$model,3) log(mpg) disp I(hp^2) Mazda RX4 3.044522 160 12100 Mazda RX4 Wag 3.044522 160 12100 Datsun 710 3.126761 108 8649

但是,我想从模型中获取这个未转换的数据集model.frame

mpg disp hp Mazda RX4 21.0 160 110 Mazda RX4 Wag 21.0 160 110 Datsun 710 22.8 108 93

一些背景newdata大多数模型predict()函数的参数需要未转换的数据,因此我无法将其model.frame反馈到predict()函数中。我已经知道省略参数newdata将返回拟合值。我的要求是模型对象给我返回原始数据。

李哲源*_*李哲源 5

这是一种方法:使用glm代替lm,即使对于高斯数据也是如此。glm返回的内容比 多得多lm,包括原始数据帧。


好吧,如果你问mgcv问题,你最好举个mgcv例子。

mgcv具有一致的标准glm。请阅读可返回?gamObject内容的完整列表gamdata如果您keepData通过control的参数进行设置,您将看到它可以返回gam。当您调用时gam,添加以下内容

control = gam.control(keepData = TRUE)
Run Code Online (Sandbox Code Playgroud)

这是一个简单的、可重现的示例:

dat <- data.frame(x = runif(50), y = rnorm(50))
library(mgcv)
fit <- gam(y ~ s(x, bs = 'cr', k = 5), data = dat, control = gam.control(keepData = TRUE))
head(fit$model)  # model frame
head(fit$data)  # original data
Run Code Online (Sandbox Code Playgroud)