data(iris)
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# las flores de iris por su nombre representan la esperanza y sabiduría y acá realizamos un estudio exploratorio de datos para tres especies de ellas: La setosa, la versicolor y la virginica, para irnos familiarizando y aprendiendo a realizar análisis con R Studio para identificar patrones. La base de datos iris es del año 1936 y el responsable de su recolección es Fisher. Se trata de un estudio exploratorio ´para tres especies de las señaladas flores según el ancho y largo de sus sépalos y pétalos, para un total de 150 filas y 5 columnas.
if (!dir.exists("img")) {
dir.create("img")
}
## Iris significa "arcoíris" en griego.
### El nombre se asocia con una diosa que usaba el arcoíris para viajar entre el cielo y la tierra, llevando mensajes divinos y conectando el mundo de los dioses con el de los humanos.
#Estadisticas Descriptivas básicas
desc.est.iris = aggregate(iris[, c(1:4)], by = list(Tipo = iris$Species), FUN = function(x) {
c(mean = mean(x, na.rm = TRUE), sd = sd(x, na.rm = TRUE), max = min(x, na.rm = TRUE),
min = min(x, na.rm = TRUE), n = length(na.omit(x)), missing = length(x) -
length(na.omit(x)))
}, simplify = TRUE)
desc.est.iris
## Tipo Sepal.Length.mean Sepal.Length.sd Sepal.Length.max
## 1 setosa 5.0060000 0.3524897 4.3000000
## 2 versicolor 5.9360000 0.5161711 4.9000000
## 3 virginica 6.5880000 0.6358796 4.9000000
## Sepal.Length.min Sepal.Length.n Sepal.Length.missing Sepal.Width.mean
## 1 4.3000000 50.0000000 0.0000000 3.4280000
## 2 4.9000000 50.0000000 0.0000000 2.7700000
## 3 4.9000000 50.0000000 0.0000000 2.9740000
## Sepal.Width.sd Sepal.Width.max Sepal.Width.min Sepal.Width.n
## 1 0.3790644 2.3000000 2.3000000 50.0000000
## 2 0.3137983 2.0000000 2.0000000 50.0000000
## 3 0.3224966 2.2000000 2.2000000 50.0000000
## Sepal.Width.missing Petal.Length.mean Petal.Length.sd Petal.Length.max
## 1 0.0000000 1.4620000 0.1736640 1.0000000
## 2 0.0000000 4.2600000 0.4699110 3.0000000
## 3 0.0000000 5.5520000 0.5518947 4.5000000
## Petal.Length.min Petal.Length.n Petal.Length.missing Petal.Width.mean
## 1 1.0000000 50.0000000 0.0000000 0.2460000
## 2 3.0000000 50.0000000 0.0000000 1.3260000
## 3 4.5000000 50.0000000 0.0000000 2.0260000
## Petal.Width.sd Petal.Width.max Petal.Width.min Petal.Width.n
## 1 0.1053856 0.1000000 0.1000000 50.0000000
## 2 0.1977527 1.0000000 1.0000000 50.0000000
## 3 0.2746501 1.4000000 1.4000000 50.0000000
## Petal.Width.missing
## 1 0.0000000
## 2 0.0000000
## 3 0.0000000
## Tipo Sepal.Length.mean Sepal.Length.sd Sepal.Length.max
## 1 setosa 5.0060 0.3525 4.3000
## 2 versicolor 5.9360 0.5162 4.9000
## 3 virginica 6.5880 0.6359 4.9000
## Sepal.Length.min Sepal.Length.n Sepal.Length.missing Sepal.Width.mean
## 1 4.3000 50.0000 0.0000 3.4280
## 2 4.9000 50.0000 0.0000 2.7700
## 3 4.9000 50.0000 0.0000 2.9740
## Sepal.Width.sd Sepal.Width.max Sepal.Width.min Sepal.Width.n
## 1 0.3791 2.3000 2.3000 50.0000
## 2 0.3138 2.0000 2.0000 50.0000
## 3 0.3225 2.2000 2.2000 50.0000
## Sepal.Width.missing Petal.Length.mean Petal.Length.sd Petal.Length.max
## 1 0.0000 1.4620 0.1737 1.0000
## 2 0.0000 4.2600 0.4699 3.0000
## 3 0.0000 5.5520 0.5519 4.5000
## Petal.Length.min Petal.Length.n Petal.Length.missing Petal.Width.mean
## 1 1.0000 50.0000 0.0000 0.2460
## 2 3.0000 50.0000 0.0000 1.3260
## 3 4.5000 50.0000 0.0000 2.0260
## Petal.Width.sd Petal.Width.max Petal.Width.min Petal.Width.n
## 1 0.1054 0.1000 0.1000 50.0000
## 2 0.1978 1.0000 1.0000 50.0000
## 3 0.2747 1.4000 1.4000 50.0000
## Petal.Width.missing
## 1 0.0000
## 2 0.0000
## 3 0.0000
# par(mfrow=c(2,2))
###Las estadisticas descritivas nos permiten evaluar las variables que se consideran en un estudio y establecer conclusiones que nos ayudan a tomar determinadas decisiones seg{un sean los objetivos que previamente hayan sido considerados al realizar la investigación empleando metodos estadisticos. Así por ejemplo, conforme a los resultados obtenidos tenemos el largo del sépalo de la virginica es mayor a la de las iris versicolor y la setosa respectivamente. Entre esta dos últimas para dicha variable tenemos que la setosa es más pequeña. Dichos patrones, al evaluar la desviación estándar nos indica que el tamaño entre las vetosas difiere menos que el de las versicolor y las virginicas respectivamente; encontrándose adicionalmente que la mayor variación la presentan las virginicas.
#Boxplot
for (k in c(1:4)) {
boxplot(iris[, k] ~ iris$Species, main = paste(names(iris)[k + 1], " by Species"))
}
## Los boxplots nos permiten visualizar la distribución de las variables numéricas (longitud y ancho de sépalos y pétalos) para cada especie de flor, analizando la mediana (línea central de la caja), el rango intercuartílico (la caja misma), la dispersión (longitud de los bigotes) y los valores atípicos (puntos fuera de los bigotes). Es decir, nos facilita compara las medianas y la dispersión entre las especies para entender cómo se diferencian en sus características físicas.
### Del analisis de los boxplots resultantes tenemos que los pétalos de las iris setosas son más anchos, más no así sus sépalos. En consecuencia, la distinción de este patrón ayudaría por ejemplo, a vendedores y compradores de flores, a identificar una iris setosa de una virginica.
# par(mfrow=c(1,1))
cor(iris[, 1:4])
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length 1.0000000 -0.1175698 0.8717538 0.8179411
## Sepal.Width -0.1175698 1.0000000 -0.4284401 -0.3661259
## Petal.Length 0.8717538 -0.4284401 1.0000000 0.9628654
## Petal.Width 0.8179411 -0.3661259 0.9628654 1.0000000
pairs(iris[1:4], main = "Flores de Iris: Sabiduría y Esperanza -- 3 species", pch = 21, bg = c("red",
"green3", "blue")[unclass(iris$Species)])
panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...) {
usr <- par("usr")
on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
r <- abs(cor(x, y))
txt <- format(c(r, 0.123456789), digits = digits)[1]
txt <- paste(prefix, txt, sep = "")
if (missing(cex.cor))
cex.cor <- 0.8/strwidth(txt)
text(0.5, 0.5, txt, cex = cex.cor * r)
}
panel.hist <- function(x, ...) {
usr <- par("usr")
on.exit(par(usr))
par(usr = c(usr[1:2], 0, 1.5))
h <- hist(x, plot = FALSE)
breaks <- h$breaks
nB <- length(breaks)
y <- h$counts
y <- y/max(y)
rect(breaks[-nB], 0, breaks[-1], y, col = "cyan", ...)
}
pairs(iris[, 1:4], lower.panel = panel.smooth, upper.panel = panel.cor, diag.panel = panel.hist,
pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter
#Conclusiones
## Este ejercicio debe replicarse tantas veces como sea necesario e incorporando, según avanzemos en el estudio de la estadistica y la computación, nuevos elementos para producir markdown tejiendo puntos a otros tipos de archivos, porque la experticia en el análisis de datos se obtiene de la práctica de los conocimientos teóricos.
# Referencias
# Acerca del conjunto de datos de Fisher's Iris. https://www.angela1c.com/projects/iris_project/the-iris-dataset/
# Clasificación Conjunto de datos Iris. Regresión Logística. https://www.kaggle.com/code/joeportilla/clasificaci-n-dataset-iris-regresi-n-log-stica
# Capítulo 1: Introducción a la programación R: el conjunto de datos de la flor del iris.https://gexijin.github.io/learnR/step-into-r-programmingthe-iris-flower-dataset.html
```