Hola Carlos:

Te adjunto un ejemplo de aplicación: las funciones (he borrado los path de las 
funciones y las ordenes "source()" que las carga ) y un ejemplo para 
ejecutarlas para las opciones que tengo implementadas con la tabla de datos 
birthwt del paquete"MASS":
- Descriptiva de todas las variables de una tabla.
- Análisis univariado de todas las variables de una tabla cruzadas con una 
variable dependiente cualitativa.

=Inicio funciones ========================================
##--------------------------------------------------------------
## DESUNI
##--------------------------------------------------------------
DESUNI = function(XDADES,
                  XDROP=NULL,
                  XVD=NULL,
                  XSPV=NULL # Si és una anàlisi de SPV # Pot tenir el valor TRUE
                  )
  {
  options(digits = 3, OutDec=",", scipen=999)
  ## No existeix VD: descriptiva
  if(is.null(XVD))   # No existeix VD: descriptiva
    {
      cat("\n*** Descriptiva (no existeix variable dependent)\n")
      DES(XDADES=XDADES, XDROP=XDROP,
          XCAMIF=XCAMIF)
    }  
  ## Existeis VD: anàlisi univariat
  else               # Existeis VD: anàlisi univariat
    {
      UNI(XDADES=XDADES, XDROP=XDROP, XVD=XVD, XSPV=XSPV,
          XCAMIF=XCAMIF)
    }
  }

##--------------------------------------------------------------
## DES: Descriptiva de todas las variables
##--------------------------------------------------------------
DES = function(XDADES,  XDROP=NULL,
               XCAMIF)
  {
    ifelse(is.null(XDROP), DADES_S <- XDADES, DADES_S <- XDADES[, 
setdiff(names(XDADES), XDROP) ]) # setdiff Selecciona les variables de XDADES 
que són diferents de XDROP
    attach(DADES_S, warn.conflicts = F)
    XVARLLI=names(DADES_S)
    for (XVARNOM in names(DADES_S))
      {
      if(is.numeric(get(XVARNOM)))
        {
        DES_QUANTI (XVARNOM)
        }
      else if(is.factor(get(XVARNOM)))
        {
        DES_QUALI (XVARNOM)
        }
      else
        {
        cat("La variable ", XVARNOM, "no és de cap dels tipus coneguts", "\n")
        } 
      }    
    # Fi de la funció   
    detach(DADES_S)
  }
##--------------------------------------------------------------
## DES_QUANTI: Descriptiva variables factor
##--------------------------------------------------------------
DES_QUANTI <-
  function(X) {
    OP <- par(no.readonly = TRUE); # save old parameters
    par(mfrow=c(1,3))
    hist(get(X),    main=c("Histograma de", X), xlab=X);rug(get(X))
    boxplot(get(X), main=c("Diagrama de caixa de", X), 
ylab=X);rug(get(X),side=2)
    qqnorm(get(X),  main=c("Diagrama Q-Q de", X));qqline(get(X))    
    cat("\n")
    par(OP)
    ESTA_1<-data.frame(Variable      = X,
                       N_total       = length(get(X)),
                       N_valids      = sum(!is.na(get(X))),
                       N_desconeguts = sum(is.na(get(X)))
                       )
    ESTA_2<-data.frame(Variable  = X,
                       N         = sum(!is.na(get(X))),
                       Mitjana   = if (mean(get(X) > 10)) {round(mean(get(X), 
na.rm = TRUE), 2)} else {round(mean(get(X), na.rm = TRUE), 3)},
                       Err_tipic = if (sd  (get(X) > 10)) {round(sd  (get(X), 
na.rm = TRUE), 2)} else {round(sd  (get(X), na.rm = TRUE), 3)},
                       Min       = min(get(X), na.rm = TRUE),
                       Perc_25   = quantile(get(X),.25), 
                       Mediana   = median(get(X), na.rm = TRUE),
                       Perc_75   = quantile(get(X),.75), 
                       Max       = max(get(X), na.rm = TRUE),
                       Interval  = max(get(X), na.rm = TRUE) - min(get(X), 
na.rm = TRUE)
                       )
    cat("----------------------------", "\n")
    cat("Valors valids i desconeguts", "\n")
    print(ESTA_1, row.names = FALSE)  
    cat("----------------------------", "\n")
    cat("Estadistics", "\n")
    print(ESTA_2, row.names = FALSE)   
    cat("----------------------------", "\n")
    return(summary(get(X)))    
  }
##--------------------------------------------------------------
## DES_QUALI: Descriptiva variables factor
##--------------------------------------------------------------
DES_QUALI <- function(X)
  {
  cat("Var factor: ",X,"\n")
  XOUT <- as.data.frame(table(get(X)))
  names(XOUT)[1] = X
  XOUT <- transform(XOUT, cumFreq = cumsum(Freq), Percentatge = 
prop.table(Freq))
  print(XOUT)
  print("-----------------------------------------------------")
  }
##--------------------------------------------------------------
## UNI: Análisis univarido
##--------------------------------------------------------------
UNI = function(XDADES,  XDROP=NULL,
               XVD,
               XSPV=NULL, # Si és una anàlisi de SPV
               XCAMIF
               )
  {
    ifelse(is.null(XDROP), DADES_S <- XDADES, DADES_S <- XDADES[, 
setdiff(names(XDADES), XDROP) ])
    attach(DADES_S, warn.conflicts = F)
    cat("\n Descriptiva de totes les variables seleccionades\n")
    print(summary(DADES_S))
    for (XVARNOMT in names(DADES_S)) 
      {
        if (is.factor (get(XVD) ) )
          {
            if ( is.factor(get(XVARNOMT)) ) 
              {
                UNI_VDQVIQ (XVD=get(XVD), XVDT=XVD, XVARNOM=get(XVARNOMT), 
XVARNOMT=XVARNOMT, XCAMIF=XCAMIF)
              }         
            else if( is.numeric(get(XVARNOMT)))
              {
                cat("\nVD=Qualitativa i VI=Numèrica: UNI_VDQVIN\n")
                cat("\nPer fer \n")
              }
          }
        else if (is.numeric(get(XVD) ) & is.null(XSPV) ) # VD Num però no temps
          {
            if ( is.factor(get(XVARNOMT)) ) 
              {
                cat("\nVD=Numèrica i VI=Qualitativa: UNI_VDNVIQ\n")
                cat("\nPer fer \n")
              }         
            else if( is.numeric(get(XVARNOMT)))
              {
                cat("\nVD=Numèrica i VI=Numèrica: UNI_VDNVIN\n")
                cat("\nPer fer \n")
              }
          }

        else if (is.numeric(get(XVD) ) & !is.null(XSPV) ) # VD Num de temps: SPV
          {
            if ( is.factor(get(XVARNOMT)) ) 
              {
                cat("\nVD=Temps i VI=Qualitativa: UNI_VDTVIQ\n")
                cat("\nPer fer \n")
              }         
            else if( is.numeric(get(XVARNOMT)))
              {
                cat("\nVD=Temps i VI=Numèrica: UNI_VDTVIN\n")
                cat("\nPer fer \n")
              }
          }
        else
          {
            MISSATGE = c("Les variable ", XVD, " i ", XVARNOMT, " no són de cap 
dels tipus coneguts", sep="")
            select.list(MISSATGE,title="Atenció", preselect=MISSATGE)
          } 
      }    
    # Fi de la funció   
    detach(DADES_S)
    cat("\n\bFi de la funció des.r \n")
  }
##--------------------------------------------------------------
## UNI_VDQVIQ: Análisis univarido Var Dep: Quali Var indep: quali
##--------------------------------------------------------------
UNI_VDQVIQ = function(XVD, XVDT, XVARNOM, XVARNOMT, XCAMIF)
  {
    cat ("*** Entra de uni_vdqviq.r ******************************** \n\n")
    
source("http://web.udl.es/Biomath/Bioestadistica/R/Instalacio/FuncionsAuxiliars.r";,
 local = F, echo=TRUE, encoding = "unknown")
    # CrossTabsMod(get(XVD), get(XVARNOM), digits = 2, chisq = T, row = T, 
expected = T)
    CrossTabs(get(XVDT), XVARNOM, digits = 2, chisq = T, row = T, expected = T)
    # Oportunitats relatives i IC http://www.ats.ucla.edu/stat/r/dae/logit.htm
    REG_LOG <- glm(XVD ~ XVARNOM, family = "binomial")
    print(exp(cbind("Oportunitat Relativa" = coef(REG_LOG), confint(REG_LOG))))
    # Valors de p
    cat ("\n\nValors de p de les oportunitats relatives (regressió 
logística):\n")
    print(summary(REG_LOG)$coef[, "Pr(>|z|)"])  ## will extract them
    cat ("\n\n*** Surt de un_ivdqviq.r ******************************** \n\n")  
  
  }

##--------------------------------------------------------------
## Pruebas : comentado con una función
##--------------------------------------------------------------
function()
{
library(MASS)
data(birthwt, package="MASS")
birthwt$low  <- factor(birthwt$low)
birthwt$race <- factor(birthwt$race)

# Descriptiva
DESUNI(XDADES=birthwt, XVD=NULL)

# Análisis univariado con var dependiente qualitativa (factor)
DESUNI(XDADES=birthwt, XVD="low")

}
=Fin de funciones =======================================

Muchas gracias por la ayuda y saludos!


> Hola Giera,
> 
> Sí, puedes hacer lo mismo con "R" usando como te decía funciones que ya 
> generan de forma automática estos estadísticos. La parte de las relaciones 
> bivariadas, puede dar un poco más de trabajo pero luego las funciones para 
> representar los boxplots o las tablas cruzadas y los diferentes test 
> igualmente se hacen de forma muy compacta.
> 
> Así, de primeras, yo como atacaría este problema sería:
> 
> * Hacer un "summary()" de tu data.frame. De este resultado (no sé si conoces 
> "summary()" )tienes una gran parte de los estadísticos básicos de cada 
> variable. Hay otra función "fivenum()" que genera los cinco estadísticos 
> básicos para un conjunto, aunque salvo por el contenido de "NAs" es casi lo 
> mismo que devuelve "summary()".
> 
> * Puedes de forma automática, detectar el tipo de variable que contiene cada 
> columna (si es factor/categórica o si es numérica con la función "class()" ) 
> y crear las relaciones bivariadas.
> 
> * Para las numéricas, puedes hacerlo todas de forma cruzada con la función 
> "pairs()".
> * Para las categóricas, puedes ciclar (cada una de ellas para cada numérica) 
> aunque creo que "pairs()" también hace esto de forma automática.
> 
> * Quedaría simplemente pensar en los diferentes tests que quieres lanzar, 
> pero seguro que hay alguna librería (además de la que se incluye por defecto 
> "stats") que los implementa.
> 
> Sobre el cómo....mejor si me pasas un ejemplo de aplicación lo damos un poco 
> de forma...
> 
> Saludos,
> 
> Carlos.
>

_______________________________________________
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es

Responder a