[R-es] glm com etiquetas en las variables: solucionado

Griera griera en yandex.com
Mar Jul 21 13:19:54 CEST 2015


Hola:

Dos soluciones:

On Tue, 21 Jul 2015 11:26:32 +0200
Carlos Ortega <cof en qualityexcellence.es> wrote:
> Esta es una alternativa sólo válida para el modelo de ejemplo, pero te da
> una idea de cómo se podría hacer...
> 
> Se puede generalizar para que tengas un vector con las relaciones nombres
> de las variables y su descripción y al hacer la asignación (mySummary$call)
> las cambie programáticamente.
> 
> #-----------------------
> 
> mySummary <- summary (REG_LOG)
> mySummary$call <- c("glm(formula = low = 'Bajo peso...' ~ smoke = 'Consumo
> tabaco..', family = 'binomial', data = birthwt)")
> mySummary
> #-----------------------
>    - El resultado de summary(), lo guardo en una variable.
>    - El resultado de summary() es un objeto que tiene diferentes elementos.
>    Lo que devuelve cada función, aparece en la ayuda de R bajo el epígrafe
>    "Value". Mira lo que devuelve "summary.glm"..
>    - Uno de los elementos que devuelve "summary.glm" es "call" que es la
>    llamada, la fórmula del modelo.
>    - Lo que hago es coger esa parte "mySummary$call" y modificarlo con el
>    literal que yo quiero.
>    - Una vez modificado, al ejecutar "mySummary" aparece la modificación,
>    junto con el resto de valores que no he tocado.

On Tue, 21 Jul 2015 11:31:44 +0200
Jose Luis Cañadas Reche <canadasreche en gmail.com> wrote:
> Otra idea es utilizar el paquete memisc
> 
> library(MASS)
> data(birthwt, package="MASS")
> birthwt$low  <- factor(birthwt$low)
> birthwt$race <- factor(birthwt$smoke)
> REG_LOG <- glm (low ~ smoke, family = "binomial", data = birthwt)
> summary (REG_LOG)
> 
> library(memisc)
> 
> mtable1 <- mtable(REG_LOG)
> 
> mtable1 <- relabel(mtable1,
>                        "(Intercept)" = "Constante",
>                        smoke = "Consumo tabaco embarazo"
> )
> mtable1
> 
> Calls:
> REG_LOG: glm(formula = low ~ smoke, family = "binomial", data = birthwt)
> 
> ==================================
> Constante                -1.087***
>                           (0.215)
> Consumo tabaco embarazo   0.704*
>                           (0.320)
> ----------------------------------
> Aldrich-Nelson R-sq.        0.025
> McFadden R-sq.              0.021
> Cox-Snell R-sq.             0.025
> Nagelkerke R-sq.            0.036
> phi                         1.000
> Likelihood-ratio            4.867
> p                           0.027
> Log-likelihood           -114.902
> Deviance                  229.805
> AIC                       233.805
> BIC                       240.288
> N                         189
> ==================================
> 
> # o un fichero separado por comas
> write.mtable(mtable1, file = "resumen.csv", colsep=",")


Las dos funcionan sin problema. La Jose Luis Cañadas es mucho más
sencilla, pero utiliza el enesimo paquete memisc y, si puedo, los evito: ¿que pasará si el que lo mantiene se jubila antes que yo?

Implemento por tanto la primera. Como el código va dentro de una función que solo realiza reg logísticas, no me importa que tenga que escribir un poca más de código una vez.

Quedaría así:
> library(MASS)
> data(birthwt, package="MASS")
> birthwt$low  <- factor(birthwt$low)
> birthwt$race <- factor(birthwt$smoke)
> REG_LOG <- glm (low ~ smoke, family = "binomial", data = birthwt)
> mySummary <- summary (REG_LOG)
> mySummary$call <- c("glm(formula = low = 'Bajo peso...' ~ smoke = 'Consumo tabaco..', family = 'binomial', data = birthwt)")
> mySummary

Call:
"glm(formula = low = 'Bajo peso...' ~ smoke = 'Consumo tabaco..', family = 'binomial', data = birthwt)"

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1,0197  -0,7623  -0,7623   1,3438   1,6599  

Coefficients:
            Estimate Std. Error z value    Pr(>|z|)    
(Intercept)  -1,0871     0,2147  -5,062 0,000000414 ***
smoke         0,7041     0,3196   2,203      0,0276 *  
---
[borrado]


Gracias y saludos.




> > El 21 de julio de 2015, 10:57, Griera <griera en yandex.com> escribió:
> >
> >> Hola:
> >>
> >> Si aún hay alguien que no está de vacaciones, igual me pueden ayudar.
> >>
> >> Quiero ajustar unos modelos:
> >>
> >>      REG_LOG <- glm (low ~ X, family = "binomial", data = DATOS)
> >>
> >> Ejemplo:
> >>    library(MASS)
> >>    data(birthwt, package="MASS")
> >>    birthwt$low  <- factor(birthwt$low)
> >>    birthwt$race <- factor(birthwt$smoke)
> >>    REG_LOG <- glm (low ~ smoke, family = "binomial", data = birthwt)
> >>    summary (REG_LOG)
> >>
> >> Se pueden colocar etiquetas en las variable de la fórmula de manera que en
> >> los resultados salgan las etiquetas y no el nombre de la variable? Seria
> >> una cosa como:
> >>
> >> REG_LOG <- glm (low = "Bajo peso recién nacido" ~ smoke = "Consumo tabaco
> >> embarazo", family = "binomial", data = birthwt)
> >>
> >> que, evidentemente no funciona.
> >>
> >> Muchas gracias y saludos
> >>
> >> _______________________________________________
> >> R-help-es mailing list
> >> R-help-es en r-project.org
> >> https://stat.ethz.ch/mailman/listinfo/r-help-es
> >>
> >
> >
> 
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es



Más información sobre la lista de distribución R-help-es