Estadística Descriptiva con R

Luis Maron Illachura

22 de marzo de 2018

Introduccion

En cualquier analisis estadistico siempre debemos realizar un descriptivo de la muestra con un doble objetivo:

-Comprobar la calidad de los datos.

-Conocer detalladamente los datos. Esto nos ayudara a decidir la estrategia de analisis mas adecuada.

¿Como leemos los datos en R?

Existen varias funciones de lectura de datos en R segun el formato del archivo. Cuando tenemos un fichero en excel, es aconsejable guardarlo previamente en formato csv y posteriormente lo leemos desde R con la funcion read.csv:

datos <- read.csv("ejemplo-1-RStudio.csv", sep=";")
head(datos)
##   Peso Altura Edad Sexo Nombres Estudios
## 1   77   1.63   23    1    Pepe        1
## 2   58   1.63   23    2     Ana        2
## 3   89   1.85   26    1  Manolo        0
## 4   55   1.62   23    1    Rafa        1
## 5   47   1.60   26    2   María        3
## 6   60   1.63   26    2    Auxi        2

# View(datos)
datos
##    Peso Altura Edad Sexo Nombres Estudios
## 1    77   1.63   23    1    Pepe        1
## 2    58   1.63   23    2     Ana        2
## 3    89   1.85   26    1  Manolo        0
## 4    55   1.62   23    1    Rafa        1
## 5    47   1.60   26    2   María        3
## 6    60   1.63   26    2    Auxi        2
## 7    54   1.70   22    1  Germán        3
## 8    58   1.65   23    2   Celia        1
## 9    75   1.78   26    2  Carmen        2
## 10   65   1.70   24    2    Juan        3
## 11   82   1.77   28    1    Dani        0
## 12   85   1.83   42    1 Antonio        1
## 13   75   1.74   25    2 Belinda        1
## 14   65   1.65   26    2    Sara        3

Manejo de datos

class(datos) #Muestra el tipo de objeto.
## [1] "data.frame"
dim(datos) #Muestra las dimensiones del objeto.
## [1] 14  6
ncol(datos);nrow(datos) #Muestra el número de columnas/filas del objeto.
## [1] 6
## [1] 14
str(datos)
## 'data.frame':    14 obs. of  6 variables:
##  $ Peso    : int  77 58 89 55 47 60 54 58 75 65 ...
##  $ Altura  : num  1.63 1.63 1.85 1.62 1.6 1.63 1.7 1.65 1.78 1.7 ...
##  $ Edad    : int  23 23 26 23 26 26 22 23 26 24 ...
##  $ Sexo    : int  1 2 1 1 2 2 1 2 2 2 ...
##  $ Nombres : Factor w/ 14 levels "Ana","Antonio",..: 12 1 10 13 11 3 8 6 5 9 ...
##  $ Estudios: int  1 2 0 1 3 2 3 1 2 3 ...
# datos <- edit(datos)

names(datos)# Muestra los nombres de las columnas.
## [1] "Peso"     "Altura"   "Edad"     "Sexo"     "Nombres"  "Estudios"
ls() #Visualiza las variables cargadas en memoria.
## [1] "datos"
rm() #Elimina las variables indicadas.

Visualizacion de Datos estilo SPSS

library(sjPlot)
## Install package "strengejacke" from GitHub (`devtools::install_github("strengejacke/strengejacke")`) to load all sj-packages at once!
sjmisc::descr(datos[,1:3])
##
## ## Basic descriptive statistics
##
##  variable    type  label  n NA.prc  mean    sd   se    md trimmed  min
##      Peso integer   Peso 14      0 67.50 12.98 3.47 65.00   67.42 47.0
##    Altura numeric Altura 14      0  1.70  0.08 0.02  1.67    1.69  1.6
##      Edad integer   Edad 14      0 25.93  4.94 1.32 25.50   24.92 22.0
##    max range skew kurtosis
##  89.00 42.00 0.16    -1.44
##   1.85  0.25 0.52    -1.29
##  42.00 20.00 2.37     5.09
tab_df(datos)
Peso Altura Edad Sexo Nombres Estudios
77 1.63 23 1 Pepe 1
58 1.63 23 2 Ana 2
89 1.85 26 1 Manolo 0
55 1.62 23 1 Rafa 1
47 1.6 26 2 María 3
60 1.63 26 2 Auxi 2
54 1.7 22 1 Germán 3
58 1.65 23 2 Celia 1
75 1.78 26 2 Carmen 2
65 1.7 24 2 Juan 3
82 1.77 28 1 Dani 0
85 1.83 42 1 Antonio 1
75 1.74 25 2 Belinda 1
65 1.65 26 2 Sara 3
sjt.frq(datos)
## `sjt.frq()` will become deprecated in the future. Please use `sjmisc::frq(out = "v")` instead.
Peso
value N raw % valid % cumulative %
47 1 7.14 7.14 7.14
54 1 7.14 7.14 14.29
55 1 7.14 7.14 21.43
58 2 14.29 14.29 35.71
60 1 7.14 7.14 42.86
65 2 14.29 14.29 57.14
75 2 14.29 14.29 71.43
77 1 7.14 7.14 78.57
82 1 7.14 7.14 85.71
85 1 7.14 7.14 92.86
89 1 7.14 7.14 100.00
missings 0 0.00
total N=14 · valid N=14 · x̄=67.50 · σ=12.98

 

Altura
value N raw % valid % cumulative %
1.6 1 7.14 7.14 7.14
1.62 1 7.14 7.14 14.29
1.63 3 21.43 21.43 35.71
1.65 2 14.29 14.29 50.00
1.7 2 14.29 14.29 64.29
1.74 1 7.14 7.14 71.43
1.77 1 7.14 7.14 78.57
1.78 1 7.14 7.14 85.71
1.83 1 7.14 7.14 92.86
1.85 1 7.14 7.14 100.00
missings 0 0.00
total N=14 · valid N=14 · x̄=1.70 · σ=0.08

 

Edad
value N raw % valid % cumulative %
22 1 7.14 7.14 7.14
23 4 28.57 28.57 35.71
24 1 7.14 7.14 42.86
25 1 7.14 7.14 50.00
26 5 35.71 35.71 85.71
28 1 7.14 7.14 92.86
42 1 7.14 7.14 100.00
missings 0 0.00
total N=14 · valid N=14 · x̄=25.93 · σ=4.94

 

Sexo
value N raw % valid % cumulative %
1 6 42.86 42.86 42.86
2 8 57.14 57.14 100.00
missings 0 0.00
total N=14 · valid N=14 · x̄=1.57 · σ=0.51

 

Nombres
value N raw % valid % cumulative %
Ana 1 7.14 7.14 7.14
Antonio 1 7.14 7.14 14.29
Auxi 1 7.14 7.14 21.43
Belinda 1 7.14 7.14 28.57
Carmen 1 7.14 7.14 35.71
Celia 1 7.14 7.14 42.86
Dani 1 7.14 7.14 50.00
Germán 1 7.14 7.14 57.14
Juan 1 7.14 7.14 64.29
Manolo 1 7.14 7.14 71.43
María 1 7.14 7.14 78.57
Pepe 1 7.14 7.14 85.71
Rafa 1 7.14 7.14 92.86
Sara 1 7.14 7.14 100.00
missings 0 0.00
total N=14 · valid N=14 · x̄=7.50 · σ=4.18

 

Estudios
value N raw % valid % cumulative %
0 2 14.29 14.29 14.29
1 5 35.71 35.71 50.00
2 3 21.43 21.43 71.43
3 4 28.57 28.57 100.00
missings 0 0.00
total N=14 · valid N=14 · x̄=1.64 · σ=1.08

 

attach(datos) #Acceder a las varibles en la base de datos solo dando sus nombres
sjt.xtab(Sexo,Estudios)
Sexo Estudios Total
0 1 2 3
1 2 3 0 1 6
2 0 2 3 3 8
Total 2 5 3 4 14
χ2=6.038 · df=3 · Cramer’s V=0.657 · Fisher’s p=0.179

Comandos para el analisis numerico de datos:

summary(datos) #Resumen Estadistico datos
##       Peso          Altura           Edad            Sexo
##  Min.   :47.0   Min.   :1.600   Min.   :22.00   Min.   :1.000
##  1st Qu.:58.0   1st Qu.:1.630   1st Qu.:23.00   1st Qu.:1.000
##  Median :65.0   Median :1.675   Median :25.50   Median :2.000
##  Mean   :67.5   Mean   :1.699   Mean   :25.93   Mean   :1.571
##  3rd Qu.:76.5   3rd Qu.:1.762   3rd Qu.:26.00   3rd Qu.:2.000
##  Max.   :89.0   Max.   :1.850   Max.   :42.00   Max.   :2.000
##
##     Nombres     Estudios
##  Ana    :1   Min.   :0.000
##  Antonio:1   1st Qu.:1.000
##  Auxi   :1   Median :1.500
##  Belinda:1   Mean   :1.643
##  Carmen :1   3rd Qu.:2.750
##  Celia  :1   Max.   :3.000
##  (Other):8

summary(datos$Altura) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
##   1.600   1.630   1.675   1.699   1.762   1.850
summary(datos$Sexo)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
##   1.000   1.000   2.000   1.571   2.000   2.000
min(Peso)
## [1] 47
max(Peso)
## [1] 89
range(Peso)
## [1] 47 89
mean(Altura) #media Aritmetica
## [1] 1.698571

median(Altura)
## [1] 1.675
length(Altura)
## [1] 14
sd(Altura)
## [1] 0.08244879
var(Altura)
## [1] 0.006797802

cov(Peso,Altura)
## [1] 0.8915385
quantile(Peso, 0.25) #Cuantil Q1
## 25%
##  58
quantile(Peso, 0.75) #Cuantil Q3
##  75%
## 76.5
quantile(Peso, c(0.35, 0.60, 0.98))  #Muestra los percentiles al 35, 60 y 96% de la variable Peso
##   35%   60%   98%
## 59.10 73.00 87.96
sort(Peso)
##  [1] 47 54 55 58 58 60 65 65 75 75 77 82 85 89

Tablas…

table(Sexo) # Tabla de frecuencias absolutas
## Sexo
## 1 2
## 6 8
table(Edad,Sexo)
##     Sexo
## Edad 1 2
##   22 1 0
##   23 2 2
##   24 0 1
##   25 0 1
##   26 1 4
##   28 1 0
##   42 1 0
tablaA <- as.data.frame(table(Altura = factor(cut(Altura, breaks = 5)))) # Agrupa los valores de la variable Altura en 5  y calcula su frecuencia absoluta
tablaA
##       Altura Freq
## 1 (1.6,1.65]    7
## 2 (1.65,1.7]    2
## 3 (1.7,1.75]    1
## 4 (1.75,1.8]    2
## 5 (1.8,1.85]    2
transform(tablaA,  #Muestra y reagrupa la tabla de frecuencias completas
   FreqAc = cumsum(Freq),
   Rel = round(prop.table(Freq), 3),
   RelAc = round(cumsum(prop.table(Freq)), 3))
##       Altura Freq FreqAc   Rel RelAc
## 1 (1.6,1.65]    7      7 0.500 0.500
## 2 (1.65,1.7]    2      9 0.143 0.643
## 3 (1.7,1.75]    1     10 0.071 0.714
## 4 (1.75,1.8]    2     12 0.143 0.857
## 5 (1.8,1.85]    2     14 0.143 1.000

Recodificamos valores

detach(datos)
library(sjPlot)

datos$Sexo<-factor(datos$Sexo, levels=c(1,2), labels=c("Hombre","Mujer"))
datos$Estudios<-factor(datos$Estudios, levels=c(0,1,2,3), labels=c("Sin estudios","Estudios Primarios",
   "Estudios Secundarios","Estudios Superiores"))

tab_df(datos)
Peso Altura Edad Sexo Nombres Estudios
77 1.63 23 Hombre Pepe Estudios Primarios
58 1.63 23 Mujer Ana Estudios Secundarios
89 1.85 26 Hombre Manolo Sin estudios
55 1.62 23 Hombre Rafa Estudios Primarios
47 1.6 26 Mujer María Estudios Superiores
60 1.63 26 Mujer Auxi Estudios Secundarios
54 1.7 22 Hombre Germán Estudios Superiores
58 1.65 23 Mujer Celia Estudios Primarios
75 1.78 26 Mujer Carmen Estudios Secundarios
65 1.7 24 Mujer Juan Estudios Superiores
82 1.77 28 Hombre Dani Sin estudios
85 1.83 42 Hombre Antonio Estudios Primarios
75 1.74 25 Mujer Belinda Estudios Primarios
65 1.65 26 Mujer Sara Estudios Superiores

Graficos

library(ggplot2)
library(plotly)
attach(datos)
a<-barplot(table(Sexo),main="Distribucion de Frecuencias de la Variable Sexo\n",col=c("cyan4","pink3"), xlab = "Sexo", horiz = T)
text(a,table(datos$Sexo)+0.5 ,labels=table(Sexo), xpd = TRUE)

a <- ggplot(datos, aes(Estudios))
a + geom_bar()

pie(table(Estudios), main = "Distribucion de Porcentaje de la Variable Niv. Estudio")

hist(Peso,main="Peso",col="blue3", breaks = "Sturges", labels = T)
grid(NULL,NULL,"blue3")

k <- round(1 + 3.322*log10(length(Peso)))#para saber el bins optimo xD
k
## [1] 5
ggplot(datos, aes(x = Peso)) + geom_histogram(bins = 5 , color="cyan3",fill="cyan4") + theme_bw() + labs(title="Histograma de Peso",y="Frecuencia")

plot_ly(x = Peso) %>% add_histogram()
boxplot(Edad); grid(0,NULL,"grey")#datoa atipicos

>Continuara =)