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
<- read.table("Base2.csv", sep = ",", header = TRUE)
BASE 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
<- factor(Estrato, labels = c("Muy pobre", "Pobre", "Medio", "Rico",
Estrato "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
<- factor(Sexo, labels = c("Masculino", "Femenino"))
Sexo 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”
<- data.frame(Estrato, Sexo)
BASE 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
<- read.table("Base2.csv", sep = ",", header = TRUE)
BASE 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
<- transform(BASE, Estrato=factor(Estrato, labels = c("Muy pobre", "Pobre",
BASE "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
<- transform(BASE, Sexo=factor(Sexo, labels = c("Masculino", "Femenino")))
BASE 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
<- table(Estrato)
FrecAbs FrecAbs
## Estrato
## Muy pobre Pobre Medio Rico Muy rico
## 5 3 5 6 11
<- cumsum(FrecAbs)
FrecAbsA FrecAbsA
## Muy pobre Pobre Medio Rico Muy rico
## 5 8 13 19 30
<- round(prop.table(FrecAbs), 4)
FrecRel FrecRel
## Estrato
## Muy pobre Pobre Medio Rico Muy rico
## 0.1667 0.1000 0.1667 0.2000 0.3667
<- FrecRel*100
FrecRelP FrecRelP
## Estrato
## Muy pobre Pobre Medio Rico Muy rico
## 16.67 10.00 16.67 20.00 36.67
<- cumsum(FrecRelP)
FrecRelaPA FrecRelaPA
## Muy pobre Pobre Medio Rico Muy rico
## 16.67 26.67 43.34 63.34 100.01
Concatenar las frecuencias
<- cbind(FrecAbs, FrecAbsA, FrecRel, FrecRelP, FrecRelaPA)
tabla_Estrato 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
<- table(Sexo)
FrecAbs1 FrecAbs1
## Sexo
## Masculino Femenino
## 13 17
<- round(prop.table(FrecAbs1), 4)
FrecRel1 FrecRel1
## Sexo
## Masculino Femenino
## 0.4333 0.5667
<- FrecRel1*100
FrecRelP1 FrecRelP1
## Sexo
## Masculino Femenino
## 43.33 56.67
Concatenar las frecuencias
<- cbind(FrecAbs1, FrecRel1, FrecRelP1)
tabla_Sexo 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)
<- table(BASE$Estrato, BASE$Sexo)
TC 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)
<- round(prop.table(TC), 4)
TCR 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)
<- TCR*100
TCRP 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
<- round(prop.table(TC,margin = 1), 4)*100
MFILA 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
<- round(prop.table(TC,margin = 2), 4)*100
MCOLUMNA 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)
= table(Hijos)
FrecAbs = cumsum(FrecAbs)
FrecAbsA = round(prop.table(FrecAbs), 4)
FrecRel = FrecRel*100
FrecReP = cumsum(FrecReP)
FrecRelAP = cbind(FrecAbs,FrecAbsA,FrecRel,FrecReP,FrecRelAP)
Tabla_Hijos 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
<- hist(Edad,plot=FALSE)
h2 <- table.freq(h2)
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
<- table(Estrato,Sexo)
Tabla_cruz <- prop.table(Tabla_cruz)
tabla 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
<- table(BASE$Estrato)
Tablaestr <- barplot(Tablaestr, main = "Diagrama de barras Estrato frecuencia absoluta",
barp1 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
<- barplot(FrecRelP, main = "Diagrama de barras Estrato
barp2 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))
<- table(BASE$Estrato)
Tablaestr <- barplot(Tablaestr, main = "Frecuencia absoluta",
barp1 xlab = "Estrato",
ylab = "Frecuencia", ylim = c(0,15),
col = c("brown", "blue", "green", "red", "orange"))
text(barp1, Tablaestr + 0.5, labels = Tablaestr)
<- barplot(FrecRelP, main = "Frecuencia relativa(%)",
barp2 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
<- barplot(TC, main = "Diagrama de barras Compuesta", xlab = "Estrato",
barp3 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
<- barplot(TC, main = "Diagrama de barras Apilado", xlab = "Estrato",
barp4 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
<- barplot(Tablaestr, main = "Diagrama de barras horizontal Estrato ",
barp5 xlab = "Frecuencia", ylab = "Estrato", horiz = TRUE,
col = c("brown", "blue", "green", "red", "orange"))
library(RColorBrewer)
<- brewer.pal(length(Estrato), "Set2") color
Sectores con frecuencias absolutas
<- pie(FrecAbs, labels = FrecAbs, col = color) pie1
Sectores con frecuencias porcentuales
<- paste0(FrecRel*100, "%")
etiquetas <- pie(FrecRel, labels = etiquetas) pie2
Diagrama de bastones
<- c(0, 1, 2, 3, 4, 5)
j <- c(5, 7, 7, 2, 6, 3)
k 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
<- 0:5
x <- c(5, 7, 7, 2, 6, 3)/30
fx <- cumsum(fx)
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))
<- graph.freq(BASE$Edad, col="yellow", frequency =1, main="frecuencia
h1 absoluta\nh1")
<- graph.freq(BASE$Edad, col="green", frequency =2 , main="poligono de
h2 frecuencia\nh2")
polygon.freq(h2, col="blue", lwd=2, frequency =2)
<- graph.freq(BASE$Edad, col="brown", frequency =3 ,
h3 main="densidad\nh3")
<- graph.freq(BASE$Edad, col="blue", frequency =3 , main="densidad
h4 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))
<- graph.freq(BASE$Edad, axes=FALSE, frequency =1, main="frecuencia
h5 absoluta\nh5")
axis(1,h5$breaks,las=2)
axis(2,h5$count)
<- graph.freq(BASE$Edad, axes=FALSE, nclass=5, main="frecuencia con 5
h6clases\nh6")
axis(1,h6$breaks,las=2)
axis(2,seq(0,10))
normal.freq(h6,col="red")
<- graph.freq(BASE$Edad, density=6, col="blue", frequency =3 ,
h7main="densidad\nh7")
lines(density(BASE$Edad),col="brown",lwd=2)
<- graph.freq(BASE$Edad, border=0, frequency =3 , main="polígono y
h8densidad\nh8")
polygon.freq(h8,col="blue", frequency =3)
lines(density(BASE$Edad),col="brown",lwd=2)
<- ogive.freq(h5,axes=FALSE,type="b", main="ojiva de h5\nh9",
h9 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()
<- plot(h6, axes=FALSE, main="frecuencia con 5 clases\nh10")
h10 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.
<- hist(BASE$Edad,nclass=5, plot=FALSE) hh
<-graph.freq(hh, frequency=2, col=colors()[367]
h11main="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:
0 - 10 | 10 - 20 | 20 - 30 | 30 - 40 | 40 - 50 |
3 | 8 | 15 | 18 | 6 |
<- c(0, 10, 20, 30, 40, 50)
clases <- c(3, 8, 15, 18, 6)
frec <- graph.freq(clases,counts=frec,xlab="Clases",
h12 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