Relación IHL–Diámetro Nominal mediante Ajuste de Modelo Potencial

# CALIBRACIÓN DE IHL vs DIÁMETRO NOMINAL

library(ggplot2)

# 1. Datos experimentales
d1 <- c(1.70, 1.27, 0.635, 0.475)
d2 <- c(1.27, 0.635, 0.475, 0.335)

IHL <- c(59.47, 13.37, 2.20, 1.10)

# 2. Cálculo del diámetro nominal
dN <- ((d1^3 + d2^3)/2)^(1/3)

# 3. Data frame
datos <- data.frame(dN, IHL)

# Mostrar tabla de datos
print(round(datos, 4))
##       dN   IHL
## 1 1.5155 59.47
## 2 1.0484 13.37
## 3 0.5663  2.20
## 4 0.4168  1.10
# 4. Ajuste del modelo potencial
modelo <- lm(log(IHL) ~ log(dN), data = datos)

K <- exp(coef(modelo)[1])
alpha <- coef(modelo)[2]
R2 <- summary(modelo)$r.squared

# 5. Resultados: ecuación de calibración

cat(sprintf("IHL = %.4f · dN^(%.4f)\n", K, alpha))
## IHL = 14.0618 · dN^(3.0702)
cat(sprintf("R² = %.4f\n\n", R2))
## R² = 0.9901
# 6. Curva ajustada
x <- seq(min(dN)*0.9, max(dN)*1.1, length.out = 300)
y <- K * x^alpha
curva <- data.frame(x, y)

# 7. Texto de la ecuación
texto <- paste0(
  "IHL = ", round(K,3),
  "·d^", round(alpha,4),
  "\nR² = ", round(R2,4)
)

# 8. Gráfico
ggplot(datos, aes(x = dN, y = IHL)) +

  geom_point(
    colour = "#1F77B4",
    size = 4,
    shape = 18
  ) +

  geom_line(
    data = curva,
    aes(x, y),
    colour = "#D62728",
    linewidth = 1.3
  ) +

  scale_x_log10(
    breaks = c(0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6)
  ) +

  scale_y_log10(
    breaks = c(1, 2, 5, 10, 20, 40, 60)
  ) +

  annotate(
    "label",
    x = 0.5,
    y = 5,
    label = texto,
    fill = "white",
    colour = "black",
    size = 4.5
  ) +

  labs(
    title = "IHL vs Diámetro nominal (cm)",
    x = "Diámetro nominal (cm)",
    y = "IHL (g)"
  ) +

  theme_bw(base_size = 14) +

  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    axis.title = element_text(face = "bold"),
    panel.grid.major = element_line(colour = "grey80"),
    panel.grid.minor = element_line(colour = "grey92")
  )

# 7. Cálculo de S²(FSE)

ML <- c(100000000, 6000, 6000, 500, 500)
MS <- c(6000, 6000, 500, 500, 60)
dN_FSE <- c(1.70, 0.20, 0.20, 0.0104, 0.0104)

etapas <- c(
  "Muestreo primario y cuarteo",
  "Trituración",
  "División",
  "Pulverización",
  "Selección de la muestra analítica"
)

S2_FSE <- 11.493 * dN_FSE^3.0976 * ((1/MS) - (1/ML))

resultado_FSE <- data.frame(
  Etapa = etapas,
  dN_cm = dN_FSE,
  Masa_lote_g = ML,
  Masa_muestra_g = MS,
  S2_FSE = signif(S2_FSE, 6)
)

print(resultado_FSE)
##                               Etapa  dN_cm Masa_lote_g Masa_muestra_g
## 1       Muestreo primario y cuarteo 1.7000       1e+08           6000
## 2                       Trituración 0.2000       6e+03           6000
## 3                          División 0.2000       6e+03            500
## 4                     Pulverización 0.0104       5e+02            500
## 5 Selección de la muestra analítica 0.0104       5e+02             60
##        S2_FSE
## 1 9.91048e-03
## 2 0.00000e+00
## 3 1.44061e-04
## 4 0.00000e+00
## 5 1.21430e-07