--- title: "Estadistica descriptiva" author: "Wilson Castro Z" date: "Actualizado 23/02/2020" output: pdf_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` # 1. Practica de R: Estadistica Descriptiva ##1.1 Datos Creando el dataset (Estructura de datos). Se toman los datos de estatura de estudiantes: ```{r} datosEstud<-c(1.2, 1.21, 1.21, 1.21, 1.21, 1.22, 1.22, 1.22, 1.22, 1.23, 1.23, 1.24, 1.25, 1.25, 1.26, 1.26, 1.26, 1.27, 1.27, 1.27, 1.28, 1.28, 1.28, 1.28, 1.29, 1.29, 1.29, 1.3, 1.3, 1.3) ``` ##1.2 Exploracion del dataset y graficos. Se realiza una primera exploracion de los datos con summary y se hace el diagrama de caja y bigotes (o caja y extension) con el comando boxplot(): ```{r} summary(datosEstud,main="Estatura estudiantes 5 grado") boxplot(datosEstud,main="Estatura estudiantes 5 grado") ``` Otros graficos Se plantea la construccion de un diagrama de torta (pie) o de sectores. ```{r} #Calculo de los porcentajes (Sustituya datosEstud por el vector de datos) xp=NULL pct=table(datosEstud) for (i in 1:length(pct)) {xp=round(cbind(xp,100*pct[[i]]/sum(pct)),1)} ``` ```{r} #Con table se establecen las frecuencias #pct=table(datosEstud) # matriz #Ejecute el xp de funcionesWC.R etiquetas=c("1.2","1.21","1.22","1.23","1.24","1.25","1.26","1.27","1.28","1.29","1.30") etiq=paste(etiquetas,xp,"%") pie(table(datosEstud),labels=etiq,main="estudiantes") ``` ```{r} barplot(table(datosEstud),main="Estatura estudiantes 5") ``` Diagrama de tallo y hojas ```{r} stem(datosEstud,scale = 2, width = 20, atom =0.01) ``` ## 1.3 Medidas de tendencia central. Primero se crean unas funciones para algunos calculos ```{r} #CODIGOS DE FUNCIONES, por Ing. Wilson Castro Zapata #Copie el codigo correspondiente y ejecutelo, luego se llama la funcion # dando el nombre de la funcion y entre parentesis el vector de datos al que le #va a calcular la funcion #Funcion que suma dos numeros, vectores, etc suma=function(x,y) { return(x+y) } #Funcion moda tomada de: https://www.tutorialspoint.com/r/r_mean_median_mode.htm getmode <- function(v) { uniqv <- unique(v) uniqv[which.max(tabulate(match(v, uniqv)))] } #Funcion normalize normalize <- function(x) { return ((x - min(x)) / (max(x) - min(x))) } #Funcion normalizar que normaliza un vector segun la distribucion normal znormalizar <- function(x) { return ((x - mean(x))/sd(x)) } #Funcion para calcular la media geometrica mgeometrica <-function(x) { n=length(x) producto=prod(x) return(producto**(1/n)) } #Funcion promedio ponderado mponderada<-function(x,f) { if(length(x)==length(f)) {if(sum(f)==1) return(x%*%f) else return("el vector de probabilidad debe sumar 1.0") } return("Los vectores deben ser del mismo tamaño") } marmonica <-function(x) #Tambien se puede usar 1/mean(1/x) { n=length(x) sumarecip=sum(1/x) return(n/sumarecip) } ``` Las medidas de tendencia central son: ```{r} #Media aritmetica mean(datosEstud) median(datosEstud) #Para la moda como se trata del valor que mas se repite, se encuentra la #frecuencia máxima con table() por observacion. O se ejecuta la funcion getmode de funcionesWC.R: moda=getmode(datosEstud) #Media geometrica mediaG=mgeometrica(datosEstud) #Media armonica mediaH=marmonica(datosEstud) mediaH2=1/mean(1/datosEstud) ``` ## 1.4 Medidas de variacion ```{r} #Rango: Rango=max(datosEstud)-min(datosEstud) #Rango intercuartilico: Interc=IQR(datosEstud) #De forma manual como: Interc2=quantile(datosEstud,0.75)-quantile(datosEstud,0.25) #Varianza: S2=var(datosEstud) #Desviaciòn estándar: DesvEstandar=sd(datosEstud) ``` ## 1.5 Medidas de Asimetria y Forma (coeficiente de asimetria y curtosis) ```{r} #Instalar paquete moments si no esta instalado library(moments) skewness(datosEstud) kurtosis(datosEstud) ``` ## 1.6 Aplicacion de las funciones de normalizacion: ```{r} #Ejecute el archivo de funciones funcionesWC.R #1. Normalizacion entre el rango: maximo y minimo xnormal1=normalize(datosEstud) #2. Normalizacion con la D. normal xnormz=znormalizar(datosEstud) ``` ## 1.7 Tabla de frecuencias (Basado en estadistica descriptiva y probabilidad con aplicaciones en R, de Cristian Tellez y Diego Lemus) Para la tabla de frecuencias: ```{r} fabsol2<-table(datosEstud) frelativas2<-round(prop.table(fabsol2)*100,3) fabsAcum2<-cumsum(fabsol2) fRelatAcum2<-cumsum(frelativas2) tabla2<-cbind(fabsol2,fabsAcum2,frelativas2,fRelatAcum2) colnames(tabla2)<-c("n","N","f","F") tabla2 ``` ##1.8 Tabla con Datos Agrupados (Basado en estadistica descriptiva y probabilidad con aplicaciones en R, de Cristian Tellez y Diego Lemus) Calculo mediante la formula de Sturges del No. de intervalos: ```{r} n<-length(datosEstud) nclases<-1+3.3*log10(n) nclases<-round(1+log10(n)/log10(2)) ``` Luego se definen 6 intervalos. Como breaks toma desde el minimo hasta el maximo, se agrega 1 ```{r} frecuencias<-hist(datosEstud,breaks=nclases,right=FALSE,plot=F) marcas_clase<-frecuencias$mids fabsolutas<-frecuencias$counts frelativas<-(round(frecuencias$counts/sum(frecuencias$counts),3))*100 abs_acum<-cumsum(fabsolutas) rel_acum<-cumsum(frelativas) ``` Generacion de la tabla de frecuencias con datos agrupados: ```{r} tabla3<-cbind(marcas_clase,fabsolutas,abs_acum,frelativas,rel_acum) colnames(tabla3)<-c("Mc","n","N","f","F") rownames(tabla3)<-c("[1.20, 1.22)","[1.22, 1.24)","[1.24, 1.26)","[1.26, 1.28)","[1.28, 1.30]") tabla3 ``` El histograma es: ```{r} hist(datosEstud,breaks=nclases,right=FALSE,plot=T) summary(datosEstud) sum(frecuencias$counts,2) ``` Prueba con "Sturges". Resuelva la tabla de frecuencias iniciando con los comandos dados a continuación y observe los resultados: ```{r} frecuencias<-hist(datosEstud,breaks="Sturges",right=FALSE,plot=F) #IDENTICO frecuencias<-hist(datosEstud,breaks="Sturges",right=TRUE,plot=F) #RARO ``` # 2. Leer una base de datos Ubique el dataset en la misma carpeta donde esta trabajando el archivo de R, puede en RStudio ajustar la Session a esta carpeta. ```{r} DiabetesData<-read.csv('diabetes.csv', header=TRUE,sep=';') #Mirar los primeros 10 registros: head(DiabetesData) #Estructura de los datos str(DiabetesData) #Se hace la tabla de frecuencias para la variable weight summary(DiabetesData$weight) ``` Como hay un NA, se quita con ```{r} names(DiabetesData) head(DiabetesData[,11]) DiabetesWeight<-subset(DiabetesData, (!is.na(DiabetesData[,11]))) head(DiabetesWeight) summary(DiabetesWeight$weight) ``` Y efectivamente ya no aparece e dato NA. Si solo se quiere tomar la variable Weight: ```{r} DiabetesWeight2<-subset(DiabetesData$weight, (!is.na(DiabetesData$weight))) head(DiabetesWeight2) summary(DiabetesWeight2) ``` Queda un vector unicamente con los datos El comando table calcula las frecuencias absolutas de la variable de interés. ```{r} fabsol<-table(DiabetesData[,11]) ``` El comando prop.table calcula las frecuencias relativas de la variable de interés y necesita las frecuencias absolutas: ```{r} frelativas<-round(prop.table(fabsol)*100,3) ``` El comando cumsum permite acumular cantidades, que en este caso son las frecuencias absolutas: ```{r} fabsAcum<-cumsum(fabsol) ``` Y para las relativas: ```{r} fRelatAcum<-cumsum(frelativas) ``` Las siguientes 3 lineas permiten conformar la tabla de frecuencias y nombrar las filas y columnas: ```{r} tabla<-cbind(fabsol,fabsAcum,frelativas,fRelatAcum) colnames(tabla)<-c("n","N","f","F") tabla #Muestra la tabla de frecuencias resultante. ``` Ejercicio No. 3 del curso de Estadistica de www.seactuario.com ```{r} x<-c(0.6, 1.4, 1.6, 1.7, 1.9, 2.2, 2.0, 2.5, 2.5, 2.9, 3.1, 3.3, 4.5, 5.6) boxplot(x,range=1.5) summary(x) ``` Ejemplo Diagrama de Tallo y Hojas ```{r} datospesos<-c(45,48,50,45,58,65,68,70,72,75,70,65,60,62,60,70,75,80,78,80,85,85,90,75) stem(datospesos) ```