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

时间:2017-03-18 18:40:31

标签: r regression linear-regression lm mgcv

在R中,您可以使用包含mgcvlog等转换的公式从sqrt包中调整GAM模型,默认情况下会返回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参数将返回适合的值。我的要求是模型对象给我回原始数据。

3 个答案:

答案 0 :(得分:4)

以下是一种方法:使用glm代替lm,即使对于高斯数据也是如此。 glm返回的内容远远超过lm,包括原始数据框。

好吧,如果您提出mgcv个问题,最好提供一个mgcv示例。

mgcvglm具有一致的标准。请阅读?gamObject,了解gam可以返回的完整列表。如果您通过data keepData参数设置control,则会看到它可以返回gam。致电gam时,请添加以下内容

control = gam.control(keepData = TRUE)

这是一个简单,可重复的例子:

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

答案 1 :(得分:3)

我们可以从'条款'中提取vars并将其用于原始数据集的子集

head(mtcars[all.vars(reg$terms)], 3)
#               mpg disp  hp
#Mazda RX4     21.0  160 110
#Mazda RX4 Wag 21.0  160 110
#Datsun 710    22.8  108  93

call

v1 <- all.vars(reg$call)
head(get(tail(v1, 1))[head(v1, -1)], 3)
#               mpg disp  hp
#Mazda RX4     21.0  160 110
#Mazda RX4 Wag 21.0  160 110
#Datsun 710    22.8  108  93

答案 2 :(得分:1)

编辑:根据@李哲源哲哲的评论

以下方法取决于当前工作空间或搜索路径中存在的原始数据。如果我们在更新模型之前删除原始数据,则会产生错误。

  

Error in is.data.frame(data) : object 'dat' not found

dat <- mtcars
reg <- lm(log(mpg) ~ disp + I(hp^2), data=dat)
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

# rm( dat )  ## uncomment this line and see error appears after update
reg <- update(reg, mpg ~ disp + hp, method = 'model.frame' )
head(reg)
#                    mpg disp  hp
# Mazda RX4         21.0  160 110
# Mazda RX4 Wag     21.0  160 110
# Datsun 710        22.8  108  93
# Hornet 4 Drive    21.4  258 110
# Hornet Sportabout 18.7  360 175
# Valiant           18.1  225 105