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:
| 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