R ofrece:
R cuenta con algunos datos integrados, por ejmeplo la base de datos mtcars.
Por ejemplo mtcarts cuenta con 32 observaciones Si dice factor es el nombre de las etiquetas
Para imprimir las primeras filas usamos head()
Conjunto de datos de la flor del iris
En 1936, Edgar Anderson recopiló datos para cuantificar las variaciones geográficas de las flores de iris . El conjunto de datos consta de 50 muestras de cada una de las tres subespecies ( iris setosa , iris virginica e iris versicolor ).
Se midieron cuatro características en centímetros (cm):
Usando summary() para resumen rápido
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Cálculo de medidas para la variable mpg (millas por galón)
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4
medidas <- data.frame(
Media = mean(mpg),
Mediana = median(mpg),
Moda = as.numeric(names(sort(table(mpg), decreasing = TRUE)[1])),
Mínimo = min(mpg),
Máximo = max(mpg)
)
print(medidas)## Media Mediana Moda Mínimo Máximo
## 1 20.09062 19.2 10.4 10.4 33.9
library(repmis)
source_data("https://github.com/hllinas/DatosPublicos/blob/main/Estudiantes.Rdata?raw=false")## Downloading data from: https://github.com/hllinas/DatosPublicos/blob/main/Estudiantes.Rdata?raw=false
## SHA-1 hash of the downloaded data file is:
## 6bf9d5a19779293538bd61d55d0662bdaf8100a1
## [1] "Estudiantes"
Ejemplo 1 Para crear un diagrama de barras, se necesita crear una tabla de frecuencias (con la función table) y luego aplicar la función barplot a esta tabla. El diagrama de barras es (observe que sale en escala de grises):
Sexo <- as.factor(datosCompleto$Sexo)
Fuma <- as.factor(datosCompleto$Fuma)
Cuentas1 <- table(Sexo) #A) Tabla de frecuencias no agrupadas para Sexo
barplot(Cuentas1, #B) Se aplica barplot a esa tabla
main="TITULO GENERAL", #C) Título principal
xlab="Eje X", #D) Tíulo del eje X
ylab="Eje Y", #E) Título del eje Y
legend = rownames(Cuentas1), #F) Mostrar las leyendas
ylim = c(0, 300) #G) Ajustar límites en eje Y
) #H) No olvidar cerrar el paréntesisEjemplo 2, “jugar” con algunas opciones gráficas, obtenemos:
Cuentas1 <- table(Sexo) #A) Tabla de frecuencias no agrupadas para Sexo
barplot(Cuentas1, #B) Se aplica barplot a esa tabla
main="TITULO GENERAL", #C) Título principal
xlab="Eje X", #D) Tíulo del eje X
ylab="Eje Y", #E) Título del eje Y
legend = rownames(Cuentas1), #F) Mostrar las leyendas
ylim = c(0, 300), #G) Ajustar límites en eje Y
col=c("pink","blue") #H) Colorear las barras
) #I) No olvidar cerrar el paréntesisEjemplo 3 (Distribución de Sexo dentro de cada nivel de Fuma)
La distribución de las personas según el género (variable 1=SEXO), dentro de cada grupo de los fumadores (Variable 2=FUMA), se puede visualizar en la tabla siguiente:
## Fuma
## Sexo No Si
## Femenino 116 95
## Masculino 109 80
El diagrama de barras apilado correspondiente es:
barplot(Cuentas2, #B) Se aplica barplot a esa tabla
main="Diagrama de barras", #C) Título principal
xlab="Fuma", #D) Tíulo del eje X
ylab="Frecuencias", #E) Título del eje Y
legend = rownames(Cuentas2), #F) Mostrar las leyendas
ylim = c(0, 300), #G) Ajustar límites en eje Y
col=c("pink","blue") #H) Colorear las barras
) #I) No olvidar cerrar el paréntesisEjemplo 4 la distribución de las personas fumadoras (variable 1=FUMA), dentro de cada grupo de género (Variable 2=SEXO), se puede visualizar en la tabla siguiente:
## Sexo
## Fuma Femenino Masculino
## No 116 109
## Si 95 80
El diagrama de barras apilado correspondiente es:
barplot(Cuentas3, #B) Se aplica barplot a esa tabla
main="Diagrama de barras", #C) Título principal
xlab="Sexo", #D) Tíulo del eje X
ylab="Frecuencias", #E) Título del eje Y
legend = rownames(Cuentas3), #F) Mostrar las leyendas
ylim = c(0, 300), #G) Ajustar límites en eje Y
col=c("yellow","brown") #H) Colorear las barras
) #I) No olvidar cerrar el paréntesisEjemplo 5, distribución de Sexo dentro de cada nivel de Fuma.
La distribución de las personas según el género (variable 1=SEXO), dentro de cada grupo de los fumadores (Variable 2=FUMA), se puede visualizar en la tabla siguiente:
## Fuma
## Sexo No Si
## Femenino 116 95
## Masculino 109 80
El diagrama de barras apilado correspondiente es:
barplot(Cuentas2, #B) Se aplica barplot a esa tabla
main="Diagrama de barras", #C) Título principal
xlab="Fuma", #D) Tíulo del eje X
ylab="Frecuencias", #E) Título del eje Y
legend = rownames(Cuentas2), #F) Mostrar las leyendas
ylim = c(0, 200), #G) Ajustar límites en eje Y
col=c("moccasin","mediumseagreen"), #H) Colorear las barras
beside=TRUE #I) Para agrupar las barras
) #J) No olvidar cerrar el paréntesisEjemplo 6, la distribución de las personas fumadoras (variable 1=FUMA), dentro de cada grupo de género (Variable 2=SEXO), se puede visualizar en la tabla siguiente:
## Sexo
## Fuma Femenino Masculino
## No 116 109
## Si 95 80
El diagrama de barras apilado correspondiente es:
barplot(Cuentas3, #B) Se aplica barplot a esa tabla
main="Diagrama de barras", #C) Título principal
xlab="Sexo", #D) Tíulo del eje X
ylab="Frecuencias", #E) Título del eje Y
legend = rownames(Cuentas3), #F) Mostrar las leyendas
ylim = c(0, 200), #G) Ajustar límites en eje Y
col=c("Indianred1","lightslateblue"), #H) Colorear las barras
beside=TRUE #I) Para agrupar las barras
) #J) No olvidar cerrar el paréntesisAhora añadimos los valores individuales en el eje x por medio de
rug(mpg)
hist(mpg, col = "darkgreen", xlab = "Millas por galón",ylab="Frecuencia", main ="Histograma de mpg")
rug(mpg)par(mfrow=c(1,2))
hist(mpg, col = "darkgreen", xlab = "Millas por galón",ylab="Frecuencia", main ="Histograma de mpg")
hist(mtcars$disp, col = "purple", xlab = "Pulgadas cúbicas",ylab="Frecuencia", main =" Desplazamiento")Se puede optar por una figura con una curva de densidad de Kernel Density. Para ello:
##
## Call:
## density.default(x = mtcars$disp)
##
## Data: mtcars$disp (32 obs.); Bandwidth 'bw' = 55.77
##
## x y
## Min. :-96.22 Min. :4.168e-06
## 1st Qu.: 87.67 1st Qu.:2.925e-04
## Median :271.55 Median :1.415e-03
## Mean :271.55 Mean :1.357e-03
## 3rd Qu.:455.43 3rd Qu.:2.158e-03
## Max. :639.32 Max. :3.099e-03
Esto sería algo parecido a una curva de probabilidad en función de una distribución de datos. No es un histograma de los datos brutos que hemos hecho antes.
Podemos añadir lo anterior a nuestro histograma. En este caso optaremos por una curva de distribución normal de la siguiente manera:
hist(mtcars$disp, prob = TRUE, main = "Histograma y curva normalidad", ylab = "Densidad",col="cyan2")
primera <- seq(min(mtcars$disp), max(mtcars$disp), length = 40)
segunda <- dnorm(primera, mean = mean(mtcars$disp), sd = sd(mtcars$disp))
lines(primera, segunda, col = "blue", lwd = 2)Y ahora añadimos una curva de densidad (parecido a lo que se ha hecho antes en una figura aislada). Para ello utilizamos lines:
hist(mtcars$disp, freq = FALSE, main = "Densidad", ylab = "Densidad",col="seagreen2")
lines(density(mtcars$disp), lwd = 2, col = 'purple4')Se puede combinar en el histograma un boxplot con los valores de nuestra variable. Para ello hacemos lo siguiente:
hist(mtcars$disp, probability = TRUE, ylab = "", xlab="Valores de la variable", main = "",
col = rgb(.4, .2, .1, alpha = 0.5), axes = FALSE)
axis(1) # Con esto añadimo sel eje horizontal
par(new = TRUE)
boxplot(mtcars$disp, horizontal = TRUE, axes = FALSE,
lwd = 2.5, col = rgb(0, 0, 0, alpha = 0.3))# Cálculo de medidas de dispersión
dispersion <- data.frame(
Varianza = var(mpg),
Desviación_Estándar = sd(mpg),
Rango = diff(range(mpg)),
IQR = IQR(mpg),
Coef_Variación = sd(mpg)/mean(mpg)*100
)
print(round(dispersion, 2))## Varianza Desviación_Estándar Rango IQR Coef_Variación
## 1 36.32 6.03 23.5 7.38 30
library(psych)
# Descripción estadística detallada
descripcion <- describe(mtcars[, c("mpg", "hp", "wt", "qsec")])
descripcion# Seleccionar columnas relevantes
descripcion_reducida <- data.frame(descripcion$n,descripcion$mean,descripcion$sd)
descripcion_reducidaplot(mtcars$mpg,mtcars$disp,
xlab = "Millas por galón",
ylab = "Desplazamiento (pulgadas cúbicas)",
main = "Dispersión" )plot(mpg ~ disp,data=mtcars,pch=16,
xlab = "Millas por galón",
ylab = "Desplazamiento (pulgadas cúbicas)",
main = "Dispersión")
abline(lm(mpg ~ disp,data=mtcars),col="red")par(mfrow=c(2,1))
boxplot(mtcars$mpg, horizontal = TRUE, col = "steelblue", main = "Boxplot e Histograma")
hist(mtcars$mpg, col = "steelblue", border = "white", main = "", ylab = "Frecuencia")boxplot(iris$Sepal.Length ~ iris$Species, col=c("red","blue","purple"),xlab = "Especies", ylab = "Longitudes de los sépalos (cm)",main="Boxplot")