Paquetes a instalar

install.packages(“kableExtra”)

install.packages(“agricolae”)

install.packages(“RColorBrewer”)

install.packages(“agricolae”)

Distribuciones de frecuencias

Las distribuciones de frecuencias son tablas en que se dispone las modalidades de la variable por filas. En las columnas se dispone el número de ocurrencias por cada valor, porcentajes, etc. La finalidad de las agrupaciones en frecuencias es facilitar la obtención de la información que contienen los datos.

La distribución de frecuencias, en otras palabras, es la manera en la que se ordena una serie de observaciones en diferentes grupos, y normalmente en modo ascendente o descendente.

Tabla de frecuencias

Tipos de distribuciones de frecuencia

Frecuencia absoluta(fi): Es la cantidad de observaciones que pertenecen a cada grupo. También, se interpreta como la cantidad de veces que se repite un suceso. Por ejemplo, continuando con el caso anterior, puede ser que de un grupo de 100 personas, 20 de ellos tengan entre 26 y 40 años.

Frecuencia relativa(hi): Se calcula dividiendo la frecuencia absoluta entre el número de datos, por ejemplo, volviendo a la situación planteada líneas arriba, 20/100 es igual a 0,2 o 20%.

Frecuencia absoluta acumulada(Fi): Resulta de sumar las frecuencias absolutas de una clase o grupo de la muestra (o población) con la anterior o las anteriores. Por ejemplo, para calcular la frecuencia absoluta acumulada del tercer grupo se suman las frecuencias absolutas del primer, segundo y tercer grupo.

Frecuencia relativa acumulada(Hi): Es el resultado de sumar las frecuencias relativas, tal y como explicamos para la frecuencia absoluta acumulada. Por ejemplo, para calcular la frecuencia relativa acumulada del cuarto grupo, se suman las frecuencias relativas del primer, segundo, tercer y cuarto grupo.

Leer la base de datos

BASE <-  read.table("Base2.csv", sep = ",", header = TRUE)
BASE
##    Estrato Sexo Hijos Edad
## 1        5    2     1   29
## 2        1    1     0   20
## 3        4    2     0   20
## 4        1    1     2   21
## 5        3    2     2   36
## 6        5    1     4   38
## 7        4    1     4   41
## 8        5    1     1   31
## 9        4    1     2   36
## 10       1    2     4   30
## 11       1    2     4   20
## 12       3    2     2   21
## 13       5    2     1   37
## 14       3    1     1   20
## 15       1    2     2   41
## 16       4    2     1   41
## 17       5    1     1   35
## 18       5    1     4   24
## 19       3    1     5   32
## 20       5    2     3   25
## 21       5    2     0   34
## 22       5    2     2   24
## 23       2    1     4   27
## 24       2    2     3   32
## 25       2    2     2   32
## 26       3    2     1   29
## 27       5    1     0   36
## 28       4    2     5   23
## 29       4    2     5   20
## 30       5    1     0   37

Atajo a las variables

attach(BASE)

Asignar las categorías a las variables cualitativas

Estrato <- factor(Estrato, labels = c("Muy pobre", "Pobre", "Medio", "Rico", 
                                      "Muy rico"))
Estrato
##  [1] Muy rico  Muy pobre Rico      Muy pobre Medio     Muy rico  Rico     
##  [8] Muy rico  Rico      Muy pobre Muy pobre Medio     Muy rico  Medio    
## [15] Muy pobre Rico      Muy rico  Muy rico  Medio     Muy rico  Muy rico 
## [22] Muy rico  Pobre     Pobre     Pobre     Medio     Muy rico  Rico     
## [29] Rico      Muy rico 
## Levels: Muy pobre Pobre Medio Rico Muy rico
Sexo <- factor(Sexo, labels = c("Masculino", "Femenino"))
Sexo
##  [1] Femenino  Masculino Femenino  Masculino Femenino  Masculino Masculino
##  [8] Masculino Masculino Femenino  Femenino  Femenino  Femenino  Masculino
## [15] Femenino  Femenino  Masculino Masculino Masculino Femenino  Femenino 
## [22] Femenino  Masculino Femenino  Femenino  Femenino  Masculino Femenino 
## [29] Femenino  Masculino
## Levels: Masculino Femenino

Crear un data.frame llamado “BASE”

BASE <- data.frame(Estrato, Sexo)
BASE
##      Estrato      Sexo
## 1   Muy rico  Femenino
## 2  Muy pobre Masculino
## 3       Rico  Femenino
## 4  Muy pobre Masculino
## 5      Medio  Femenino
## 6   Muy rico Masculino
## 7       Rico Masculino
## 8   Muy rico Masculino
## 9       Rico Masculino
## 10 Muy pobre  Femenino
## 11 Muy pobre  Femenino
## 12     Medio  Femenino
## 13  Muy rico  Femenino
## 14     Medio Masculino
## 15 Muy pobre  Femenino
## 16      Rico  Femenino
## 17  Muy rico Masculino
## 18  Muy rico Masculino
## 19     Medio Masculino
## 20  Muy rico  Femenino
## 21  Muy rico  Femenino
## 22  Muy rico  Femenino
## 23     Pobre Masculino
## 24     Pobre  Femenino
## 25     Pobre  Femenino
## 26     Medio  Femenino
## 27  Muy rico Masculino
## 28      Rico  Femenino
## 29      Rico  Femenino
## 30  Muy rico Masculino

Otra forma

BASE <-  read.table("Base2.csv", sep = ",", header = TRUE)
BASE
##    Estrato Sexo Hijos Edad
## 1        5    2     1   29
## 2        1    1     0   20
## 3        4    2     0   20
## 4        1    1     2   21
## 5        3    2     2   36
## 6        5    1     4   38
## 7        4    1     4   41
## 8        5    1     1   31
## 9        4    1     2   36
## 10       1    2     4   30
## 11       1    2     4   20
## 12       3    2     2   21
## 13       5    2     1   37
## 14       3    1     1   20
## 15       1    2     2   41
## 16       4    2     1   41
## 17       5    1     1   35
## 18       5    1     4   24
## 19       3    1     5   32
## 20       5    2     3   25
## 21       5    2     0   34
## 22       5    2     2   24
## 23       2    1     4   27
## 24       2    2     3   32
## 25       2    2     2   32
## 26       3    2     1   29
## 27       5    1     0   36
## 28       4    2     5   23
## 29       4    2     5   20
## 30       5    1     0   37
attach(BASE)
## The following objects are masked _by_ .GlobalEnv:
## 
##     Estrato, Sexo
## The following objects are masked from BASE (pos = 3):
## 
##     Edad, Estrato, Hijos, Sexo
BASE <- transform(BASE, Estrato=factor(Estrato, labels = c("Muy pobre", "Pobre", 
                                                           "Medio", "Rico", 
                                                           "Muy rico")))
BASE
##      Estrato Sexo Hijos Edad
## 1   Muy rico    2     1   29
## 2  Muy pobre    1     0   20
## 3       Rico    2     0   20
## 4  Muy pobre    1     2   21
## 5      Medio    2     2   36
## 6   Muy rico    1     4   38
## 7       Rico    1     4   41
## 8   Muy rico    1     1   31
## 9       Rico    1     2   36
## 10 Muy pobre    2     4   30
## 11 Muy pobre    2     4   20
## 12     Medio    2     2   21
## 13  Muy rico    2     1   37
## 14     Medio    1     1   20
## 15 Muy pobre    2     2   41
## 16      Rico    2     1   41
## 17  Muy rico    1     1   35
## 18  Muy rico    1     4   24
## 19     Medio    1     5   32
## 20  Muy rico    2     3   25
## 21  Muy rico    2     0   34
## 22  Muy rico    2     2   24
## 23     Pobre    1     4   27
## 24     Pobre    2     3   32
## 25     Pobre    2     2   32
## 26     Medio    2     1   29
## 27  Muy rico    1     0   36
## 28      Rico    2     5   23
## 29      Rico    2     5   20
## 30  Muy rico    1     0   37
BASE <- transform(BASE, Sexo=factor(Sexo, labels = c("Masculino", "Femenino")))
BASE
##      Estrato      Sexo Hijos Edad
## 1   Muy rico  Femenino     1   29
## 2  Muy pobre Masculino     0   20
## 3       Rico  Femenino     0   20
## 4  Muy pobre Masculino     2   21
## 5      Medio  Femenino     2   36
## 6   Muy rico Masculino     4   38
## 7       Rico Masculino     4   41
## 8   Muy rico Masculino     1   31
## 9       Rico Masculino     2   36
## 10 Muy pobre  Femenino     4   30
## 11 Muy pobre  Femenino     4   20
## 12     Medio  Femenino     2   21
## 13  Muy rico  Femenino     1   37
## 14     Medio Masculino     1   20
## 15 Muy pobre  Femenino     2   41
## 16      Rico  Femenino     1   41
## 17  Muy rico Masculino     1   35
## 18  Muy rico Masculino     4   24
## 19     Medio Masculino     5   32
## 20  Muy rico  Femenino     3   25
## 21  Muy rico  Femenino     0   34
## 22  Muy rico  Femenino     2   24
## 23     Pobre Masculino     4   27
## 24     Pobre  Femenino     3   32
## 25     Pobre  Femenino     2   32
## 26     Medio  Femenino     1   29
## 27  Muy rico Masculino     0   36
## 28      Rico  Femenino     5   23
## 29      Rico  Femenino     5   20
## 30  Muy rico Masculino     0   37

Tabla de frecuencia de la variables estrato

FrecAbs <- table(Estrato) 
FrecAbs
## Estrato
## Muy pobre     Pobre     Medio      Rico  Muy rico 
##         5         3         5         6        11
FrecAbsA <- cumsum(FrecAbs)
FrecAbsA
## Muy pobre     Pobre     Medio      Rico  Muy rico 
##         5         8        13        19        30
FrecRel <- round(prop.table(FrecAbs), 4)
FrecRel
## Estrato
## Muy pobre     Pobre     Medio      Rico  Muy rico 
##    0.1667    0.1000    0.1667    0.2000    0.3667
FrecRelP <- FrecRel*100
FrecRelP
## Estrato
## Muy pobre     Pobre     Medio      Rico  Muy rico 
##     16.67     10.00     16.67     20.00     36.67
FrecRelaPA <- cumsum(FrecRelP)
FrecRelaPA
## Muy pobre     Pobre     Medio      Rico  Muy rico 
##     16.67     26.67     43.34     63.34    100.01

Concatenar las frecuencias

tabla_Estrato <- cbind(FrecAbs, FrecAbsA, FrecRel, FrecRelP, FrecRelaPA)
tabla_Estrato
##           FrecAbs FrecAbsA FrecRel FrecRelP FrecRelaPA
## Muy pobre       5        5  0.1667    16.67      16.67
## Pobre           3        8  0.1000    10.00      26.67
## Medio           5       13  0.1667    16.67      43.34
## Rico            6       19  0.2000    20.00      63.34
## Muy rico       11       30  0.3667    36.67     100.01

Cambiar nombre de columnas de la tabla

colnames(tabla_Estrato) <- c("ni", "Ni", "hi", "hi%", "Hi%")
tabla_Estrato
##           ni Ni     hi   hi%    Hi%
## Muy pobre  5  5 0.1667 16.67  16.67
## Pobre      3  8 0.1000 10.00  26.67
## Medio      5 13 0.1667 16.67  43.34
## Rico       6 19 0.2000 20.00  63.34
## Muy rico  11 30 0.3667 36.67 100.01

Tabla de frecuencia de la variables sexo

FrecAbs1 <- table(Sexo) 
FrecAbs1
## Sexo
## Masculino  Femenino 
##        13        17
FrecRel1 <- round(prop.table(FrecAbs1), 4)
FrecRel1
## Sexo
## Masculino  Femenino 
##    0.4333    0.5667
FrecRelP1 <- FrecRel1*100
FrecRelP1
## Sexo
## Masculino  Femenino 
##     43.33     56.67

Concatenar las frecuencias

tabla_Sexo <- cbind(FrecAbs1, FrecRel1, FrecRelP1)
tabla_Sexo
##           FrecAbs1 FrecRel1 FrecRelP1
## Masculino       13   0.4333     43.33
## Femenino        17   0.5667     56.67

Cambiar nombre de columnas de la tabla

colnames(tabla_Sexo) <- c("ni", "hi", "hi%")
tabla_Sexo
##           ni     hi   hi%
## Masculino 13 0.4333 43.33
## Femenino  17 0.5667 56.67

Tabla cruzada Estrato vs Sexo (Frecuencias absolutas)

TC <- table(BASE$Estrato, BASE$Sexo)
TC
##            
##             Masculino Femenino
##   Muy pobre         2        3
##   Pobre             1        2
##   Medio             2        3
##   Rico              2        4
##   Muy rico          6        5

Tabla cruzada Estrato vs Sexo (Frecuencias relativas)

TCR <- round(prop.table(TC), 4)
TCR
##            
##             Masculino Femenino
##   Muy pobre    0.0667   0.1000
##   Pobre        0.0333   0.0667
##   Medio        0.0667   0.1000
##   Rico         0.0667   0.1333
##   Muy rico     0.2000   0.1667

Tabla cruzada Estrato vs Sexo (Frecuencias relativas)

TCRP <- TCR*100
TCRP
##            
##             Masculino Femenino
##   Muy pobre      6.67    10.00
##   Pobre          3.33     6.67
##   Medio          6.67    10.00
##   Rico           6.67    13.33
##   Muy rico      20.00    16.67

Tabla cruzada marginal fila porcentual Estrato vs Sexo

MFILA <- round(prop.table(TC,margin = 1), 4)*100
MFILA
##            
##             Masculino Femenino
##   Muy pobre     40.00    60.00
##   Pobre         33.33    66.67
##   Medio         40.00    60.00
##   Rico          33.33    66.67
##   Muy rico      54.55    45.45

Tabla cruzada marginal columna porcentual Estrato vs Sexo

MCOLUMNA <- round(prop.table(TC,margin = 2), 4)*100
MCOLUMNA
##            
##             Masculino Femenino
##   Muy pobre     15.38    17.65
##   Pobre          7.69    11.76
##   Medio         15.38    17.65
##   Rico          15.38    23.53
##   Muy rico      46.15    29.41

Tabla de frecuencia concatenada para la variable hijos

library(kableExtra)

FrecAbs = table(Hijos)
FrecAbsA = cumsum(FrecAbs)
FrecRel = round(prop.table(FrecAbs), 4)
FrecReP = FrecRel*100
FrecRelAP = cumsum(FrecReP)
Tabla_Hijos = cbind(FrecAbs,FrecAbsA,FrecRel,FrecReP,FrecRelAP)
colnames(Tabla_Hijos) = c("ni","Ni","hi","hi%","Hi%")
kable(Tabla_Hijos, format = "markdown", digits = 1)
ni Ni hi hi% Hi%
0 5 5 0.2 16.7 16.7
1 7 12 0.2 23.3 40.0
2 7 19 0.2 23.3 63.3
3 2 21 0.1 6.7 70.0
4 6 27 0.2 20.0 90.0
5 3 30 0.1 10.0 100.0
library(agricolae)

Tabla de frecuencia completa variable Edad

h2 <- hist(Edad,plot=FALSE)
h2 <- table.freq(h2)
colnames(h2) = c("Li","Ls","Yi","ni","hi%","Ni","Hi%")
kable(h2, format = "markdown", digits = 1)
Li Ls Yi ni hi% Ni Hi%
20 25 22.5 11 36.7 11 36.7
25 30 27.5 4 13.3 15 50.0
30 35 32.5 6 20.0 21 70.0
35 40 37.5 6 20.0 27 90.0
40 45 42.5 3 10.0 30 100.0

Cruce de variables

Tabla_cruz <- table(Estrato,Sexo)
tabla <- prop.table(Tabla_cruz)
kable(Tabla_cruz, format = "markdown", digits = 2)
Masculino Femenino
Muy pobre 2 3
Pobre 1 2
Medio 2 3
Rico 2 4
Muy rico 6 5
kable(tabla, format = "markdown", digits = 2)
Masculino Femenino
Muy pobre 0.07 0.10
Pobre 0.03 0.07
Medio 0.07 0.10
Rico 0.07 0.13
Muy rico 0.20 0.17

Graficas

Diagrama de barras simple variable Estrato frecuencia absoluta

Tablaestr <- table(BASE$Estrato)
barp1 <- barplot(Tablaestr, main = "Diagrama de barras Estrato frecuencia absoluta", 
        xlab = "Estrato",
        ylab = "Frecuencia", ylim = c(0,15),
        col = c("brown", "blue", "green", "red", "orange"))
        text(barp1, Tablaestr + 0.5, labels = Tablaestr)

Diagrama de barras simple variable Estrato frecuencia relativa

barp2 <- barplot(FrecRelP, main = "Diagrama de barras Estrato 
        frecuencia relativa(%)", 
        xlab = "Estrato",
        ylab = "Porcentaje", ylim = c(0,40), col = rainbow(5))
        text(barp2, FrecRelP + 0.8, labels = FrecRelP)

Diagramas de barras en una sola fila

par(mfrow = c(1, 2))

Tablaestr <- table(BASE$Estrato)
barp1 <- barplot(Tablaestr, main = "Frecuencia absoluta", 
        xlab = "Estrato",
        ylab = "Frecuencia", ylim = c(0,15),
        col = c("brown", "blue", "green", "red", "orange"))
        text(barp1, Tablaestr + 0.5, labels = Tablaestr)

barp2 <- barplot(FrecRelP, main = "Frecuencia relativa(%)", 
        xlab = "Estrato",
        ylab = "Porcentaje", ylim = c(0,40), col = rainbow(5))
        text(barp2, FrecRelP + 1.4, labels = FrecRelP)

Diagrama de barras compuesta, variables Estrato vs Sexo

barp3 <- barplot(TC, main = "Diagrama de barras Compuesta", xlab = "Estrato",
        ylab = "Frecuencia", ylim = c(0,10), legend = rownames(TC), 
                           col = c("brown", "blue", "green", "red", 
                                   "orange"), beside = TRUE)

Diagrama de barras apiladas, variables Estrato vs Sexo

barp4 <- barplot(TC, main = "Diagrama de barras Apilado", xlab = "Estrato",
                 ylab = "Frecuencia", ylim = c(0,20), legend.text = rownames(TC),
                 args.legend = list(x = "topleft"),
                 col = c("brown", "blue", "green", "red", 
                         "orange"), beside = FALSE)

Diagrama de barras simple horizontal variable Estrato frecuencia absoluta

barp5 <- barplot(Tablaestr, main = "Diagrama de barras horizontal Estrato ", 
                 xlab = "Frecuencia", ylab = "Estrato", horiz = TRUE,
                 col = c("brown", "blue", "green", "red", "orange"))

library(RColorBrewer)

color <- brewer.pal(length(Estrato), "Set2") 

Sectores con frecuencias absolutas

pie1 <- pie(FrecAbs, labels = FrecAbs, col = color)

Sectores con frecuencias porcentuales

etiquetas <- paste0(FrecRel*100, "%")
pie2 <- pie(FrecRel, labels = etiquetas)

Diagrama de bastones

j <- c(0, 1, 2, 3, 4, 5)
k <- c(5, 7, 7, 2, 6, 3)
plot(x = j, y = k, xlab = "Hijos", ylab = "Frecuencia", pch = 15, col = "blue")
segments(x0 = j, y0 = 0, x1 = j, y1 = k, lwd = 2, col = "blue")

Diagrama escalonado acumulado

x <- 0:5
fx <- c(5, 7, 7, 2, 6, 3)/30
Fx <- cumsum(fx)
plot(x = c(0, x), y = c(0, Fx), type = "s", xlab = "x", ylab = "Porcentaje acumulado", col = "blue", lwd = 2)
points(x, Fx, col = "blue", pch = 15)

Histogramas, poligonos y ojivas

library(agricolae)
par(mfrow=c(2,2))
h1 <- graph.freq(BASE$Edad, col="yellow", frequency =1, main="frecuencia
absoluta\nh1")
h2 <- graph.freq(BASE$Edad, col="green", frequency =2 , main="poligono de
frecuencia\nh2")
polygon.freq(h2, col="blue", lwd=2, frequency =2)
h3 <- graph.freq(BASE$Edad, col="brown", frequency =3 ,
main="densidad\nh3")
h4 <- graph.freq(BASE$Edad, col="blue", frequency =3 , main="densidad
normal\nh4", density=4)
normal.freq(h4, col="red", lty=4,lwd=2, frequency=3)

Manejo de escalas

Se refiere a los cambios de escala en los ejes

par(mfrow=c(2,2))
h5 <- graph.freq(BASE$Edad, axes=FALSE, frequency =1, main="frecuencia
absoluta\nh5")
axis(1,h5$breaks,las=2)
axis(2,h5$count)

h6<- graph.freq(BASE$Edad, axes=FALSE, nclass=5, main="frecuencia con 5
clases\nh6")
axis(1,h6$breaks,las=2)
axis(2,seq(0,10))
normal.freq(h6,col="red")

h7<- graph.freq(BASE$Edad, density=6, col="blue", frequency =3 ,
main="densidad\nh7")
lines(density(BASE$Edad),col="brown",lwd=2)

h8<- graph.freq(BASE$Edad, border=0, frequency =3 , main="polígono y
densidad\nh8")
polygon.freq(h8,col="blue", frequency =3)
lines(density(BASE$Edad),col="brown",lwd=2)

h9 <- ogive.freq(h5,axes=FALSE,type="b", main="ojiva de h5\nh9",
col="red")
axis(2,round(h9[,2],1),las=2)
axis(1,round(h9[,1],1),las=2)

Reproduciendo histogramas y el uso de hist()

h10 <- plot(h6, axes=FALSE, main="frecuencia con 5 clases\nh10")
axis(1,h6$breaks,las=2)
axis(2,seq(0,10))
normal.freq(h6,col="red")

summary(h6)
##   Lower Upper Main Frequency Percentage CF   CPF
## 1  20.0  24.2 22.1        10       33.3 10  33.3
## 2  24.2  28.4 26.3         2        6.7 12  40.0
## 3  28.4  32.6 30.5         7       23.3 19  63.3
## 4  32.6  36.8 34.7         5       16.7 24  80.0
## 5  36.8  41.0 38.9         6       20.0 30 100.0

El tipo de clase de la función hist() es “histogram” y de grah.freq() es “graph.freq”, sin embargo es posible establecer compatibilidad entre ambas funciones.

hh <- hist(BASE$Edad,nclass=5, plot=FALSE)
h11<-graph.freq(hh, frequency=2, col=colors()[367]
,main="relativa\nh11" ,axes=F)
axis(1,h11$breaks,las=2)
axis(2,round(h11$relative,2),las=2)

summary(hh)
##          Length Class  Mode     
## breaks   6      -none- numeric  
## counts   5      -none- numeric  
## density  5      -none- numeric  
## mids     5      -none- numeric  
## xname    1      -none- character
## equidist 1      -none- logical
summary(h11)
##   Lower Upper Main Frequency Percentage CF   CPF
## 1    20    25 22.5        11       36.7 11  36.7
## 2    25    30 27.5         4       13.3 15  50.0
## 3    30    35 32.5         6       20.0 21  70.0
## 4    35    40 37.5         6       20.0 27  90.0
## 5    40    45 42.5         3       10.0 30 100.0

Histograma a partir de datos agrupados

Si se tiene datos agrupados, con la función graph.freq() se puede graficar y obtener los resumenes del histograma; asi por ejemplo en la siguiente tabla:

Intervalos
0 - 10 10 - 20 20 - 30 30 - 40 40 - 50
3 8 15 18 6
clases <- c(0, 10, 20, 30, 40, 50)
frec <- c(3, 8, 15, 18, 6)
h12 <- graph.freq(clases,counts=frec,xlab="Clases",
main="Clases\nh12")

summary(h12)
##   Lower Upper Main Frequency Percentage CF CPF
## 1     0    10    5         3          6  3   6
## 2    10    20   15         8         16 11  22
## 3    20    30   25        15         30 26  52
## 4    30    40   35        18         36 44  88
## 5    40    50   45         6         12 50 100