CARGA DE DATOS
# Parametros generales del reporte.
# Cambia estos valores para reutilizar la estructura con otra variable positiva.
ruta_archivo <- "C:/Users/Martin/Desktop/Estadistica/CMDB_Data.csv"
columnas_posibles <- c("Fe_pct_AES_ST", "FE_pct_AES_ST")
nombre_variable <- "Hierro"
unidad_variable <- "%"
separador_csv <- ";"
decimal_csv <- "."
encoding_csv <- "latin1"
# Parametros del modelo y del reporte.
breaks_histograma <- 6
nivel_aceptacion_modelo <- 0.75
nivel_confianza_ic <- 0.87
# Preguntas de probabilidad.
n_nuevas_minas <- 50
probabilidad_inferior <- 0.25
probabilidad_superior <- 0.75
autor_tablas <- "Autor: Grupo 1"
library(dplyr)
library(gt)
datos <- read.csv(
ruta_archivo,
header = TRUE,
sep = separador_csv,
dec = decimal_csv,
fileEncoding = encoding_csv
)
columna_variable <- columnas_posibles[columnas_posibles %in% names(datos)][1]
if (is.na(columna_variable)) {
stop(paste("No se encontro ninguna de estas variables:", paste(columnas_posibles, collapse = ", ")))
}
# Verificacion inicial del set de datos.
str(datos)
## 'data.frame': 1366 obs. of 103 variables:
## $ ï..LAB_ID : chr "C355417" "C360759" "C360762" "C360763" ...
## $ PREVIOUS_LAB_ID1 : chr "" "" "" "" ...
## $ PREVIOUS_LAB_ID2 : chr "" "" "" "" ...
## $ PREVIOUS_LAB_ID3 : chr "" "" "" "" ...
## $ FIELD_ID : chr "RM0001" "RM0027" "RM0030" "RM0031" ...
## $ JOB_ID : chr "MRP11968" "MRP12307" "MRP12307" "MRP12307" ...
## $ PREVIOUS_JOB_ID1 : chr "" "" "" "" ...
## $ PREVIOUS_JOB_ID2 : chr "" "" "" "" ...
## $ PREVIOUS_JOB_ID3 : chr "" "" "" "" ...
## $ SUBMITTER : chr "Rare Metals Task" "Rare Metals Task" "Rare Metals Task" "Rare Metals Task" ...
## $ PROJECT_NAME : chr "Critical and Rare Metals" "Critical and Rare Metals" "Critical and Rare Metals" "Critical and Rare Metals" ...
## $ X0 : chr "30/6/2011" "31/8/2011" "31/8/2011" "31/8/2011" ...
## $ COLLECTION : chr "Mackay-Keck Ore Deposits Collection" "Mackay-Stanford Ore Deposits Collection" "Mackay-Stanford Ore Deposits Collection" "Mackay-Stanford Ore Deposits Collection" ...
## $ COLLECTION_ID : chr "PHNC08_39_1183" "OD21441" "OD22811" "OD25716" ...
## $ CONTINENT : chr "North America" "South America" "South America" "Africa" ...
## $ COUNTRY : chr "United States" "Chile" "Chile" "South Africa" ...
## $ STATE_PROVINCE : chr "Nevada" "Antofagasta" "Tarapacá" "Transvaal" ...
## $ COUNTY : chr "Lyon" "El Loa" "El Tamarugal" "" ...
## $ DISTRICT_NAME : chr "Yerington" "Chuquicamata" "Collahuasi/Quebrada Blanca" "" ...
## $ DEPOSIT_NAME : chr "Pumpkin Hollow" "" "" "" ...
## $ MINE_NAME : chr "Pumpkin Hollow" "Chuquicamata mine" "Collahuasi district" "" ...
## $ DISTRICT_NAME_COLLECT: chr "Yerington" "" "" "" ...
## $ DEPOSIT_NAME_COLLECT : chr "" "" "" "" ...
## $ MINE_NAME_COLLECT : chr "Pumpkin Hollow" "Chuquicamata" "Poduosa mine" "Messina Mines Ltd." ...
## $ LOCATE_DESC : chr "" "" "Level 25" "" ...
## $ LATITUDE : chr "38,94021" "-22,2871" "-21,0309" "-24,7" ...
## $ LONGITUDE : chr "-119,05178" "-68,8991" "-68,74951" "29,3" ...
## $ DATUM : chr "WGS84" "WGS84" "WGS84" "" ...
## $ LATITUDE_COLLECT : chr "38,92492" "22,28944" "" "" ...
## $ LONGITUDE_COLLECT : chr "-119,1071" "-68,90111" "" "" ...
## $ DATUM_COLLECT : chr "" "WGS84" "" "" ...
## $ COORDINATES_QUAL : chr "100 m" "0m" "" "" ...
## $ COORDINATES_SOURCE : chr "1) iTouchMap.com, approx, A. Orkild-Norton; 2) Mineral Resource Deposit Database Deposit ID 10174173, ore body, M. Granitto" "1) Mindat.org, approx, A. Orkild-Norton; 2) Open-File Report 2017-1079 ID 549, mine, M. Granitto" "1) No coordinates; 2) Mineral Resource Deposit Database Deposit ID 10057511, district, M. Granitto" "1) No coordinates; 2) Google Earth Pro, approx ctr of former province of Transvaal, M. Granitto" ...
## $ PRIMARY_CLASS : chr "rock" "rock" "rock" "rock" ...
## $ SYSTEM_TYPE : chr "IOA-IOCG" "Porphyry Cu-Mo-Au" "Porphyry Cu-Mo-Au" "IOA-IOCG" ...
## $ DEPOSIT_TYPE : chr "IOCG" "Supergene Cu" "Porphyry Cu" "IOCG" ...
## $ SAMPLE_DESC : chr "Nearly solid chalcopyrite mixed with small light brown irregular inclusions of unknown mineralogy; clouds of ma"| __truncated__ "Chalcocite-bronchatite-antlerite(?); highly microfractured igneous rock with green copper sulfates coating microfractures" "Bornite-chalcopyrite; mostly massive chalcopyrite with numerous inclusions of micro-chalcopyrite and widely sca"| __truncated__ "Massive chalcopyrite, IOCG in shear zone; mostly massive fine grain cuprite with widely distributed malachite t"| __truncated__ ...
## $ Al_pct_AES_ST : chr "0,33" "6,65" "0,46" "0,7" ...
## $ Ca_pct_AES_ST : chr "1,1" "0,4" "-0,1" "0,3" ...
## $ Fe_pct_AES_ST : chr "42,4" "0,25" "6,98" "27,8" ...
## $ K_pct_AES_ST : chr "-0,1" "6,1" "0,2" "-0,1" ...
## $ Mg_pct_AES_ST : chr "0,57" "0,1" "0,01" "0,33" ...
## $ Mn_pct_AES_ST : chr "0,02" "-0,01" "-0,01" "-0,01" ...
## $ P_pct_AES_ST : chr "-0,01" "0,01" "0,05" "0,01" ...
## $ S_pct_AES_ST : chr "" "" "" "" ...
## $ Si_pct_AES_ST : chr "" "" "" "" ...
## $ Ti_pct_AES_ST : chr "0,01" "0,11" "-0,01" "-0,01" ...
## $ F_pct_ISE_Fuse : chr "" "" "" "" ...
## $ Ag_ppm_MS_ST : chr "58" "6" "468" "16" ...
## $ As_ppm_MS_ST : chr "-30" "-30" "90" "-30" ...
## $ Au_ppm : chr "" "" "" "" ...
## $ Au_AM : chr "" "" "" "" ...
## $ B_ppm_AES_ST : int NA NA NA NA NA NA NA NA NA NA ...
## $ Ba_ppm_AES_ST : chr "-0,5" "924" "121" "174" ...
## $ Be_ppm_AES_ST : int -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 ...
## $ Bi_ppm_MS_ST : chr "1,5" "3,6" "190" "0,4" ...
## $ Cd_ppm_MS_ST : chr "3,6" "-0,2" "0,9" "-0,2" ...
## $ Ce_ppm_MS_ST : chr "0,4" "8,8" "16,3" "3,5" ...
## $ Co_ppm_MS_ST : chr "209" "-0,5" "1,3" "44,8" ...
## $ Cr_ppm_AES_ST : int -10 -10 -10 30 20 20 60 40 20 10 ...
## $ Cs_ppm_MS_ST : chr "0,5" "1,4" "0,2" "-0,1" ...
## $ Cu_ppm_AES_ST : chr "50000,11111" "23300" "50000,11111" "50000,11111" ...
## $ Dy_ppm_MS_ST : chr "-0,05" "0,32" "1,38" "0,37" ...
## $ Er_ppm_MS_ST : chr "-0,05" "0,22" "0,77" "0,23" ...
## $ Eu_ppm_MS_ST : chr "-0,05" "0,14" "0,17" "0,1" ...
## $ Ga_ppm_MS_ST : chr "5" "15" "6" "3" ...
## $ Gd_ppm_MS_ST : chr "-0,05" "0,45" "1,5" "0,39" ...
## $ Ge_ppm_MS_ST : int -1 5 -1 -1 3 8 8 1 2 2 ...
## $ Hf_ppm_MS_ST : int -1 4 -1 -1 5 13 12 2 3 6 ...
## $ Ho_ppm_MS_ST : chr "-0,05" "0,07" "0,25" "0,07" ...
## $ In_ppm_MS_ST : chr "6,4" "-0,2" "3,7" "0,2" ...
## $ La_ppm_MS_ST : chr "0,2" "4,6" "7,2" "1,7" ...
## $ Li_ppm_AES_ST : int -10 -10 -10 -10 30 20 20 20 -10 20 ...
## $ Lu_ppm_MS_ST : chr "-0,05" "-0,05" "0,08" "-0,05" ...
## $ Mo_ppm_MS_ST : chr "-2" "60" "3" "2" ...
## $ Nb_ppm_MS_ST : chr "-1" "4" "-1" "-1" ...
## $ Nd_ppm_MS_ST : chr "0,2" "3,8" "9,1" "1,7" ...
## $ Ni_ppm_AES_ST : chr "144" "6" "-5" "48" ...
## $ Pb_ppm_MS_ST : chr "23" "16" "188" "39" ...
## $ Pd_ppm_FA_MS : chr "" "" "" "" ...
## $ Pr_ppm_MS_ST : chr "-0,05" "1,09" "2,21" "0,46" ...
## $ Pt_ppm_FA_MS : chr "" "" "" "" ...
## $ Rb_ppm_MS_ST : chr "1,2" "148" "7,1" "0,7" ...
## $ Re_ppm_MS_HF : chr "" "" "" "" ...
## $ Sb_ppm_MS_ST : chr "1,2" "2,4" "2,9" "0,3" ...
## $ Sc_ppm_AES_ST : int -5 -5 -5 -5 11 6 15 10 5 6 ...
## $ Se_ppm_MS_ST : int NA NA NA NA NA NA NA NA NA NA ...
## $ Sm_ppm_MS_ST : chr "-0,1" "0,6" "1,6" "0,4" ...
## $ Sn_ppm_MS_ST : chr "2" "3" "106" "-1" ...
## $ Sr_ppm_AES_ST : chr "26,6" "114" "22,5" "38,4" ...
## $ Ta_ppm_MS_ST : chr "-0,5" "-0,5" "-0,5" "-0,5" ...
## $ Tb_ppm_MS_ST : chr "-0,05" "0,07" "0,23" "-0,05" ...
## $ Te_ppm_MS_ST : chr "" "" "" "" ...
## $ Th_ppm_MS_ST : chr "0,2" "9,7" "2,6" "0,2" ...
## $ Tl_ppm_MS_ST : chr "-0,5" "0,5" "-0,5" "-0,5" ...
## $ Tm_ppm_MS_ST : chr "-0,05" "-0,05" "0,08" "-0,05" ...
## $ U_ppm_MS_ST : chr "0,3" "1,75" "0,63" "34,8" ...
## $ V_ppm_AES_ST : int 51 24 -5 493 68 20 40 159 39 61 ...
## $ W_ppm_MS_ST : chr "-1" "28" "22" "11" ...
## [list output truncated]
Se cargaron correctamente los datos para el analisis inferencial de la variable Fe_pct_AES_ST mediante el modelo probabilistico log-normal.
# LIMPIEZA DE LA VARIABLE HIERRO
variable <- as.numeric(datos[[columna_variable]])
variable <- na.omit(variable)
variable <- subset(variable, variable > 0)
if (length(variable) == 0) {
stop(paste("No existen datos validos positivos para", columna_variable, "despues de la limpieza."))
}
# SEPARAR OUTLIERS
caja <- boxplot(variable, plot = FALSE)
limite_sup <- caja$stats[5]
limite_inf <- caja$stats[1]
variable_outliers <- variable[variable < limite_inf | variable > limite_sup]
variable_sin_outliers <- variable[variable >= limite_inf & variable <= limite_sup]
if (length(variable_sin_outliers) == 0) {
stop("No existen datos validos despues de separar outliers.")
}
# RESUMEN
cat("Cantidad con outliers:", length(variable), "\n")
## Cantidad con outliers: 57
cat("Cantidad de outliers:", length(variable_outliers), "\n")
## Cantidad de outliers: 1
cat("Cantidad sin outliers:", length(variable_sin_outliers), "\n")
## Cantidad sin outliers: 56
# HISTOGRAMA (BASE DE LA TABLA)
histograma_frecuencias <- hist(
variable_sin_outliers,
breaks = breaks_histograma,
plot = FALSE
)
# FRECUENCIA ABSOLUTA
ni <- histograma_frecuencias$counts
# FRECUENCIA RELATIVA PORCENTUAL
hi <- ni / sum(ni) * 100
# INTERVALOS
intervalos <- paste0(
"[",
round(histograma_frecuencias$breaks[-length(histograma_frecuencias$breaks)], 2),
", ",
round(histograma_frecuencias$breaks[-1], 2),
")"
)
# TABLA
tabla_frecuencias <- data.frame(
Intervalo = intervalos,
ni = ni,
hi = round(hi, 2)
)
fila_total <- data.frame(
Intervalo = "TOTAL",
ni = sum(tabla_frecuencias$ni),
hi = round(sum(tabla_frecuencias$hi), 2)
)
tabla_frecuencias <- rbind(tabla_frecuencias, fila_total)
tabla_variable_gt <- tabla_frecuencias %>%
gt() %>%
fmt_number(
columns = hi,
decimals = 2
) %>%
cols_label(
Intervalo = "Intervalo",
ni = "Frecuencia absoluta (ni)",
hi = "Frecuencia relativa (%)"
) %>%
tab_header(
title = md("**Tabla N. 1**"),
subtitle = md(paste0("**Distribucion de frecuencias de muestras que contienen ", nombre_variable, "**"))
) %>%
tab_source_note(
source_note = md(autor_tablas)
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black",
row.striping.include_table_body = TRUE
)
tabla_variable_gt
| Tabla N. 1 | ||
| Distribucion de frecuencias de muestras que contienen Hierro | ||
| Intervalo | Frecuencia absoluta (ni) | Frecuencia relativa (%) |
|---|---|---|
| [0, 10) | 11 | 19.64 |
| [10, 20) | 17 | 30.36 |
| [20, 30) | 13 | 23.21 |
| [30, 40) | 4 | 7.14 |
| [40, 50) | 8 | 14.29 |
| [50, 60) | 3 | 5.36 |
| TOTAL | 56 | 100.00 |
| Autor: Grupo 1 | ||
histograma <- hist(
variable_sin_outliers,
breaks = breaks_histograma,
freq = TRUE,
main = paste0("Grafica 1. Distribucion de cantidad de ", nombre_variable, " en minas archivadas"),
xlab = paste0(nombre_variable, " (", unidad_variable, ")"),
ylab = "Cantidad",
col = "lightblue",
border = "black"
)
# ==========================================
# CONJETURA DEL MODELO LOG-NORMAL
# ==========================================
# PARAMETROS DEL MODELO LOG-NORMAL
log_variable <- log(variable_sin_outliers)
media_log <- mean(log_variable)
desviacion_log <- sd(log_variable)
# Medidas descriptivas en la escala original.
media <- mean(variable_sin_outliers)
desviacion <- sd(variable_sin_outliers)
media_lognormal <- exp(media_log + (desviacion_log^2 / 2))
mediana_lognormal <- exp(media_log)
# MOSTRAR VALORES
cat("Media aritmetica:", round(media, 2), "\n")
## Media aritmetica: 23.71
cat("Desviacion estandar:", round(desviacion, 4), "\n")
## Desviacion estandar: 15.8467
cat("Media logaritmica (meanlog):", round(media_log, 4), "\n")
## Media logaritmica (meanlog): 2.8259
cat("Desviacion logaritmica (sdlog):", round(desviacion_log, 4), "\n")
## Desviacion logaritmica (sdlog): 1.0006
cat("Media estimada log-normal:", round(media_lognormal, 2), "\n")
## Media estimada log-normal: 27.84
cat("Mediana estimada log-normal:", round(mediana_lognormal, 2), "\n\n")
## Mediana estimada log-normal: 16.88
# PREPARAR HISTOGRAMA Y CURVA LOG-NORMAL
breaks_variable <- pretty(variable_sin_outliers, n = breaks_histograma)
x_modelo <- seq(
min(variable_sin_outliers),
max(variable_sin_outliers),
length.out = 500
)
y_lognormal <- dlnorm(
x_modelo,
meanlog = media_log,
sdlog = desviacion_log
)
hist_previo <- hist(
variable_sin_outliers,
breaks = breaks_variable,
plot = FALSE
)
limite_y <- max(
c(hist_previo$density, y_lognormal),
na.rm = TRUE
) * 1.15
par(mar = c(5, 5, 4, 2) + 0.1)
# Histograma con densidad.
histograma_modelo <- hist(
variable_sin_outliers,
breaks = breaks_variable,
freq = FALSE,
main = paste0(
"Grafica 2. Comparacion de la realidad con el modelo log-normal de\n",
nombre_variable,
" en minas archivadas"
),
xlab = paste0(nombre_variable, " (", unidad_variable, ")"),
ylab = "Densidad de probabilidad",
col = "lightblue",
border = "black",
xlim = c(min(breaks_variable), max(breaks_variable)),
ylim = c(0, limite_y),
las = 1
)
# CURVA LOG-NORMAL SUPERPUESTA
lines(
x_modelo,
y_lognormal,
col = "black",
lwd = 3
)
# ==========================================
# CALCULO DE FRECUENCIAS (Fo y Fe)
# ==========================================
# FRECUENCIAS OBSERVADAS (Realidad)
Fo_abs <- histograma_modelo$counts
# FRECUENCIAS ESPERADAS (Modelo teorico log-normal)
h <- length(histograma_modelo$counts)
P <- numeric(h)
for (i in 1:h) {
P[i] <- plnorm(histograma_modelo$breaks[i + 1], meanlog = media_log, sdlog = desviacion_log) -
plnorm(histograma_modelo$breaks[i], meanlog = media_log, sdlog = desviacion_log)
}
Fe_abs <- P * length(variable_sin_outliers)
# MOSTRAR RESULTADOS EN CONSOLA
cat("Frecuencias observadas (Fo):\n")
## Frecuencias observadas (Fo):
print(Fo_abs)
## [1] 11 17 13 4 8 3
cat("\nFrecuencias esperadas (Fe):\n")
##
## Frecuencias esperadas (Fe):
print(round(Fe_abs, 2))
## [1] 16.83 14.95 8.40 4.95 3.10 2.04
# =========================
# TEST DE PEARSON
# =========================
n <- length(variable_sin_outliers)
# Convertir a porcentajes para la grafica de correlacion.
Fo <- (Fo_abs / n) * 100
Fe <- (Fe_abs / n) * 100
plot(
Fo,
Fe,
main = paste0("Grafica 3. Correlacion de frecuencias en el modelo log-normal (", nombre_variable, ")"),
xlab = "Frecuencia Observada (%)",
ylab = "Frecuencia Esperada (%)",
pch = 19,
col = "forestgreen"
)
abline(a = 0, b = 1, col = "red", lwd = 2)
correlacion <- cor(Fo, Fe) * 100
# =========================
# TEST DE CHI-CUADRADO
# =========================
# Para log-normal se estiman dos parametros: meanlog y sdlog.
gl <- length(histograma_modelo$counts) - 1 - 2
gl <- max(gl, 1)
indices_validos <- Fe_abs > 0
x2 <- sum((Fo_abs[indices_validos] - Fe_abs[indices_validos])^2 / Fe_abs[indices_validos])
umbral <- qchisq(nivel_aceptacion_modelo, gl)
decision <- "Se acepta el modelo log-normal con umbral de aceptacion del 75%"
# =========================
# TABLA RESUMEN
# =========================
tabla_resumen <- data.frame(
Variable = paste0(nombre_variable, " (", unidad_variable, ")"),
`Test Pearson (%)` = round(correlacion, 2),
`Chi Cuadrado` = round(x2, 2),
`Nivel de aceptacion (%)` = nivel_aceptacion_modelo * 100,
`Umbral de aceptacion` = round(umbral, 2),
Decision = decision,
check.names = FALSE
)
tabla_resumen_gt <- tabla_resumen %>%
gt() %>%
tab_header(
title = md("**Tabla N. 2**"),
subtitle = md(paste0("**Resultados de las pruebas de bondad de ajuste log-normal para el ", nombre_variable, "**"))
) %>%
tab_source_note(
source_note = md(autor_tablas)
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
table_body.border.bottom.color = "black"
)
tabla_resumen_gt
| Tabla N. 2 | |||||
| Resultados de las pruebas de bondad de ajuste log-normal para el Hierro | |||||
| Variable | Test Pearson (%) | Chi Cuadrado | Nivel de aceptacion (%) | Umbral de aceptacion | Decision |
|---|---|---|---|---|---|
| Hierro (%) | 77.34 | 13.21 | 75 | 4.11 | Se acepta el modelo log-normal con umbral de aceptacion del 75% |
| Autor: Grupo 1 | |||||
Cual es la probabilidad de que una muestra aleatoria presente una concentracion de hierro menor o igual a la mediana estimada del modelo log-normal?
# ==========================================
# CALCULO DE PROBABILIDADES
# ==========================================
probabilidad_mediana <- plnorm(
mediana_lognormal,
meanlog = media_log,
sdlog = desviacion_log
)
cat("Probabilidad:", round(probabilidad_mediana * 100, 2), "%\n")
## Probabilidad: 50 %
# =========================
# GRAFICA DE PROBABILIDAD
# =========================
x_prob <- seq(
min(variable_sin_outliers),
max(variable_sin_outliers),
length.out = 300
)
plot(
x_prob,
dlnorm(x_prob, meanlog = media_log, sdlog = desviacion_log),
col = "black",
lwd = 2,
type = "l",
main = paste0(
"Grafica 4. Calculo de probabilidades del contenido de ",
nombre_variable,
"\nP(X <= mediana log-normal)"
),
ylab = "Densidad de probabilidad",
xlab = paste0(nombre_variable, " (", unidad_variable, ")")
)
x_area <- seq(
min(variable_sin_outliers),
mediana_lognormal,
length.out = 150
)
y_area <- dlnorm(x_area, meanlog = media_log, sdlog = desviacion_log)
lines(x_area, y_area, col = "red", lwd = 2)
polygon(
c(x_area, rev(x_area)),
c(y_area, rep(0, length(y_area))),
col = rgb(1, 0, 0, 0.5),
border = NA
)
legend(
"topright",
legend = c("Modelo log-normal", "Area de probabilidad"),
col = c("black", rgb(1, 0, 0, 0.5)),
lwd = c(2, 8),
cex = 0.8
)
texto_prob <- paste0("Probabilidad = ", round(probabilidad_mediana * 100, 2), " %")
text(
x = mediana_lognormal,
y = max(dlnorm(x_prob, meanlog = media_log, sdlog = desviacion_log)) * 0.5,
labels = texto_prob,
col = "black",
cex = 1,
font = 2
)
Si se analizan los registros de 50 nuevas minas archivadas, cuantas se esperaria que presenten un contenido de hierro entre el primer cuartil y el tercer cuartil del modelo log-normal?
# ==========================================
# PROBABILIDAD ENTRE Q1 Y Q3 DEL MODELO LOG-NORMAL
# ==========================================
limite_prob_inf <- qlnorm(probabilidad_inferior, meanlog = media_log, sdlog = desviacion_log)
limite_prob_sup <- qlnorm(probabilidad_superior, meanlog = media_log, sdlog = desviacion_log)
probabilidad_cuartiles <- plnorm(limite_prob_sup, meanlog = media_log, sdlog = desviacion_log) -
plnorm(limite_prob_inf, meanlog = media_log, sdlog = desviacion_log)
# Cantidad esperada en nuevas minas archivadas.
minas_esperadas <- probabilidad_cuartiles * n_nuevas_minas
# Mostrar resultados.
cat("Limite inferior Q1:", round(limite_prob_inf, 2), "\n")
## Limite inferior Q1: 8.59
cat("Limite superior Q3:", round(limite_prob_sup, 2), "\n")
## Limite superior Q3: 33.14
cat("Probabilidad:", round(probabilidad_cuartiles * 100, 2), "%\n")
## Probabilidad: 50 %
cat("Cantidad de minas esperadas:", round(minas_esperadas), "\n")
## Cantidad de minas esperadas: 25
# ==========================================
# INTERVALOS DE CONFIANZA - MODELO LOG-NORMAL
# ==========================================
# CALCULOS EN ESCALA LOGARITMICA
media_log_ic <- mean(log_variable)
sigma_log_ic <- sd(log_variable)
n <- length(variable_sin_outliers)
# Error estandar de la media logaritmica.
error_estandar_log <- sigma_log_ic / sqrt(n)
# Calculo de los limites usando el nivel de confianza definido.
z <- qnorm(1 - (1 - nivel_confianza_ic) / 2)
li_log <- media_log_ic - z * error_estandar_log
ls_log <- media_log_ic + z * error_estandar_log
# Transformacion a la escala original.
li <- exp(li_log)
ls <- exp(ls_log)
media_geo <- exp(media_log_ic)
# MOSTRAR VALORES EN CONSOLA
cat("Media logaritmica:", round(media_log_ic, 4), "\n")
## Media logaritmica: 2.8259
cat("Desviacion estandar logaritmica:", round(sigma_log_ic, 4), "\n")
## Desviacion estandar logaritmica: 1.0006
cat("Tamano muestral:", n, "\n")
## Tamano muestral: 56
cat("Error estandar logaritmico:", round(error_estandar_log, 4), "\n")
## Error estandar logaritmico: 0.1337
cat("Media geometrica:", round(media_geo, 2), "\n")
## Media geometrica: 16.88
cat("Limite inferior:", round(li, 2), "\n")
## Limite inferior: 13.78
cat("Limite superior:", round(ls, 2), "\n")
## Limite superior: 20.66
# =========================
# TABLA PROFESIONAL
# =========================
tabla_intervalo <- data.frame(
`Limite inferior` = round(li, 2),
`Media geometrica` = round(media_geo, 2),
`Limite superior` = round(ls, 2),
`Error estandar logaritmico` = round(error_estandar_log, 4),
check.names = FALSE
)
tabla_intervalo_gt <- tabla_intervalo %>%
gt() %>%
tab_header(
title = md("**Tabla N. 3**"),
subtitle = md(paste0("**Intervalo de confianza log-normal del contenido de ", nombre_variable, " (", unidad_variable, ") en minas archivadas**"))
) %>%
tab_source_note(
source_note = md(autor_tablas)
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black",
row.striping.include_table_body = TRUE
)
tabla_intervalo_gt
| Tabla N. 3 | |||
| Intervalo de confianza log-normal del contenido de Hierro (%) en minas archivadas | |||
| Limite inferior | Media geometrica | Limite superior | Error estandar logaritmico |
|---|---|---|---|
| 13.78 | 16.88 | 20.66 | 0.1337 |
| Autor: Grupo 1 | |||
La variable de Hierro se analiza mediante la distribucion log-normal,
utilizando como parametros principales la media logaritmica
(meanlog) y la desviacion estandar logaritmica
(sdlog) calculadas a partir de los datos validos sin
valores atipicos.
La conjetura del modelo compara la distribucion real observada con la curva log-normal teorica. Esta comparacion permite observar si las concentraciones de hierro presentan una distribucion positiva y asimetrica hacia la derecha, comportamiento caracteristico del modelo log-normal.
Mediante el modelo log-normal se calcularon probabilidades asociadas al contenido de hierro, como la probabilidad de que una muestra se encuentre por debajo de la mediana estimada y la cantidad esperada de registros ubicados entre el primer y tercer cuartil del modelo.
Finalmente, el intervalo de confianza permite estimar el rango probable de la media geometrica poblacional del contenido de hierro con un 87% de confianza. Para la aprobacion del modelo se usa un nivel de aceptacion del 75%.