---
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)
```
