ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL
Año: 2020 Periodo: I PAO
Materia: Estadística I
Práctica: Tabla de Frecuencias y Gráficos de histogramas
Fecha: 10 de Junio de 2020 Duración: 60
minutos
Práctica 1. Tablas de Frecuencias, Histograma y Ojiva
Introducción
En la presente práctica se aplican los conceptos de Tablas de Frecuencias para
variables cualitativas y cuantitativas, Gráficos de Histogramas y Ojivas mediante el uso
de comandos de R. Sobre los datos
Empecemos cargando los datos que se requieren para la práctica, para lo cual
utilizaremos la base de datos Iris incorporada por defecto en Rstudio. Iris es un
conjunto de datos de flores que utilizó Ronald Fisher en un artículo publicado en el año
1936. Está formado por 50 muestras de cada una de tres especies de Iris (Iris setosa,
virginica Iris e Iris versicolor) y cuatro características que se tomaron en cada muestra:
longitud, anchura de los sépalos y pétalos medidos en centímetros.
Tema 1. Obtención de datos
Obtenga los datos de la tabla Iris y asígnelo al objeto data, luego extraiga los 3
primeros registros asignados (filas). Muestre los nombres de las columnas extraídas y
haga referencia a la columna Species.
Comandos:
objetoR<- objetoA #sintaxis de asignación de valores y datos
objetoR= objetoA #sintaxis de asignación de valores y datos
head(objetoR,n) #extraer los n primeros registros del objeto R
colnames (objetoR) #visualiza las columnas del objeto R
objetoR$columna #referencia a una columna en particular del objeto R
Solución:
data=iris #Asigna los datos de la base iris al objeto data (tabla de
datos Dataframe)
head(data,3) #visualiza las tres primeras filas del objeto data
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
colnames(data) #muestra los nombres de las columnas(variables) del
objeto data
## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
"Species"
data$Species #permite referencia a los datos de una columna
Species(variable), el resultado se muestra como un vector
## [1] setosa setosa setosa setosa setosa setosa
## [7] setosa setosa setosa setosa setosa setosa
## [13] setosa setosa setosa setosa setosa setosa
## [19] setosa setosa setosa setosa setosa setosa
## [25] setosa setosa setosa setosa setosa setosa
## [31] setosa setosa setosa setosa setosa setosa
## [37] setosa setosa setosa setosa setosa setosa
## [43] setosa setosa setosa setosa setosa setosa
## [49] setosa setosa versicolor versicolor versicolor
versicolor
## [55] versicolor versicolor versicolor versicolor versicolor
versicolor
## [61] versicolor versicolor versicolor versicolor versicolor
versicolor
## [67] versicolor versicolor versicolor versicolor versicolor
versicolor
## [73] versicolor versicolor versicolor versicolor versicolor
versicolor
## [79] versicolor versicolor versicolor versicolor versicolor
versicolor
## [85] versicolor versicolor versicolor versicolor versicolor
versicolor
## [91] versicolor versicolor versicolor versicolor versicolor
versicolor
## [97] versicolor versicolor versicolor versicolor virginica
virginica
## [103] virginica virginica virginica virginica virginica
virginica
## [109] virginica virginica virginica virginica virginica
virginica
## [115] virginica virginica virginica virginica virginica
virginica
## [121] virginica virginica virginica virginica virginica
virginica
## [127] virginica virginica virginica virginica virginica
virginica
## [133] virginica virginica virginica virginica virginica
virginica
## [139] virginica virginica virginica virginica virginica
virginica
## [145] virginica virginica virginica virginica virginica
virginica
## Levels: setosa versicolor virginica
Tema 2. Obtención de registros
Obtenga los 10 primeros registros de la tabla data y asígnelo en un nuevo objeto
Dataframe de nombre data1. Luego haga referencia a la longitud del pétalo de los
registros seleccionados.
Solución:
Data1=head(data,10)
Data1$Petal.Length
[1] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5
Tema 3. Tabla de Frecuencia de una variable cualitativa
Elabore una tabla con la distribución de frecuencias de la variable Especie, incorpore
las frecuencias absolutas y relativas asociadas a cada especie.
Comando:
table(datos,exclude) #comando para crear tablas con las frecuencias absolutas, se
puede excluir ciertos valores
prop.table(tabla frecuencia, margin) #permite crear tabla con frecuencias relativas. Por
defecto margin es NULL, si margin es 1 se obtiene marginales por filas, en caso de
marginales por columnas el valor es 2
cbind(columna 1, columna2) #permite unificar columnas en un nuevo objeto
Solución:
tabla1=table(data$Species)
tabla1
##
## setosa versicolor virginica
## 50 50 50
tabla2=table(data$Species, exclude = c("versicolor")) #excluye los
registros de la Specie versicolor
tabla2
##
## setosa virginica
## 50 50
tabla3=prop.table(tabla1) #frecuencias relativas
tabla3
##
## setosa versicolor virginica
## 0.3333333 0.3333333 0.3333333
tablaR=cbind(Absoluta=tabla1,Relativa=tabla3)
tablaR
## Absoluta Relativa
## setosa 50 0.3333333
## versicolor 50 0.3333333
## virginica 50 0.3333333
tablaR=cbind(Abosulta=table(data$Species),
Relativa=prop.table(table(data$Species))) #sintaxis unificada
tablaR
## Abosulta Relativa
## setosa 50 0.3333333
## versicolor 50 0.3333333
## virginica 50 0.3333333
Tema 4. Diagrama de barras
Elabore un diagrama de barras para las frecuencias absolutas de las Especies de iris.
Comando:
barplot(tabla frecuencia, main, xlab) #diagrama de barras, argumentos main permite
asignar título del gráfico y xlab etiqueta eje x
Solución:
barplot(tabla1, main="Diagrama de barras especies de Iris" ,
xlab="Tipos de especies")
Tema 5. Tabla de frecuencia para variable cuantitativa
Elabore una tabla de frecuencias para la variable longitud de pétalos.
Comandos:
hist(x, breaks=‘Sturges’, include.lowest=TRUE, right=FALSE, plot=FALSE)
library(agricolae)
table.freq(hist…)
Solución:
k=nclass.Sturges(data$Petal.Length)
k
## [1] 9
x=range(data$Petal.Length)
amplitud=(x[2]-x[1])/k #amplitud
amplitud
## [1] 0.6555556
hist(data$Petal.Length, breaks =
seq(from=x[1],to=x[2],by=amplitud),include.lowest = T, right = F, plot
= F)
## $breaks
## [1] 1.000000 1.655556 2.311111 2.966667 3.622222 4.277778 4.933333
5.588889
## [9] 6.244444 6.900000
##
## $counts
## [1] 44 6 0 6 17 31 21 19 6
##
## $density
## [1] 0.44745763 0.06101695 0.00000000 0.06101695 0.17288136
0.31525424 0.21355932
## [8] 0.19322034 0.06101695
##
## $mids
## [1] 1.327778 1.983333 2.638889 3.294444 3.950000 4.605556 5.261111
5.916667
## [9] 6.572222
##
## $xname
## [1] "data$Petal.Length"
##
## $equidist
## [1] TRUE
##
## attr(,"class")
## [1] "histogram"
#install.packages("agricolae")
library(agricolae)
## Warning: package 'agricolae' was built under R version 3.6.3
tablaR=table.freq(hist(data$Petal.Length, breaks =
seq(from=x[1],to=x[2],by=amplitud), include.lowest = T, right = F,
plot = F))
tablaR
## Lower Upper Main Frequency Percentage CF CPF
## 1 1.000000 1.655556 1.327778 44 29.3 44 29.3
## 2 1.655556 2.311111 1.983333 6 4.0 50 33.3
## 3 2.311111 2.966667 2.638889 0 0.0 50 33.3
## 4 2.966667 3.622222 3.294444 6 4.0 56 37.3
## 5 3.622222 4.277778 3.950000 17 11.3 73 48.7
## 6 4.277778 4.933333 4.605556 31 20.7 104 69.3
## 7 4.933333 5.588889 5.261111 21 14.0 125 83.3
## 8 5.588889 6.244444 5.916667 19 12.7 144 96.0
## 9 6.244444 6.900000 6.572222 6 4.0 150 100.0
Tema 6. Tabla de frecuencia para variable cuantitativa
Elabore una tabla de frecuencias para la variable longitud de pétalos.
Comandos:
library(fdth) # carla la librería fdth
dist <- fdt(x,breaks=“Sturges”) # calcula la distribución de frecuencias utilizando la
regla Sturges
Solución:
install.packages("fdth") #instlación del paquete
library(fdth)
## Warning: package 'fdth' was built under R version 3.6.3
##
## Attaching package: 'fdth'
## The following objects are masked from 'package:stats':
##
## sd, var
# k<-1 + (3.322*log10(150))
# k
k=nclass.Sturges(data$Petal.Length)
k
## [1] 9
tablaR1=fdt(data$Petal.Length, start = 1, end=6.9, h=(5.9/9), right =
F)
print("\n Tabla de Frecuencias (1) Regla longitud intervalo=end-
star/k")
## [1] "\n Tabla de Frecuencias (1) Regla longitud intervalo=end-
star/k"
tablaR1
## Class limits f rf rf(%) cf cf(%)
## [1,1.66) 44 0.29 29.33 44 29.33
## [1.66,2.31) 6 0.04 4.00 50 33.33
## [2.31,2.97) 0 0.00 0.00 50 33.33
## [2.97,3.62) 6 0.04 4.00 56 37.33
## [3.62,4.28) 17 0.11 11.33 73 48.67
## [4.28,4.93) 31 0.21 20.67 104 69.33
## [4.93,5.59) 21 0.14 14.00 125 83.33
## [5.59,6.24) 19 0.13 12.67 144 96.00
## [6.24,6.9) 5 0.03 3.33 149 99.33
print("*************************************")
## [1] "*************************************"
print("\n Tabla de Frecuencias (2) cantidad de intervalos k por
Sturges")
## [1] "\n Tabla de Frecuencias (2) cantidad de intervalos k por
Sturges"
tablaR2=fdt(data$Petal.Length, k, right = F)
tablaR2
## Class limits f rf rf(%) cf cf(%)
## [0.99,1.654) 44 0.29 29.33 44 29.33
## [1.654,2.319) 6 0.04 4.00 50 33.33
## [2.319,2.983) 0 0.00 0.00 50 33.33
## [2.983,3.647) 6 0.04 4.00 56 37.33
## [3.647,4.312) 19 0.13 12.67 75 50.00
## [4.312,4.976) 29 0.19 19.33 104 69.33
## [4.976,5.64) 27 0.18 18.00 131 87.33
## [5.64,6.305) 14 0.09 9.33 145 96.67
## [6.305,6.969) 5 0.03 3.33 150 100.00
print("*************************************")
## [1] "*************************************"
print("Tabla de Frecuencias (3) Regla Sturges")
## [1] "Tabla de Frecuencias (3) Regla Sturges"
tablaR3=fdt(data$Petal.Length, breaks = "Sturges", right = F)
tablaR3
## Class limits f rf rf(%) cf cf(%)
## [0.99,1.654) 44 0.29 29.33 44 29.33
## [1.654,2.319) 6 0.04 4.00 50 33.33
## [2.319,2.983) 0 0.00 0.00 50 33.33
## [2.983,3.647) 6 0.04 4.00 56 37.33
## [3.647,4.312) 19 0.13 12.67 75 50.00
## [4.312,4.976) 29 0.19 19.33 104 69.33
## [4.976,5.64) 27 0.18 18.00 131 87.33
## [5.64,6.305) 14 0.09 9.33 145 96.67
## [6.305,6.969) 5 0.03 3.33 150 100.00
Obs: Observe que existe una diferencia por precisión entre las Tablas
de Frecuencias obtenida por los comandos hist vs fdt.
Tema 7. Tabla de frecuencia para variable cuantitativa
Elabore una tabla de frecuencias para la variable longitud de pétalos. Considere 5
intervalos simétricos.
x=range(data$Petal.Length) #rango x[1] es el mínimo, x[2] el máximo
k=5 #cantidad de intervalos de clases
amplitud=(x[2]-x[1])/k #amplitud
amplitud
## [1] 1.18
limites=seq(from=x[1], to=x[2], by=amplitud) #secuencia de los
límites de cada intervalo
limites
## [1] 1.00 2.18 3.36 4.54 5.72 6.90
library(agricolae)
tablaR=table.freq(hist(data$Petal.Length, breaks = limites,
include.lowest = T, right = T, plot = F))
tablaR
## Lower Upper Main Frequency Percentage CF CPF
## 1 1.00 2.18 1.59 50 33.3 50 33.3
## 2 2.18 3.36 2.77 3 2.0 53 35.3
## 3 3.36 4.54 3.95 34 22.7 87 58.0
## 4 4.54 5.72 5.13 47 31.3 134 89.3
## 5 5.72 6.90 6.31 16 10.7 150 100.0
Tema 8. Tabla de frecuencia para variable cuantitativa
Elabore una tabla de frecuencias para la variable ancho de pétalos.
Solución:
data$Petal.Width
n = nclass.Sturges(data$Petal.Width)
g = range(data$Petal.Width)
amplitud2 = (g[2]-g[1])/n
limites1 = seq(from =g [1], to = g[2], by= amplitud2)
library(agricolae)
tabla_tema8 = table.freq(hist(data$Petal.Width, breaks = limites1,
include.lowest = T, right = F, plot = F))
tabla_tema8
> tabla_tema8
Lower Upper Main Frequency Percentage CF CPF
1 0.1000000 0.3666667 0.2333333 41 27.3 41 27.3
2 0.3666667 0.6333333 0.5000000 9 6.0 50 33.3
3 0.6333333 0.9000000 0.7666667 0 0.0 50 33.3
4 0.9000000 1.1666667 1.0333333 10 6.7 60 40.0
5 1.1666667 1.4333333 1.3000000 26 17.3 86 57.3
6 1.4333333 1.7000000 1.5666667 16 10.7 102 68.0
7 1.7000000 1.9666667 1.8333333 19 12.7 121 80.7
8 1.9666667 2.2333333 2.1000000 15 10.0 136 90.7
9 2.2333333 2.5000000 2.3666667 14 9.3 150 100.0
Tema 9. Tabla de frecuencia para variable cuantitativa
Elabore una tabla de frecuencias para la variable longitud de sépalo. Considerando 6
intervalos simétricos.
Solución:
g1 = range(data$Sepal.Length)
n1 = 6
amplitudes = (g1[2]-g1[1])/n1
limi = seq(from =g1[1], to = g1[2], by= amplitudes)
library(agricolae)
tabla_tema9 = table.freq(hist(data$Sepal.Length, breaks =limi,
include.lowest = T, right = T, plot = F))
tabla_tema9
Lower Upper Main Frequency Percentage CF CPF
1 4.3 4.9 4.6 22 14.7 22 14.7
2 4.9 5.5 5.2 37 24.7 59 39.3
3 5.5 6.1 5.8 36 24.0 95 63.3
4 6.1 6.7 6.4 35 23.3 130 86.7
5 6.7 7.3 7.0 13 8.7 143 95.3
6 7.3 7.9 7.6 7 4.7 150 100.0
Tema 10. Histograma y polígono de frecuencia
Elabore un histograma y polígono de frecuencia absoluta acumulada asociado a la
variable de longitud de sépalos.
Comando:
hist(x, breaks = “Sturges”) #histograma utilizando el número de clases según Sturges
plot(dist, type=“cfh”) #histograma de frecuencias absoluta acumulada, dist es un
objeto tabla de frecuenca
plot(dist, type=“cfp”) #polígono de frecuencias acumulada, dist es un objeto tabla
frecuencia
fdt(data$Sepal.Length,start=4.3,h=0.72,end=7.9) #crear intervalos acorde a un inicio,
fin y amplitud (h)
Solución:
library(fdth)
dist=fdt(data$Sepal.Length, breaks="Sturges")
hist(data$Sepal.Length, breaks = "Sturges")
#histograma frecuencia relativas (probability Density) se configura
freq=F
hist(data$Sepal.Length, breaks = "Sturges", freq = FALSE)
#curva de la normal
lines(density(data$Sepal.Length), col="blue", lwd=3) # dibujamos la
distribución normal empírica con los datos que tenemos
lines(density(data$Sepal.Length, adjust=2), col="red", lwd=3, lty=2)
#suavizar la curva con adjust entre 1 a 5
abline(v=mean(data$Sepal.Length), lwd=2, lty=3, col="darkblue")
#línea vertical en el valor pemido(promedio)
plot(dist, type="cfh")
plot(dist, type="cfp")
x=range(data$Sepal.Length)
k=(x[2]-x[1])/5
aux=fdt(data$Sepal.Length,start=4.3,h=k,end=7.9) #h=0.72 crea 5
intervalos
plot(aux,type="cfp",xlab="Sépalo longitud",ylab="Frecuencia absoluta
acumulada")
Tema 11. Polígono de frecuencia y Ojiva (segunda forma)
Elabore un polígono de frecuencia y la ojiva asociado a la variable de longitud de
sépalos.
Comandos:
plot(x,y, main="“, xlab=”“, ylab=”") #plotea el punto (x,y), los parámetros main para
especificar título de gráfio, xlab etiqueta eje x, y ylab etiqueta eje y.
sum(x) #suma todos los datos del vector x
cumsum(x) #suma acumulada hasta cada posición del elemento en x, suma acumulada
(Xi)=X1+X2+…+Xi-1
Solución:
tabla=hist(data$Sepal.Length, breaks="Sturges", plot=F)
plot(tabla$mids,tabla$counts, main="Poligono de frecuencia absoluta",
xlab = "Marca de clase")
lines(tabla$mids,tabla$counts, type="l")
plot(tabla$mids,cumsum(tabla$counts), main="Ojiva de frecuencia
absoluta", xlab = "Marca de clase")
lines(tabla$mids,cumsum(tabla$counts), type="l")
plot(tabla$mids,tabla$counts/sum(tabla$counts), main="Poligono de
frecuencia relativa", xlab = "Marca de clase")
lines(tabla$mids,tabla$counts/sum(tabla$counts), type="l")
plot(tabla$mids,cumsum(tabla$counts)/sum(tabla$counts), main="Ojiva de
frecuencia relativa", xlab = "Marca de clase")
lines(tabla$mids,cumsum(tabla$counts)/sum(tabla$counts), type="l")
Tema 12. Resumen
Considerando los datos de data$Sepal.width, realice:
a) Tabla de frecuencias considerando 5 intervalos simétricos
data$Sepal.Width
g2 = range(data$Sepal.Width)
n2 = 5
amplitud4= (g2[2]-g2[1])/n2
limites3 = seq(from =g2[1], to = g2[2], by= amplitud4)
library(fdth)
t_tema12 = table.freq(hist(data$Sepal.Width, breaks = limites3,
include.lowest = T, right = F, plot = F))
t_tema12
> t_tema12
Lower Upper Main Frequency Percentage CF CPF
1 2.00 2.48 2.24 11 7.3 11 7.3
2 2.48 2.96 2.72 46 30.7 57 38.0
3 2.96 3.44 3.20 68 45.3 125 83.3
4 3.44 3.92 3.68 21 14.0 146 97.3
5 3.92 4.40 4.16 4 2.7 150 100.0
b) Histogramas
#Histograma con frecuencia absoluta
library(fdth)
dist=fdt(data$Sepal.Width, breaks="Sturges")
hist(data$Sepal.Width, breaks="Sturges")
#histograma con frecuencia relativa
hist(data$Sepal.Width, breaks="Sturges", freq = F)
c) Polígono de frecuencia
#Polígono de frecuencia absoluta
tabla1=hist(data$Sepal.Width, breaks="Sturges", plot=F)
plot(tabla1$mids,tabla1$counts, main="Poligono de frecuencia
absoluta", xlab = "Marca de clase")
lines(tabla1$mids,tabla1$counts, type="l")
#Polígono de frecuencia relativa
plot(tabla1$mids,tabla1$counts/sum(tabla1$counts), main="Poligono de
frecuencia relativa", xlab = "Marca de clase")
lines(tabla1$mids,tabla1$counts/sum(tabla1$counts), type="l")
d) Ovija
#Ovija de frecuencia absoluta
plot(tabla1$mids,cumsum(tabla1$counts), main="Ojiva de frecuencia
absoluta", xlab = "Marca de clase")
lines(tabla1$mids,cumsum(tabla1$counts), type="l")
#Ovija de frecuencia relativa
plot(tabla1$mids,cumsum(tabla1$counts)/sum(tabla1$counts), main="Ojiva
de frecuencia relativa", xlab = "Marca de clase")
lines(tabla1$mids,cumsum(tabla1$counts)/sum(tabla1$counts), type="l")