Определение класса переменных в регрессионной модели без доступа к исходному фрейму данных


У меня есть файл rda, в котором есть модель логистической регрессии. Если я только хочу знать, какие типы данных для независимых переменных используются в glm, Как я могу их проверить? Например, если мой Y~ X1+X2+X3 как я узнаю, какие типы данныхX1, X2 а X3 есть? На данный момент у меня нет фрейма данных для исследования типов данных. Любая помощь будет высоко оценена.

1 2

1 ответ:

Я хотел бы сначала предложить кое-что более полезное. Как насчет проверки $terms? (Используя fit ниже в качестве примера)

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

Поскольку в вашем вопросе упоминается только идентификация классов данных, этого достаточно. Но если вы хотите получить доступ к данным для переменных, проверьте $data. вот чем glm отличается от lm. glm возвращает гораздо больше материала, чем lm, включая аргумент data. Обратите внимание, lm не возвращает 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)

Ошибка в ИС.данные.фрейм (данные): объект 'dat' не найден

Это то, что я объяснил в комментарии под вопросом OP: если $model не являетсяNULL, model.frame просто извлекает его. Но если это действительно такNULL, model.frame стремится его реконструировать. Но чтобы восстановить его, вам нужен доступ к исходному фрейму данных. Если исходный фрейм данных недоступен, вы не получите ничего (кроме ошибка).

Чтобы понять это, имейте в виду, что model.frame является (S3) общей функцией:

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

model.frame.lm и model.frame.glm простое извлечение $model из объекта модели (если $model присутствует); в противном случае он вызывает model.frame.default для построения фрейма модели из Формулы модели и исходного фрейма данных.