在不访问原始数据框的情况下找出回归模型中的变量 class

Figuring out variables' class in a regression model without accessing the original data frame

我有一个 rda 文件,其中包含逻辑回归模型。如果我只想知道 glm 中使用的自变量的数据类型是什么,请将其他事情放在一边,我该如何检查它们?例如,如果我的 Y~ X1+X2+X3 我怎么知道 X1X2X3 是什么数据类型?此时我没有数据框来调查数据类型。任何帮助将不胜感激。

我想先提供一些更有用的东西。检查 $terms 怎么样? (以下以fit为例)

## or `attr(terms(fit), "dataClasses")`
attr(fit$terms, "dataClasses")
#         mpg         qsec   factor(am)           wt factor(gear) 
#   "numeric"    "numeric"     "factor"    "numeric"     "factor" 

既然你的问题只提到识别数据类,这就足够了。但是,如果您想访问变量的数据,请选中 $data这就是 glmlm 的不同之处。 glm return 比 lm 多了很多东西,包括 data 参数。注意,lm 不是 return data.


更多关于model.frame

几乎总是,model.frame 是最好的程序。但请谨慎使用。

dat <- mtcars
fit <- glm(mpg ~ qsec + factor(am) + wt + factor(gear),
           data = dat,  model = FALSE)
rm(dat)
model.frame(fit)

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

这是我在 OP 问题下的评论中解释的:如果 $model 不是 NULLmodel.frame 只是将其提取。但如果真的是NULLmodel.frame旨在重建它。但是要重建它,您需要访问原始数据框。如果原始数据框不可用,您什么也得不到(但会出错)。

要理解这一点,请注意 model.frame 是一个 (S3) 通用函数:

.S3methods("model.frame")
#[1] model.frame.aovlist* model.frame.default  model.frame.glm*    
#[4] model.frame.lm*

model.frame.lmmodel.frame.glm 从模型对象中简单提取 $model(如果存在 $model);否则它调用 model.frame.default 从模型公式和原始数据框架构建模型框架。