validacion: Evaluación valores según de rangos de parámetros

validacionR Documentation

Evaluación valores según de rangos de parámetros

Description

Crean mensajes de alerta para casos en los que los valores reportados incumplen relgas de validación. v_rango evalúa casos en los que se exceden los rangos normales para los parámetros en cuestión (en base a las tablas rango_param y rango_param_sitio), o a tablas ingresadas por le usuarie); v_lim evalúa los LD y LC en relación a los valores y entre sí; v_rel_param evalúa el cumplimiento de las reglas de validación concernientes a las relaciones entre parámetros (ej.: PT >= PO4; esta y otras reglas evaluadas son las contenidas en la lista rel_param). Las funciones usan internamente v_rango_, v_lim_ y v_rel_param_, respectivamente.

Usage

v_rango(
  .data,
  col.ref = "id_muestra",
  id_matriz = NULL,
  trangos = NULL,
  trangos_sitio = NULL
)

v_lim(.data, col.ref = "id_muestra")

v_rel_param(.data, ...)

## Default S3 method:
v_rel_param(.data, col.ref = "id_muestra")

Arguments

.data

data.frame que debe incluir ciertas columnas. Ver detalles.

col.ref

character. Nombre de la columna que hace de referencia con los datos originales. Ver detalles.

id_matriz

integer, opcional. Si '.data“ no incluye una columna con el id de matriz de los datos, se puede incluir un escalar entero correspondiente a la matriz deseada (ver sia_matriz).

trangos

data.frame, opcional. En caso de que la tabla rango_param no sea adecuada.

trangos_sitio

data.frame, opcional. En caso de que la tabla rango_param_sitio no sea adecuada.

Details

PENDIENTE (TAL VEZ): crear una versión de v_rel_param para trabajar con planillas de vSIA (campo, lab, pd...)

La data.frame .data debe incluir ciertas columnas. Las tres fundamentales para todas las funciones de validación son valor (double; valor reportado para el parámetro), id_muestra (integer; identificador único de cada muestra; ejs.: sia_muestra, datos_sia) e id_parametro (integer: identificador único para cada parámetro; ver sia_parametro). Adicionalmete, v_rango y v_lim necesitan ciertas columnas en .data:

  • v_rango id_sitio (integer; identificador único para cada sitio; ver sitio) e id_matriz (integer; identificador único para cada matriz; ver sia_matriz)

  • v_lim limite_deteccion (double; límite de detección reportado) y limite_cuantificacion (double; límite de cuantificación reportado)

Respecto al argumento col.ref: normalmente id_muestra es usado. Se asume que cada valor numérico se puede identificar con la columna de referencia y el parámetro en cuestión (i.e.: id_muestra e id_parametro; por ejemplo, datos_sia). En vSIA normalmente se usa "nfila" como referecia.

Sea cual sea el valor de col.ref, los datos en .data deben cumplir con que toda combinación de col.ref e id_parametro sea única.

Value

data.frame con mensajes de error para las combinaciones de col.ref e id_parametro para las que no se cumplen reglas de validación concernientes. Las columnas de esta tabla son:

  • id_muestra (o col.ref) (integer): identificador único de cada muestra o dato.

  • id_parametro (integer): identificador único para cada parámetro; ver sia_parametro

  • mensaje (character): mensaje de generado (busca ser informativo sin ser excesivamente extendido)

  • id_tipo_msj (integer): identificador único para cada tipo de mensaje (alerta o error); ver tipo_msj

  • id_subtipo_msj (integer): identificador único para cada subtipo de mensaje (independientemente de que sea alerta o error); ver subtipo_msj

Examples


# Con datos (largos):

d <- datos_sia %>%
valores_numericos(filtrar_otros = TRUE, metodo = "basico") %>%
  dplyr::mutate(
    limite_deteccion = as.numeric(siabox:::limpia_num(limite_deteccion)),
    limite_cuantificacion = as.numeric(limpia_num(limite_cuantificacion))
  ) %>%
  dplyr::left_join(
    dplyr::select(sitio, id_sitio, id_matriz, id_estacion = id_interno),
    by = c("id_matriz", "id_estacion")
  ) %>%
  dplyr::select(id_muestra, id_sitio, codigo_pto, fecha_muestra, id_matriz,
                id_parametro, param, valor, limite_deteccion,
                limite_cuantificacion)
msj_rango <- v_rango(d)
msj_lim   <- v_lim(d)
msj_rel_param <- v_rel_param(d)

dplyr::bind_rows(msj_rango, msj_lim, msj_rel_param) %>%
  dplyr::group_by(id_subtipo_msj) %>%
  dplyr::sample_n(1) %>%
  dplyr::left_join(subtipo_msj) %>%
  dplyr::select(mensaje, subtipo)

# En vSIA:
listaPD$datos$`NO3 (mg NO3-N/L)`[11] <- "7,83"
listaPD$datos$`NO2 (mg NO2-N/L)`[10] <- "0,71"
listaPD$datos$`pH (sin unid)`[11] <- "0,66"
listaPD$datos$`PT (µg P/L)`
listaPD$datos$`PO4 (µg PO4-P/L)`[2:3] <- c("39", "50")
listaPD$datos$`OD (mg/L)`[15] <- "119"
listaPD$datos$`SatO2 (%)`[15] <- "9,94"

datos_largo <-
  largo(listaPD$datos, listaPD$ppd) %>%
  valores_numericos(metodo = "basico") %>%
  dplyr::mutate(
    limite_deteccion = as.numeric(siabox:::limpia_num(limite_deteccion)),
    limite_cuantificacion = as.numeric(limpia_num(limite_cuantificacion))
  ) %>%
  # dplyr::filter(id_tipo_dato == 1L) %>%
  dplyr::left_join(sia_parametro[c(1, 4)], by = "id_parametro") %>%
  dplyr::left_join(
    dplyr::filter(sia_estacion, prog_monitoreo == 13L) %>%
      dplyr::select(Estacion = codigo_pto, id_estacion = id),
    by = "Estacion"
  ) %>%
  dplyr::left_join(
    dplyr::filter(sitio, id_matriz == 6L, id_fuente == 1L) %>%
      dplyr::select(id_sitio, id_matriz, id_estacion = id_interno),
    by = "id_estacion"
  ) %>%
  dplyr::select(nfila, id_sitio, Estacion,
                Fecha, id_matriz, id_parametro,
                nombre_clave, valor,
                limite_deteccion, limite_cuantificacion)

v_rango(datos_largo, "nfila")
v_lim(datos_largo, "nfila")
v_rel_param(datos_largo, "nfila")


jumanbar/manoSIAR documentation built on April 25, 2022, 1:35 p.m.