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