Estudiante: Johann Falkao Gómez Campo (1103743226)
URL en RPubs: https://rpubs.com/Johann_2008/1461633 /Actividad_Evaluativa_1er_50
°Dataset CSV es un conjunto de datos estructurados guardado en un archivo de texto plano bajo el formato Comma-Separated Values (Valores Separados por Comas), donde cada línea representa una fila de la tabla y cada columna se separa mediante una coma o punto y coma. Es el formato estándar y universal en ciencia de datos y análisis de información gracias a su ligereza, simplicidad y facilidad para ser importado y procesado en software como Excel, bases de datos o lenguajes de programación como Python y R.
°Dataset CSV sobre acero es un archivo de texto plano que organiza datos de la industria siderúrgica o la ciencia de materiales en una estructura tabular, separando cada celda con comas o puntos y comas; comúnmente incluye variables como la composición química (porcentajes de carbono o cromo), propiedades mecánicas (resistencia a la tracción y dureza), registro de defectos superficiales en láminas o indicadores de consumo energético en su fabricación, lo que permite importarlo fácilmente en programas como Excel o entornos de programación como Python y R para realizar análisis cuantitativos o entrenar modelos de aprendizaje automático.
acero <- read.csv("acero (1).csv",dec = ",")
acero
# Muestra la estructura del data frame
str(acero)
## 'data.frame': 117 obs. of 20 variables:
## $ consumo : num 135.3 84.1 131.6 90.5 120 ...
## $ pr.tbc : int 6840 443 7270 5031 9365 9281 3223 10490 7394 8654 ...
## $ pr.cc : int 830 903 572 694 1054 1003 1118 1077 1204 851 ...
## $ pr.ca : int 0 58 36 122 157 172 0 179 167 0 ...
## $ pr.galv1 : int 579 611 982 896 403 605 643 737 580 828 ...
## $ pr.galv2 : int 1401 1636 1963 1568 1480 1525 1424 1333 934 1326 ...
## $ pr.pint : int 0 717 243 0 0 473 732 93 247 607 ...
## $ linea : chr "A" "A" "A" "A" ...
## $ hora : chr "1º" "2º" "3º" "4º" ...
## $ temperatura: chr "Alta" "Alta" "Baja" "Baja" ...
## $ averias : chr "Si" "No" "No" "No" ...
## $ naverias : int 1 0 0 0 0 1 0 0 0 3 ...
## $ sistema : chr "OFF" "OFF" "OFF" "ON" ...
## $ ProdTotal : int 11266 7251 11066 8311 12459 13059 8555 18253 11697 13194 ...
## $ NOx : num 0.49 0.0725 1.49 1.715 0.465 ...
## $ CO : num 3.54 2.9 5.01 2.16 4.84 ...
## $ COV : num 0.545 0.425 0.69 0.36 0.662 ...
## $ SO2 : num 0.038 0.047 0.062 0.066 0.086 0.056 0.07 0.103 0.058 0.066 ...
## $ CO2 : num 101.5 63.6 98.8 70.2 88.5 ...
## $ N2O : num 6.35 2.23 5.99 3.66 6.06 6.15 7.75 9.09 8.69 5 ...
# mostrando la variable consumo y la variable de producción total
acero$consumo
## [1] 135.31 84.08 131.62 90.46 120.04 153.68 99.09 226.38 140.07 161.22
## [11] 135.92 83.84 57.84 102.66 66.18 61.16 99.37 82.80 92.29 95.57
## [21] 149.24 131.95 87.34 123.58 143.07 104.00 130.08 141.55 33.18 83.63
## [31] 147.88 87.29 83.18 76.41 66.71 197.65 124.09 99.36 54.03 90.13
## [41] 160.49 128.62 154.28 125.91 115.92 120.04 66.39 104.76 193.44 191.32
## [51] 63.81 135.10 167.76 49.77 19.07 38.39 163.58 197.77 141.82 39.72
## [61] 17.50 39.38 201.88 224.51 186.18 163.53 182.48 175.06 161.52 127.07
## [71] 245.74 193.15 137.47 165.17 131.50 220.96 179.38 143.82 85.79 165.36
## [81] 194.92 191.02 156.03 234.39 221.26 68.30 173.10 290.72 250.73 190.64
## [91] 180.44 200.75 126.06 165.56 97.94 156.41 136.05 146.18 163.15 185.71
## [101] 126.67 110.45 131.95 149.88 187.36 246.54 222.88 191.01 195.61 160.87
## [111] 183.26 184.70 113.75 105.06 168.88 195.61 213.23
acero$ProdTotal
## [1] 11266 7251 11066 8311 12459 13059 8555 18253 11697 13194 11279 7661
## [13] 9540 11425 6647 5574 9247 9023 11525 12434 12361 10964 7867 10326
## [25] 11860 9103 10785 11749 3384 7277 12195 8186 8362 7413 6033 16048
## [37] 10355 8943 4994 8424 13198 10729 12723 10591 9927 10081 6455 8882
## [49] 15746 15562 5785 11282 13718 5667 2300 3870 13421 16098 11734 3850
## [61] 2187 3879 16387 18117 15159 13466 14931 14311 13225 10656 19783 15738
## [73] 11525 13528 11968 17776 14648 12017 7482 13531 15817 15574 12852 18892
## [85] 17803 6075 14146 23202 20111 15540 14747 16279 10501 13594 8349 12889
## [97] 11324 12073 13588 15137 10615 10166 11026 12407 15188 19798 17984 15511
## [109] 15916 13176 14908 14998 11322 8939 13845 15906 17247
import pandas as pd import numpy as np
tipo_riego = [“Goteo”] * 60 + [“Aspersión”] * 40 estres_hidrico = [“Bajo”] * 40 + [“Medio”] * 15 + [“Alto”] * 5 + [“Bajo”] * 10 + [“Medio”] * 20 + [“Alto”] * 10
df = pd.DataFrame({“tipo_riego”: tipo_riego, “estres_hidrico”: estres_hidrico})
tabla_absoluta = pd.crosstab(df[‘tipo_riego’], df[‘estres_hidrico’]) print(“Tabla absoluta:”) print(tabla_absoluta)
tabla_marginales = pd.crosstab(df[‘tipo_riego’], df[‘estres_hidrico’], margins=True, margins_name=“Suma”) print(“marginales:”) print(tabla_marginales)
tabla_proporciones = tabla_absoluta / len(df) print(“proporciones:”) print(tabla_proporciones)
p_asp_dado_alto = tabla_absoluta.loc[‘Aspersión’, ‘Alto’] / tabla_marginales.loc[‘Suma’, ‘Alto’] print(f”(Aspersión | Alto) = {tabla_absoluta.loc[‘Aspersión’, ‘Alto’]} / {tabla_marginales.loc[‘Suma’, ‘Alto’]} = {p_asp_dado_alto:.4f}“)
# Datos
tipo_riego <- c(rep("Goteo", 60), rep("Aspersión", 40))
estres_hidrico <- c(rep("Bajo", 40), rep("Medio", 15), rep("Alto", 5),
rep("Bajo", 10), rep("Medio", 20), rep("Alto", 10))
# Tabla de frecuencias absolutas
tabla_absoluta <- table(tipo_riego, estres_hidrico)
print(tabla_absoluta)
## estres_hidrico
## tipo_riego Alto Bajo Medio
## Aspersión 10 10 20
## Goteo 5 40 15
tabla_marginales <- addmargins(tabla_absoluta)
print(tabla_marginales)
## estres_hidrico
## tipo_riego Alto Bajo Medio Sum
## Aspersión 10 10 20 40
## Goteo 5 40 15 60
## Sum 15 50 35 100
tabla_proporciones <- prop.table(tabla_absoluta)
print(tabla_proporciones)
## estres_hidrico
## tipo_riego Alto Bajo Medio
## Aspersión 0.10 0.10 0.20
## Goteo 0.05 0.40 0.15
El paquete carData (que acompaña al libro An R Companion to Applied Regression de John Fox y Sanford Weisberg) incluye el dataset Soils, el cual proviene de un estudio edafológico clásico realizado para analizar las propiedades químicas del suelo en función de la profundidad y la topografía.
Las variables están divididas entre factores de diseño de experimento y mediciones físico-químicas del suelo:
El dataset Soils es ampliamente utilizado en la enseñanza de la estadística multivariada por tener múltiples variables respuesta fuertemente correlacionadas:
Permite evaluar si el tipo de contorno (Contour) o la profundidad (Depth) afectan simultáneamente el perfil de nutrientes (\(pH, Ca, Mg, K, Na\)).
Útil para reducir la dimensionalidad de los nutrientes del suelo e identificar patrones o gradientes de fertilidad y salinidad.
Sirve para clasificar una muestra desconocida dentro de un tipo de contorno o profundidad según sus análisis de laboratorio.
Para cargar, explorar y analizar este dataset en R Markdown o RStudio:
# 1. Cargar el paquete y los datos
library(carData)
data("Soils")
# 2. Exploración estructural básica
str(Soils)
## 'data.frame': 48 obs. of 14 variables:
## $ Group : Factor w/ 12 levels "1","2","3","4",..: 1 1 1 1 2 2 2 2 3 3 ...
## $ Contour: Factor w/ 3 levels "Depression","Slope",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ Depth : Factor w/ 4 levels "0-10","10-30",..: 1 1 1 1 2 2 2 2 3 3 ...
## $ Gp : Factor w/ 12 levels "D0","D1","D3",..: 9 9 9 9 10 10 10 10 11 11 ...
## $ Block : Factor w/ 4 levels "1","2","3","4": 1 2 3 4 1 2 3 4 1 2 ...
## $ pH : num 5.4 5.65 5.14 5.14 5.14 5.1 4.7 4.46 4.37 4.39 ...
## $ N : num 0.188 0.165 0.26 0.169 0.164 0.094 0.1 0.112 0.112 0.058 ...
## $ Dens : num 0.92 1.04 0.95 1.1 1.12 1.22 1.52 1.47 1.07 1.54 ...
## $ P : int 215 208 300 248 174 129 117 170 121 115 ...
## $ Ca : num 16.4 12.2 13 11.9 14.2 ...
## $ Mg : num 7.65 5.15 5.68 7.88 8.12 ...
## $ K : num 0.72 0.71 0.68 1.09 0.7 0.81 0.39 0.7 0.74 0.77 ...
## $ Na : num 1.14 0.94 0.6 1.01 2.17 2.67 3.32 3.76 5.74 5.85 ...
## $ Conduc : num 1.09 1.35 1.41 1.64 1.85 3.18 4.16 5.14 5.73 6.45 ...
summary(Soils)
## Group Contour Depth Gp Block pH
## 1 : 4 Depression:16 0-10 :12 D0 : 4 1:12 Min. :3.740
## 2 : 4 Slope :16 10-30:12 D1 : 4 2:12 1st Qu.:4.058
## 3 : 4 Top :16 30-60:12 D3 : 4 3:12 Median :4.545
## 4 : 4 60-90:12 D6 : 4 4:12 Mean :4.669
## 5 : 4 S0 : 4 3rd Qu.:5.140
## 6 : 4 S1 : 4 Max. :6.670
## (Other):24 (Other):24
## N Dens P Ca
## Min. :0.03000 Min. :0.780 Min. : 79.0 Min. : 3.820
## 1st Qu.:0.05075 1st Qu.:1.127 1st Qu.:108.8 1st Qu.: 5.040
## Median :0.08450 Median :1.400 Median :131.0 Median : 7.305
## Mean :0.10194 Mean :1.316 Mean :166.2 Mean : 8.029
## 3rd Qu.:0.12925 3rd Qu.:1.502 3rd Qu.:214.2 3rd Qu.: 9.735
## Max. :0.29800 Max. :1.600 Max. :445.0 Max. :16.350
##
## Mg K Na Conduc
## Min. : 5.150 Min. :0.1400 Min. : 0.600 Min. : 0.670
## 1st Qu.: 7.537 1st Qu.:0.2750 1st Qu.: 2.545 1st Qu.: 2.790
## Median : 8.515 Median :0.4250 Median : 5.520 Median : 6.635
## Mean : 8.465 Mean :0.4662 Mean : 5.600 Mean : 6.589
## 3rd Qu.: 9.648 3rd Qu.:0.6425 3rd Qu.: 8.355 3rd Qu.: 9.852
## Max. :10.960 Max. :1.0900 Max. :11.040 Max. :13.320
##
# 3. Ejemplo de MANOVA
# Evaluar si la profundidad y la topografía afectan el Ca, Mg, K y Na
modelo_manova <- manova(cbind(Ca, Mg, K, Na) ~ Contour + Depth, data = Soils)
summary(modelo_manova)
## Df Pillai approx F num Df den Df Pr(>F)
## Contour 2 0.76489 6.1929 8 80 3.298e-06 ***
## Depth 3 1.36324 8.5371 12 123 1.304e-11 ***
## Residuals 42
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 4. Análisis de Componentes Principales (PCA)
pca_soils <- prcomp(Soils[, c("pH", "N", "Dens", "P", "Ca", "Mg", "K", "Na", "Conduc")], scale. = TRUE)
summary(pca_soils)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.5583 0.86034 0.73223 0.65704 0.57095 0.44175 0.37814
## Proportion of Variance 0.7272 0.08224 0.05957 0.04797 0.03622 0.02168 0.01589
## Cumulative Proportion 0.7272 0.80946 0.86903 0.91700 0.95322 0.97490 0.99079
## PC8 PC9
## Standard deviation 0.26026 0.12316
## Proportion of Variance 0.00753 0.00169
## Cumulative Proportion 0.99831 1.00000
biplot(pca_soils)
Un gráfico faceted con ggplot2 para comparar simultáneamente múltiples variables químicas (pH, Ca, Mg, K) según la profundidad y el contorno del terreno.
library(carData)
library(ggplot2)
library(tidyr)
data("Soils")
# Reestructurar datos a formato largo (long format)
soils_long <- pivot_longer(Soils,
cols = c("pH", "Ca", "Mg", "K"),
names_to = "Variable",
values_to = "Valor")
# Gráfico de líneas de perfil medio
ggplot(soils_long, aes(x = Depth, y = Valor, color = Contour, group = Contour)) +
stat_summary(fun = mean, geom = "line", linewidth = 1) +
stat_summary(fun = mean, geom = "point", size = 2) +
facet_wrap(~ Variable, scales = "free_y") +
theme_bw() +
labs(title = "Comportamiento de Nutrientes por Profundidad y Contorno",
x = "Profundidad (Depth)",
y = "Concentración / Valor",
color = "Topografía (Contour)")
Permite agrupar las muestras de suelo según su similitud química y física general sin tener en cuenta las etiquetas previas, evaluando si el suelo se agrupa de forma natural según el contorno o la profundidad.
library(carData)
data("Soils")
# Normalización de variables continuas
datos_num <- scale(Soils[, c("pH", "N", "Dens", "P", "Ca", "Mg", "K", "Na", "Conduc")])
# Matriz de distancias euclidianas
distancias <- dist(datos_num, method = "euclidean")
# Agrupamiento jerárquico usando el método de Ward
hc <- hclust(distancias, method = "ward.D2")
# Graficar el dendrograma con etiquetas de contorno
plot(hc, labels = Soils$Contour, main = "Dendrograma de Clustering del Suelo",
xlab = "Muestras (Etiquetadas por Contour)", sub = "", cex = 0.8)
# Cortar en 3 clusters principales
rect.hclust(hc, k = 3, border = "red")
Evalúa qué variables químicas contribuyen significativamente a explicar la variabilidad de la acidez/alcalinidad del suelo (pH).
library(carData)
data("Soils")
# Modelo de regresión lineal múltiple
modelo_ph <- lm(pH ~ Ca + Mg + K + Na + Conduc + N, data = Soils)
# Resumen del modelo (coeficientes, R^2 y p-valores)
summary(modelo_ph)
##
## Call:
## lm(formula = pH ~ Ca + Mg + K + Na + Conduc + N, data = Soils)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.57798 -0.23274 -0.04028 0.17803 1.26626
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.89457 0.58107 8.423 1.75e-10 ***
## Ca 0.14206 0.03793 3.746 0.000554 ***
## Mg -0.05409 0.04913 -1.101 0.277354
## K -0.51679 0.38999 -1.325 0.192464
## Na 0.16617 0.08209 2.024 0.049496 *
## Conduc -0.20811 0.07262 -2.866 0.006535 **
## N -2.22085 1.76153 -1.261 0.214526
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3669 on 41 degrees of freedom
## Multiple R-squared: 0.7398, Adjusted R-squared: 0.7018
## F-statistic: 19.43 on 6 and 41 DF, p-value: 1.408e-10
# Diagnóstico de residuos del modelo
par(mfrow = c(2, 2))
plot(modelo_ph)
par(mfrow = c(1, 1))
# 1. Definición de los vectores de datos
tipo_riego <- c(rep("Goteo", 60), rep("Aspersión", 40))
estres_hidrico <- c(rep("Bajo", 40), rep("Medio", 15), rep("Alto", 5),
rep("Bajo", 10), rep("Medio", 20), rep("Alto", 10))
# 2. Tabla de frecuencias absolutas
tabla_absoluta <- table(tipo_riego, estres_hidrico)
print("--- Tabla de Frecuencias Absolutas ---")
## [1] "--- Tabla de Frecuencias Absolutas ---"
print(tabla_absoluta)
## estres_hidrico
## tipo_riego Alto Bajo Medio
## Aspersión 10 10 20
## Goteo 5 40 15
# 3. Frecuencias marginales por filas y columnas
print("--- Frecuencias Marginales por Filas (Tipo de Riego) ---")
## [1] "--- Frecuencias Marginales por Filas (Tipo de Riego) ---"
print(margin.table(tabla_absoluta, margin = 1))
## tipo_riego
## Aspersión Goteo
## 40 60
print("--- Frecuencias Marginales por Columnas (Estrés Hídrico) ---")
## [1] "--- Frecuencias Marginales por Columnas (Estrés Hídrico) ---"
print(margin.table(tabla_absoluta, margin = 2))
## estres_hidrico
## Alto Bajo Medio
## 15 50 35
# 4. Tabla con marginales añadidas
tabla_marginales <- addmargins(tabla_absoluta)
print("--- Tabla General con Marginales ---")
## [1] "--- Tabla General con Marginales ---"
print(tabla_marginales)
## estres_hidrico
## tipo_riego Alto Bajo Medio Sum
## Aspersión 10 10 20 40
## Goteo 5 40 15 60
## Sum 15 50 35 100
# 5. Tabla de proporciones (frecuencias relativas)
tabla_proporciones <- prop.table(tabla_absoluta)
print("--- Tabla de Proporciones ---")
## [1] "--- Tabla de Proporciones ---"
print(tabla_proporciones)
## estres_hidrico
## tipo_riego Alto Bajo Medio
## Aspersión 0.10 0.10 0.20
## Goteo 0.05 0.40 0.15
# 6. Prueba de independencia Chi-cuadrado (chisq.test)
prueba_chi <- chisq.test(tabla_absoluta)
print("--- Prueba Chi-Cuadrado de Independencia ---")
## [1] "--- Prueba Chi-Cuadrado de Independencia ---"
install.packages("carData") # una sola vez
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
library(carData)
data(Soils)
str(Soils)
## 'data.frame': 48 obs. of 14 variables:
## $ Group : Factor w/ 12 levels "1","2","3","4",..: 1 1 1 1 2 2 2 2 3 3 ...
## $ Contour: Factor w/ 3 levels "Depression","Slope",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ Depth : Factor w/ 4 levels "0-10","10-30",..: 1 1 1 1 2 2 2 2 3 3 ...
## $ Gp : Factor w/ 12 levels "D0","D1","D3",..: 9 9 9 9 10 10 10 10 11 11 ...
## $ Block : Factor w/ 4 levels "1","2","3","4": 1 2 3 4 1 2 3 4 1 2 ...
## $ pH : num 5.4 5.65 5.14 5.14 5.14 5.1 4.7 4.46 4.37 4.39 ...
## $ N : num 0.188 0.165 0.26 0.169 0.164 0.094 0.1 0.112 0.112 0.058 ...
## $ Dens : num 0.92 1.04 0.95 1.1 1.12 1.22 1.52 1.47 1.07 1.54 ...
## $ P : int 215 208 300 248 174 129 117 170 121 115 ...
## $ Ca : num 16.4 12.2 13 11.9 14.2 ...
## $ Mg : num 7.65 5.15 5.68 7.88 8.12 ...
## $ K : num 0.72 0.71 0.68 1.09 0.7 0.81 0.39 0.7 0.74 0.77 ...
## $ Na : num 1.14 0.94 0.6 1.01 2.17 2.67 3.32 3.76 5.74 5.85 ...
## $ Conduc : num 1.09 1.35 1.41 1.64 1.85 3.18 4.16 5.14 5.73 6.45 ...
En cumplimiento con las directrices de integridad académica e ingeniería responsable, a continuación se detalla el uso de herramientas de Inteligencia Artificial Generativa durante la realización de esta actividad:
table(), margin.table(),
prop.table(), addmargins(),
chisq.test()) y sintaxis de visualización avanzada con
ggplot2.Soils.A través del trabajo realizado con el dataset
Soils del paquete carData,
logramos explorar a fondo cómo se comportan los componentes químicos y
físicos del suelo según la profundidad y la forma del terreno
(Contour, Depth, Block,
Group). Aplicando análisis de perfiles, modelos
multivariados, regresión lineal múltiple y clustering jerárquico,
identificamos patrones clave en la distribución de nutrientes y
entendimos qué elementos influyen directamente en la variación del \(pH\). En conclusión, este ejercicio
permitió transformar un conjunto de datos agronómicos complejos en
información clara y útil para orientar decisiones prácticas sobre el
manejo y la conservación del suelo.