2017-08-30 6 views
0

Dans R, j'ajuste un GLM (logit) sur des données de niveau individuel avec une variable dépendante binominal. Cependant, je voudrais tracer l'ajustement sur un niveau agrégé (c'est-à-dire avec le% de succès sur l'axe des ordonnées). Quel serait le moyen le plus simple de tracer à la fois la dispersion des données réalisées (agrégat) et la droite de régression? J'ai déjà essayé ggplot avec stat_smooth() mais si je fais la dispersion au niveau agrégé, le glm sera également ajusté à ce niveau agrégé.Tracer le glm-fit de niveau individuel au niveau agrégé dans R

library(datasets) 
data(mtcars) 
fit <- glm(vs ~ mpg + cyl + mpg:cyl + disp + drat, family=binomial(link='logit'), data=mtcars) 

mtcars_agg <- mtcars %>% 
    group_by(carb) %>% 
    summarise_each(funs(mean)) 

form <- formula("mtcars$vs ~ mtcars$mpg + mtcars$cyl + mtcars$mpg:mtcars$cyl + mtcars$disp + mtcars$drat") 

ggplot(mtcars_agg, aes(x=mpg, y=vs)) + geom_point() + 
    stat_smooth(data=mtcars, method="glm", formula = form, method.args=list(family="binomial"), se=FALSE) 

Est-ce que quelqu'un sait comment faire face à cela? Si je ne spécifie pas la formule dans l'appel stat_smooth, il y a deux choses qui ne sont pas comme je voudrais le voir:

  1. Il faut juste y ~ x comme formule. Cependant, j'aimerais aussi inclure des variables d'interaction.
  2. J'aimerais intégrer des données de niveau individuel, pas des données agrégées.

Sans préciser la formule, l'intrigue ressemble à ceci:

enter image description here

+0

Tout d'abord, pouvez-vous fournir tout exemple de la parcelle dont vous avez besoin? Deuxièmement, pourquoi dans votre 'ggplot' _carb_ est la variable indépendante tandis que dans votre' glm() '_carb_ n'est pas inclus en tant que variable? – MikolajM

+0

dans le 'ggplot' le x aurait dû être _mpg_, l'ai édité maintenant. En outre, j'ai inséré le graphique dont j'ai besoin, bien que ce graphique soit basé sur y ~ x, alors que je voudrais spécifier plus de riskdrivers que juste x. – Z117

+0

Je pense que dans 'stat_summary()' vous ne pouvez spécifier qu'un prédicteur/un seul x. De plus, si vous voulez visualiser l'équation de votre glm, où vous avez 5 prédicteurs différents, alors vous devez avoir une intrigue en 5 dimensions, ce qui est impossible. Ma solution serait d'utiliser 'predict()' pour prédire les valeurs _vs_ pour différents _mpg_, alors que les autres variables sont constantes – MikolajM

Répondre

1

Comme je l'ai écrit dans le commentaire, je pense qu'il est impossible de visualiser cette GLM comme vous rétribue un terrain 5 dimensions. Cependant, il est possible de visualiser la probabilité de vs contre différents mpg (ou autre variable) alors que d'autres variables sont constantes.

Voici mon exemple:

library(datasets) 
data(mtcars) 

fit <- glm(vs ~ mpg + cyl + mpg:cyl + disp + drat, family=binomial(link='logit'), data=mtcars) 

to.visualize <- expand.grid(mpg=c(10:35), cyl=4, disp=300, drat=4) 
to.visualize$vs <- predict.glm(fit, newdata = to.visualize, type="response") 

library(ggplot2) 
ggplot(data=to.visualize, aes(x=mpg, y=vs))+ 
    geom_point()+ 
    geom_path()+ 
    ggtitle("Probability of vs for different mpg while cyl=4, disp=300, drat=4") 

Ce qui donne intrigue qui ressemble à ceci:

Prob. of vs for different mpg