J'ai un fichier rda
qui contient un modèle de régression logistique. Garder d'autres choses de côté si je veux seulement savoir quels sont les types de données pour les variables indépendantes utilisées dans le glm
comment puis-je les vérifier? Par exemple si mon Y~ X1+X2+X3
comment puis-je savoir quels types de données le X1
, X2
et X3
sont? À ce stade, je n'ai pas le cadre de données pour étudier les types de données. Toute aide sera grandement appréciée.Déterminer la classe de variables dans un modèle de régression sans accéder à la trame de données d'origine
Répondre
Je voudrais d'abord offrir quelque chose de plus utile. Que diriez-vous de vérifier $terms
? (L'utilisation fit
ci-dessous à titre d'exemple)
## or `attr(terms(fit), "dataClasses")`
attr(fit$terms, "dataClasses")
# mpg qsec factor(am) wt factor(gear)
# "numeric" "numeric" "factor" "numeric" "factor"
Étant donné que votre question ne mentionne que l'identification des classes de données, cela suffit. Mais si vous voulez accéder aux données pour les variables, vérifiez $data
. Voici comment glm
diffère de lm
. glm
renvoie beaucoup plus de choses que lm
, y compris l'argument data
. Remarque: lm
ne renvoie pas data
.
Un peu plus sur model.frame
Presque toujours, model.frame
est la meilleure procédure. Mais utilisez-le avec un peu de soin.
dat <- mtcars
fit <- glm(mpg ~ qsec + factor(am) + wt + factor(gear),
data = dat, model = FALSE)
rm(dat)
model.frame(fit)
Erreur dans is.data.frame (données): objet 'dat' not found
C'est ce que je l'ai expliqué dans un commentaire sous la question OP: Si $model
n'est pas NULL
, model.frame
l'extrait simplement. Mais si c'est vraiment NULL
, model.frame
vise à le reconstruire. Mais pour le reconstruire, vous devez accéder au cadre de données original. Si le bloc de données original n'est pas disponible, vous n'obtenez rien (mais une erreur).
Pour comprendre cela, il faut savoir que model.frame
est un (S3) fonction générique:
.S3methods("model.frame")
#[1] model.frame.aovlist* model.frame.default model.frame.glm*
#[4] model.frame.lm*
model.frame.lm
et model.frame.glm
simple extrait $model
de l'objet modèle (si $model
est présent); sinon, il appelle model.frame.default
pour construire la trame du modèle à partir de la formule du modèle et de la trame de données originale.
Bien raisonné. Il semble que je n'ai jamais rencontré le scénario spécifique, et je n'avais pas réfléchi aux conséquences. Je défendrai toujours 'model.frame' simplement parce qu'il réussira toujours dans les cas où' model = FALSE' et vous avez accès à la trame de données; '$ model' renverra' NULL'.Cela ne fera aucune différence dans le contexte de cette question, mais dans d'autres contextes, cela ne le fera pas. – Benjamin
attr (fit $ terms, "dataClasses") a résolu mon problème immédiat. J'apprécie les explications supplémentaires. Cela m'a aidé à clarifier un peu plus de choses. –
Vous ne savez pas exactement ce que vous entendez par ne pas avoir accès à la base de données, mais la façon typique de comprendre le type de données d'un objet est d'utiliser 'class()'. Par exemple 'var <-" foobar "; class (var) 'renvoie' [1] "caractère" '. Vous aurez probablement besoin de charger le fichier Rdata dans R, alors vous pourrez peut-être vérifier le contenu de l'objet glm avec 'str()', puis essayer quelque chose comme 'class (glm $ X1)' – user5359531
@ZheyuanLi , Je recommande de ne pas dépendant de '$ model', car cela retournera' NULL' si 'model = FALSE' a été utilisé dans l'appel de la fonction. 'model.frame' (voir ma réponse ci-dessous) fonctionnera quand même. – Benjamin