El script R proporcionado realiza análisis de variograma. El análisis de variograma es una técnica utilizada en geoestadística para analizar la dependencia espacial o la correlación de una variable en un área geográfica. El guión se divide en tres partes.
En la Parte 01, se cargan los paquetes necesarios, como "gstat", "sp", "tibble", "readxl", "stats", "openxlsx", "tidyr", "ggplot2", "writexl", "broom". ”, “multcomp” y “gridExtra”. Se especifican las rutas de los archivos de entrada y salida. Los datos se importan desde un archivo de Excel y se convierten en un marco de datos de puntos espaciales (SPDF). Luego, el script genera el variograma experimental ajustando un modelo de variograma a los datos y calcula los valores de distancia y gamma. Finalmente, el variograma experimental se traza usando ggplot2.
En la Parte 02, el guión se centra en mejorar los modelos de variograma. Se le indica al usuario que cambie los parámetros (umbral, pepita y rango) para mejorar el ajuste de los modelos al variograma experimental. El script genera modelos de variograma utilizando diferentes modelos (esférico, exponencial, lineal y gaussiano) y calcula los valores de variograma para cada modelo. El error cuadrático medio (RMSE) se calcula para evaluar el ajuste de cada modelo. Los modelos de variograma, junto con el ajuste inicial y el ajuste actual, se representan mediante ggplot2.
En la Parte 03, el script guarda los datos y los resultados. Crea un nuevo libro de Excel y agrega hojas de trabajo para los datos originales, variograma experimental, variogramas modelo, parámetros y conclusiones. Los resultados, incluidos los valores del variograma para cada modelo, los valores de los parámetros y las conclusiones basadas en los parámetros y características, se escriben en las hojas de trabajo respectivas. Finalmente, el libro de trabajo se guarda en la ruta de salida especificada.
Antes de usar el script R, debe asegurarse de tener lo siguiente:
- Un archivo de Excel (*.xlsx) con los datos a analizar. Los datos deben organizarse de manera que las muestras estén en filas y los grupos en columnas.
- Los datos se componen de 3 columnas: Col. 01 = latitud (coordenadas x), Col. 02 = longitud (coordenadas y), Col. 03 = z (medida deseada por punto en el espacio).
- R y RStudio instalados en su computadora.
- Los siguientes paquetes de R instalados: gstat, sp, tibble, readxl, stats, openxlsx, tidyr, ggplot2, writexl, broom, multcomp y gridExtra. Utilice la función “install.packages(“package_name”)” para instalar los paquetes.
Una vez que tenga estos requisitos previos, siga los pasos a continuación para usar el script:
Paso 1: Prepare los datos Asegúrese de que sus datos estén en el formato requerido. Los datos deben ser un archivo de Excel (.xlsx) con tres columnas: latitud (coordenadas x), longitud (coordenadas y) y la medida deseada por punto en el espacio (z). Modifique las rutas de los archivos de entrada y salida en el script para que coincidan con la ubicación de sus datos y dónde desea guardar la salida.
Paso 2: Ejecute la Parte 01: Desarrollo de un variograma experimental Copie y pegue la Parte 01 del script en su entorno R. Esta sección carga los paquetes necesarios y establece las rutas de los archivos de entrada y salida. Luego importa los datos del archivo de Excel especificado y los convierte en un marco de datos de puntos espaciales (SPDF). El variograma experimental se genera ajustando un modelo de variograma a los datos y extrayendo los valores de distancia y gamma. Finalmente, el script traza el variograma experimental usando ggplot2. Ejecute la Parte 01 ejecutando el código.
Paso 3: analizar el ajuste inicial Después de ejecutar la Parte 01, se trazará el ajuste inicial de los modelos de variograma. La gráfica mostrará el variograma experimental como puntos azules y los modelos de variograma (esférico, exponencial, lineal y gaussiano) como líneas en diferentes colores. También se mostrarán los valores RMSE para cada modelo. Analice el ajuste inicial y observe los valores RMSE para cada modelo.
Paso 4: Mejore los modelos de variograma (Parte 02) Copie y pegue la Parte 02 del script en su entorno R. Esta sección se enfoca en mejorar los modelos de variograma basados en el ajuste inicial. Debe cambiar los parámetros (umbral, pepita y rango) para refinar el ajuste de los modelos al variograma experimental. Modifique los valores de sill, nugget y range en el script y ejecute la Parte 02. Repita este paso iterativamente, ajustando los valores de los parámetros hasta que logre un ajuste satisfactorio.
Paso 5: Comparar el ajuste inicial y actual Después de ejecutar la Parte 02, el ajuste actual de los modelos de variograma se trazará junto con el ajuste inicial. Los dos gráficos se mostrarán uno al lado del otro para compararlos. Analice el ajuste actual y compárelo con el ajuste inicial. Tenga en cuenta cualquier mejora o cambio en los valores RMSE.
Paso 6: generar conclusiones En este punto, ha refinado los modelos de variograma y obtenido el ajuste final. Copie y pegue el código de generación de conclusiones de la Parte 02. Este código genera conclusiones basadas en los valores de los parámetros y las características de los modelos. Ejecute el código de generación de conclusiones para obtener las conclusiones como un marco de datos.
Paso 7: Guardar datos y resultados (Parte 03) Copie y pegue la Parte 03 del script en su entorno R. Esta sección guarda los datos y los resultados en un libro de Excel. Crea un nuevo libro de trabajo y agrega hojas de trabajo para los datos originales, el variograma experimental, los variogramas del modelo, los parámetros y las conclusiones. Los datos y resultados se escriben en sus respectivas hojas de trabajo. Modificar la ruta de salida en
la secuencia de comandos para especificar dónde desea guardar el libro de Excel. Ejecute la Parte 03 para guardar los datos y los resultados.
Paso 9: Analice los resultados guardados Abra el libro de Excel guardado y revise las hojas de trabajo. Los datos originales, el variograma experimental, los variogramas del modelo, los parámetros y las conclusiones estarán disponibles para su análisis. Utilice esta información para análisis o informes adicionales según sea necesario.
##ANÁLISIS DE VARIOGRAMA##Los datos deben estar compuestos por 3 columnas##Columna 1 = latitud (coordenadas x), Columna 2 = longitud (coordenadas y),##Columna 3 = z (medida deseada por punto en el espacio). ##El archivo debe ser .xlsx. Instale todos los paquetes a continuación antes de ejecutar usando##install.packages("package_name"), reemplace "package_name" con el nombre del paquete.#+------------------+-------- ----+-----+#| Latitud | Longitud | z |#+-----------+------------+------+#| ... | ... | ... |#| ... | ... | ... |#| ... | ... | ... |#+-----------+------------+-----+############# ############################################## ###################NO COPIAR/PEGAR EL CÓDIGO COMPLETO, ESTÁ DIVIDIDO EN 3 PARTES. COPIA/PEGA LA PARTE 01 PRIMERO, verás cuando aparece la otra parte.################################ ##############################################PARTE 01 : DESARROLLO DEL VARIOGRAMA EXPERIMENTAL########################################### #################################### Cargue la biblioteca de paquetes requerida (gstat) biblioteca (sp) biblioteca (tibble) biblioteca (readxl) biblioteca (estadísticas) biblioteca (openxlsx) biblioteca (tidyr) biblioteca (ggplot2) biblioteca (writexl) biblioteca (escoba) biblioteca (multcomp) biblioteca (gridExtra) ##LLENAR ESTOSinput_path <- "C:\\ Usuarios\\barbi\\Desktop\\variogram-example.xlsx"output_path <- "C:\\Users\\barbi\\Desktop\\variogram_output.xlsx"##IMPORTACIÓN DE DATOSdata <- read_excel(input_path)# Convertir datos a un marco de datos de puntos espaciales (SPDF)coordenadas(datos) <- ~longitud + latitud##GENERACIÓN DE VARIOGRAMA EXPERIMENTAL# Crear variograma experimentalexp_variograma <- variograma(z ~ 1, datos)# Extraer valores de distancia y gammaexp_variograma_datos <- data.frame(distancia = exp_variogram$dist, gamma = exp_variogram$gamma)# Traza el variograma experimentalggplot(exp_variogram_data, aes(x = distancia, y = gamma)) + geom_point() + geom_line() + labs(x = "Lag (h)", y = "Semivarianza") + theme_minimal()sill <- max(exp_variogram_data$gamma)nugget <- exp_variogram_data$gamma[1]rango <- exp_variogram_data$distancia[que.max(exp_variogram_data$gamma)]cat("Sill: " , sill, "\n")cat("Nugget: ", nugget, "\n")cat("Rango: ", range, "\n")##GENERACIÓN DE MODELOS DE VARIOGRAMA# Generar modelos de variograma modelo_esférico <- vgm(psill = alféizar, modelo = "Sph", rango = rango, pepita = pepita) modelo_exponencial <- vgm(psill = alféizar, modelo = "Exp", rango = rango, pepita = pepita)modelo_lineal <- vgm(psill = alféizar, modelo = "Lin", rango = rango, nugget = nugget) modelo_gaussiano <- vgm(psill = umbral, modelo = "Gau", rango = rango, nugget = nugget)# Calcular valores de variograma para los modelosVariograma_esférico <- VariogramaLínea(modelo_esférico, maxdist = máx(exp_variogram_data$distancia))variograma_exponencial <- variogramLine(modelo_exponencial, maxdist = max(exp_variogram_data$distancia))variogram_lineal <- variogramLine(modelo_lineal, maxdist = max(exp_variogram_data$distancia))variograma_gaussiano <- variogramLine(modelo_gaussiano, maxdist = max (exp_variogram_data$distancia))# Calcular RMSE para cada modelo spherical_rmse <- sqrt(mean((spherical_variogram$gamma - exp_variogram_data$gamma)^2))exponential_rmse <- sqrt(mean((exponential_variogram$gamma - exp_variogram_data$gamma)^2) )linear_rmse <- sqrt(mean((linear_variogram$gamma - exp_variogram_data$gamma)^2))gaussian_rmse <- sqrt(mean((gaussian_variogram$gamma - exp_variogram_data$gamma)^2))# Crear un marco de datos para la leyenda labelslegend_df <- data.frame(modelo = c("Esférico", "Exponencial", "Lineal", "Gaussiano"), color = c("rojo", "verde", "púrpura", "naranja"))# Parcela the variogramsinitial_fit <- ggplot(exp_variogram_data, aes(x = distancia, y = gamma)) + geom_point(color = "blue") + geom_line(data = spherical_variogram, aes(x = dist, y = gamma), color = "red ") + geom_line(datos = variograma_exponencial, aes(x = dist, y = gamma), color = "verde") + geom_line(datos = variograma_lineal, aes(x = dist, y = gamma), color = "púrpura") + geom_line(data = gaussian_variogram, aes(x = dist, y = gamma), color = "orange") + labs(x = "Lag (h)", y = "Semivariance", title = "Variogram Models") + scale_color_manual(valores = legend_df$color, etiquetas = legend_df$modelo) + anotar("texto", x = 10, y = max(exp_variograma$gamma), etiqueta = pegar0("RMSE esférico: ", round(rmse_esférico, 2) )) + anotar("texto", x = 10, y = max(exp_variograma$gamma) - 0.5, etiqueta = pegar0("RMSE exponencial: ", round(exponential_rmse, 2))) + anotar("texto", x = 10, y = max(exp_variogram$gamma) - 1, label = paste0("RMSE lineal: ", round(linear_rmse, 2))) + annotate("texto", x = 10, y = max(exp_variogram$gamma ) - 1.5, etiqueta = paste0("RMSE gaussiano: ", round(gaussian_rmse, 2))) + theme_minimal()initial_fit###################### ############################################## ################PARTE 02: MEJORAR LOS MODELOS DE VARIOGRAMA#EJECUTAR ESTA PARTE **DESPUÉS** HACER LA PARTE 01############### ############################################## ########################Cambia el alféizar, la pepita y el rango para mejorar los modelos. #El rango cambia cuando la línea pasa de aumentar a estabilizarse horizontalmente#Umbral trae la parte de la línea que estabiliza el aumento hacia arriba o hacia abajo #Nugget trae toda la línea hacia abajo o hacia arriba#CAMBIAR PARA MEJORAR LOS MODELOSUmbral <- 9.5 pepita <- 0.035 rango <- 35#Copie/Pegue esta parte y cambie los parámetros hasta que el modelo de variograma se ajuste#mejor al variograma experimental. ## GENERACIÓN DE MODELOS DE VARIOGRAMA# Generar modelos de variograma modelo_esférico <- vgm(psill = umbral, modelo = "Sph", rango = rango, nugget = nugget) modelo_exponencial <- vgm(psill = umbral, modelo = "Exp", rango = rango, pepita = pepita)modelo_lineal <- vgm(psill = alféizar, modelo = "Lin", rango = rango, pepita = pepita)modelo_gaussiano <- vgm(psill = alféizar, modelo = "Gau", rango = rango, pepita = pepita) # Calcular los valores de variograma para los modelosVariograma_esférico <- variogramaLínea(modelo_esférico, maxdist = max(exp_variograma_datos$distancia))variograma_exponencial <- variogramaLínea(modelo_exponencial, maxdist = max(exp_variograma_datos$distancia))variograma_lineal <- variogramaLínea(modelo_lineal, maxdist = max(exp_variograma_datos) $distancia))gaussian_variogram <- variogramLine(gaussian_model, maxdist = max(exp_variogram_data$distance))# Crear un marco de datos para la leyenda labelslegend_df <- data.frame(model = c("Spherical", "Exponential", "Linear" , "Gaussiano"), color = c("rojo", "verde", "púrpura", "naranja"))# Trazar el variograma ajuste_actual <- ggplot(exp_variogram_data, aes(x = distancia, y = gamma)) + geom_point (color = "azul") + geom_line(datos = variograma_esférico, aes(x = dist, y = gamma), color = "rojo") + geom_line(datos = variograma_exponencial, aes(x = dist, y = gamma), color = "verde") + geom_line(datos = variograma_lineal, aes(x = dist, y = gamma), color = "púrpura") + geom_line(datos = variograma_gaussiano, aes(x = dist, y = gamma), color = " orange") + labs(x = "Retraso (h)", y = "Semivarianza", title = "Modelos de variograma") + scale_color_manual(values = legend_df$color, labels = legend_df$model) + theme_minimal()current_fit#View el ajuste inicial y current_fitgrid.arrange(initial_fit, current_fit, ncol = 2)##CONCLUSIONS# Función para generar conclusiones basadas en parámetros y característicasgenerate_conclusions <- function(sill, nugget, range) { conclusiones <- data.frame(Conclusions = character (), stringsAsFactors = FALSE) # Conclusiones basadas en parámetros umbral, nugget y rango if (umbral > 0) { conclusiones <- rbind(conclusiones, data.frame(Conclusiones = "s > 0. Los datos muestran variabilidad"). ) } else { conclusiones <- rbind(conclusiones, data.frame(Conclusiones = "s < 0. Los datos no tienen variabilidad.")) } if (nugget > 0) { conclusiones <- rbind(conclusiones, data.frame( Conclusiones = "c > 0. Hay una variación espacial a distancias muy cortas o errores de medición.")) } if (rango > 0) { conclusiones <- rbind(conclusiones, data.frame(Conclusiones = "r > 0. El la correlación espacial se extiende hasta cierto rango.")) } else { conclusiones <- rbind(conclusiones, data.frame(Conclusiones = "r < 0. Los datos no muestran correlación espacial.")) } # Conclusiones adicionales basadas en características if (alféizar > 0 && rango > 0) { conclusiones <- rbind(conclusiones, data.frame(Conclusiones = "s > 0 y r > 0. Los datos muestran dependencia y heterogeneidad espacial.")) } else { conclusiones < - rbind(conclusiones, data.frame(Conclusiones = "s < 0 and r < 0. Los datos no muestran una clara heterogeneidad o dependencia espacial")) } if (sill > 0 && range == 0) { conclusiones <- rbind(conclusiones, data.frame(Conclusiones = "s > 0 y r = 0. Los datos exhiben agrupamiento espacial.")) } return(conclusiones)}# Generar conclusiones basadas en parámetros y característicasconclusiones_df <- generar_conclusiones(alféizar, pepita, range)# Imprime el cuadro de datos de las conclusionesprint(conclusions_df)##################################### ############################################## #PARTE 03: GUARDAR RESULTADOS#EJECUTAR ESTA PARTE **DESPUÉS** HACER LA PARTE 02############################# ############################################## ###########GUARDAR DATOS Y RESULTADOS# Crear un nuevo libro de trabajo y agregar hojas de trabajowb <- createWorkbook()addWorksheet(wb, "Datos originales")addWorksheet(wb, "Variograma experimental")addWorksheet(wb, "Modelo de variogramas")addWorksheet(wb, "Parámetros")addWorksheet(wb, "Conclusiones")# Unión de marcos de datosresultados <- cbind(Variograma_esférico, Variograma_exponencial, Variograma_lineal, Variograma_gaussiano)colnames(resultados) <- c("retraso_h", " gamma_esférica", "h_exponencial", "gamma_exponencial", "h_lineal", "gamma_lineal", "h_gaussiana", "gamma_gaussiana")resultados <- subconjunto(resultados, select = -c(h_exponencial,h_lineal,h_gaussiana))resultados_parámetro <- datos .frame( Nugget = c(nugget), Sill = c(sill), Range = c(range))# Write worksheetswriteData(wb, "Original Data", data)writeData(wb, "Experimental Variogram", exp_variogram_data)writeData( wb, "Modelo de variogramas", resultados) writeData (wb, "Parámetros", parámetro_resultados) writeData (wb, "Conclusiones", conclusiones_df) # Guardar el libro de trabajo guardar el libro de trabajo (wb, salida_ruta)