Criterio de Peirce - Peirce's criterion

En estadísticas robustas , el criterio de Peirce es una regla para eliminar valores atípicos de los conjuntos de datos, que fue ideada por Benjamin Peirce .

Valores atípicos eliminados por el criterio de Peirce

El problema de los valores atípicos

En conjuntos de datos que contienen mediciones con números reales, los valores atípicos sospechosos son los valores medidos que parecen estar fuera del grupo de la mayoría de los demás valores de datos. Los valores atípicos cambiarían en gran medida la estimación de la ubicación si se utilizara el promedio aritmético como una estadística resumida de la ubicación. El problema es que la media aritmética es muy sensible a la inclusión de valores atípicos; en terminología estadística, la media aritmética no es robusta .

En presencia de valores atípicos, el estadístico tiene dos opciones. Primero, el estadístico puede eliminar los valores atípicos sospechosos del conjunto de datos y luego usar la media aritmética para estimar el parámetro de ubicación. En segundo lugar, el estadístico puede utilizar una estadística sólida, como la estadística mediana .

El criterio de Peirce es un procedimiento estadístico para eliminar valores atípicos.

Usos del criterio de Peirce

El estadístico e historiador de la estadística Stephen M. Stigler escribió lo siguiente sobre Benjamin Peirce :

"En 1852 publicó la primera prueba de significancia diseñada para decirle a un investigador si un valor atípico debería ser rechazado (Peirce 1852, 1878). La prueba, basada en un tipo de argumento de razón de verosimilitud , tenía la distinción de producir un debate internacional sobre la sabiduría de tales acciones ( Anscombe , 1960, Rider, 1933, Stigler , 1973a) ".

El criterio de Peirce se deriva de un análisis estadístico de la distribución gaussiana . A diferencia de otros criterios para eliminar valores atípicos, el método de Peirce se puede aplicar para identificar dos o más valores atípicos.

"Se propone determinar en una serie de observaciones el límite de error, más allá del cual todas las observaciones que involucren un error tan grande pueden ser rechazadas, siempre que haya tantas como tales observaciones. El principio sobre el cual se propone resolver este problema es , que las observaciones propuestas deben ser rechazadas cuando la probabilidad del sistema de errores que se obtiene al retenerlas es menor que la del sistema de errores que se obtiene por su rechazo multiplicada por la probabilidad de hacer tantas, y no más, observaciones anormales ".

Hawkins proporciona una fórmula para el criterio.

El criterio de Peirce se utilizó durante décadas en el United States Coast Survey .

"De 1852 a 1867 se desempeñó como director de las determinaciones de longitud del US Coast Survey y de 1867 a 1874 como superintendente del Survey. Durante estos años, su prueba fue empleada constantemente por todos los empleados de este, los más activos y matemáticamente organización estadística inclinada de la época ".

El criterio de Peirce se discutió en el libro de William Chauvenet .

Aplicaciones

Una aplicación del criterio de Peirce es eliminar los puntos de datos deficientes de los pares de observaciones para realizar una regresión entre las dos observaciones (por ejemplo, una regresión lineal). El criterio de Peirce no depende de los datos de observación (solo características de los datos de observación), por lo que es un proceso altamente repetible que se puede calcular independientemente de otros procesos. Esta característica hace que el criterio de Peirce para identificar valores atípicos sea ideal en aplicaciones informáticas porque puede escribirse como una función de llamada.

Intentos anteriores

En 1855, BA Gould intentó facilitar la aplicación del criterio de Peirce mediante la creación de tablas de valores que representan valores a partir de las ecuaciones de Peirce. Todavía existe una desconexión entre el algoritmo de Gould y la aplicación práctica del criterio de Peirce.

En 2003, SM Ross (Universidad de New Haven) volvió a presentar el algoritmo de Gould (ahora llamado "método de Peirce") con un nuevo conjunto de datos de ejemplo y un trabajo completo del algoritmo. Esta metodología aún se basa en el uso de tablas de consulta, que se han actualizado en este trabajo (tabla de criterios de Peirce).

En 2008, el geólogo danés K. Thomsen intentó escribir un pseudocódigo. Si bien este código proporcionó algún marco para el algoritmo de Gould, los usuarios no pudieron calcular los valores informados por Peirce o Gould.

En 2012, C. Dardis lanzó el paquete R "Peirce" con varias metodologías (criterio de Peirce y método Chauvenet) con comparaciones de eliminaciones de valores atípicos. Dardis y el colaborador Simon Muller implementaron con éxito el pseudocódigo de Thomsen en una función llamada "findx". El código se presenta en la sección de implementación de R a continuación. Las referencias para el paquete R están disponibles en línea, así como una revisión no publicada de los resultados del paquete R.

En 2013, un reexamen del algoritmo de Gould y la utilización de módulos avanzados de programación de Python (es decir, numpy y scipy) hicieron posible calcular los valores de umbral de error al cuadrado para identificar valores atípicos.

Implementación de Python

Para utilizar el criterio de Peirce, primero se deben comprender los valores de entrada y retorno. El análisis de regresión (o el ajuste de curvas a los datos) da como resultado errores residuales (o la diferencia entre la curva ajustada y los puntos de observación). Por lo tanto, cada punto de observación tiene un error residual asociado con una curva ajustada. Al tomar el cuadrado (es decir, el error residual elevado a la potencia de dos), los errores residuales se expresan como valores positivos. Si el error al cuadrado es demasiado grande (es decir, debido a una mala observación), puede causar problemas con los parámetros de regresión (p. Ej., Pendiente e intersección para una curva lineal) recuperados del ajuste de la curva.

Fue idea de Peirce identificar estadísticamente lo que constituía un error como "demasiado grande" y, por lo tanto, identificarse como un "valor atípico" que podría eliminarse de las observaciones para mejorar el ajuste entre las observaciones y una curva. K. Thomsen identificó que se necesitaban tres parámetros para realizar el cálculo: el número de pares de observación (N), el número de valores atípicos que se eliminarán (n) y el número de parámetros de regresión (por ejemplo, coeficientes) utilizados en la curva. ajuste para obtener los residuos (m). El resultado final de este proceso es calcular un valor de umbral (de error al cuadrado) mediante el cual las observaciones con un error al cuadrado menor que este umbral deben mantenerse y las observaciones con un error al cuadrado mayor que este valor deben eliminarse (es decir, como un valor atípico) .

Debido a que el criterio de Peirce no toma observaciones, parámetros de ajuste o errores residuales como entrada, la salida debe volver a asociarse con los datos. Tomar el promedio de todos los errores cuadrados (es decir, el error cuadrático medio) y multiplicarlo por el error cuadrático umbral (es decir, la salida de esta función) dará como resultado el valor umbral específico de los datos utilizado para identificar valores atípicos.

El siguiente código de Python devuelve valores x-cuadrados para una N (primera columna) yn (fila superior) dadas en la Tabla 1 (m = 1) y la Tabla 2 (m = 2) de Gould 1855. Debido al método de Newton de iteración, tablas de consulta, como N versus log Q (Tabla III en Gould, 1855) yx versus log R (Tabla III en Peirce, 1852 y Tabla IV en Gould, 1855) ya no son necesarias.

Código Python

#!/usr/bin/env python3
import numpy
import scipy.special

def peirce_dev(N: int, n: int, m: int) -> float:
    """Peirce's criterion
    
    Returns the squared threshold error deviation for outlier identification
    using Peirce's criterion based on Gould's methodology.
    
    Arguments:
        - int, total number of observations (N)
        - int, number of outliers to be removed (n)
        - int, number of model unknowns (m)
    Returns:
        float, squared error threshold (x2)
    """
    # Assign floats to input variables:
    N = float(N)
    n = float(n)
    m = float(m)

    # Check number of observations:
    if N > 1:
        # Calculate Q (Nth root of Gould's equation B):
        Q = (n ** (n / N) * (N - n) ** ((N - n) / N)) / N
        #
        # Initialize R values (as floats)
        r_new = 1.0
        r_old = 0.0  # <- Necessary to prompt while loop
        #
        # Start iteration to converge on R:
        while abs(r_new - r_old) > (N * 2.0e-16):
            # Calculate Lamda
            # (1/(N-n)th root of Gould's equation A'):
            ldiv = r_new ** n
            if ldiv == 0:
                ldiv = 1.0e-6
            Lamda = ((Q ** N) / (ldiv)) ** (1.0 / (N - n))
            # Calculate x-squared (Gould's equation C):
            x2 = 1.0 + (N - m - n) / n * (1.0 - Lamda ** 2.0)
            # If x2 goes negative, return 0:
            if x2 < 0:
                x2 = 0.0
                r_old = r_new
            else:
                # Use x-squared to update R (Gould's equation D):
                r_old = r_new
                r_new = numpy.exp((x2 - 1) / 2.0) * scipy.special.erfc(
                    numpy.sqrt(x2) / numpy.sqrt(2.0)
                )
    else:
        x2 = 0.0
    return x2

Código Java

import org.apache.commons.math3.special.Erf;

public class PierceCriterion {

  /**
   * Peirce's criterion
   * <p>
   * Returns the squared threshold error deviation for outlier identification
   * using Peirce's criterion based on Gould's methodology.
   * <p>
   * Arguments:
   * - int, total number of observations (N)
   * - int, number of outliers to be removed (n)
   * - int, number of model unknowns (m)
   * Returns:
   * float, squared error threshold (x2)
   **/
  public static final double peirce_dev(double N, double n, double m) {
    //Check number of observations:
    double x2 = 0.0;
    if (N > 1) {
      //Calculate Q (Nth root of Gould 's equation B):
      double Q = (Math.pow(n, (n / N)) * Math.pow((N - n), ((N - n) / N))) / N;

      //Initialize R values(as floats)
      double r_new = 1.0;
      double r_old = 0.0;  // <-Necessary to prompt while loop

      //Start iteration to converge on R:
      while (Math.abs(r_new - r_old) > (N * 2.0e-16)) {
        //Calculate Lamda
        //(1 / (N - n) th root of Gould 's equation A'):
        double ldiv = Math.pow(r_new, n);
        if (ldiv == 0) {
          ldiv = 1.0e-6;
        }
        double Lamda = Math.pow((Math.pow(Q, N) / (ldiv)), (1.0 / (N - n)));
        //Calculate x -squared(Gould 's equation C):
        x2 = 1.0 + (N - m - n) / n * (1.0 - Math.pow(Lamda, 2.0));
        //If x2 goes negative, return 0:
        if (x2 < 0) {
          x2 = 0.0;
          r_old = r_new;
        } else {
          //Use x -squared to update R(Gould 's equation D):
          r_old = r_new;
          r_new = Math.exp((x2 - 1) / 2.0) * Erf.erfc(Math.sqrt(x2) / Math.sqrt(2.0));
        }
      }
    } else {
      x2 = 0.0;
    }
    return x2;
  }
}

Implementación de R

Código de Thomsen ha sido escrito con éxito en la siguiente llamada a la función, "FindX" por C. Dardis y S. Muller en 2012, lo que devuelve la desviación error máximo, . Para complementar el código Python presentado en la sección anterior, también se presentó el equivalente de R "peirce_dev" aquí, que devuelve la desviación máximo error al cuadrado, . Estas dos funciones devuelven valores equivalentes ya sea elevando al cuadrado el valor devuelto por la función "findx" o tomando la raíz cuadrada del valor devuelto por la función "peirce_dev". Las diferencias ocurren con el manejo de errores. Por ejemplo, la función "findx" devuelve NaN para datos no válidos mientras que "peirce_dev" devuelve 0 (lo que permite que los cálculos continúen sin manejo adicional de valores NA). Además, la función "findx" no admite ningún manejo de errores cuando el número de valores atípicos potenciales aumenta hacia el número de observaciones (arroja un error de valor perdido y una advertencia de NaN).

Al igual que con la versión de Python, el error al cuadrado (es decir, ) devuelto por la función "peirce_dev" debe multiplicarse por el error cuadrático medio del ajuste del modelo para obtener el valor delta al cuadrado (es decir, Δ2). Utilice Δ2 para comparar los valores de error al cuadrado del ajuste del modelo. Cualquier par de observación con un error al cuadrado mayor que Δ2 se considera valores atípicos y se puede eliminar del modelo. Se debe escribir un iterador para probar valores crecientes de n hasta que el número de valores atípicos identificados (comparando Δ2 con errores cuadrados de ajuste del modelo) sea menor que los supuestos (es decir, n de Peirce).

Código R

findx <- function(N, k, m) { 
  # method by K. Thomsen (2008)
  # written by C. Dardis and S. Muller (2012)
  # Available online: https://r-forge.r-project.org/R/?group_id=1473
  #
  # Variable definitions:
  # N :: number of observations
  # k :: number of potential outliers to be removed
  # m :: number of unknown quantities
  #
  # Requires the complementary error function, erfc:
  erfc <- function(x) 2 * pnorm(x * sqrt(2), lower.tail = FALSE)
  #
  x <- 1
  if ((N - m - k) <= 0) {
    return(NaN)
    print(NaN)
  }  else {
    x    <- min(x, sqrt((N - m)/k) - 1e-10)
    #
    # Log of Gould's equation B:
    LnQN <- k * log(k) + (N - k) * log(N - k) - N * log(N)
    #
    # Gould's equation D:
    R1   <- exp((x^2 - 1)/2) * erfc(x/sqrt(2))
    #
    # Gould's equation A' solved for R w/ Lambda substitution:
    R2   <- exp( (LnQN - 0.5 * (N - k) * log((N-m-k*x^2)/(N-m-k)) )/k )
    #
    # Equate the two R equations:
    R1d  <- x * R1 - sqrt(2/pi/exp(1))
    R2d  <- x * (N - k)/(N - m - k * x^2) * R2
    #
    # Update x:
    oldx <- x
    x    <- oldx - (R1 - R2)/(R1d - R2d)
    #
    # Loop until convergence:
    while (abs(x - oldx) >= N * 2e-16) {
      R1   <- exp((x^2 - 1)/2) * erfc(x/sqrt(2))
      R2   <- exp( (LnQN - 0.5 * (N - k) * log((N-m-k*x^2)/(N-m-k)) )/k )
      R1d  <- x * R1 - sqrt(2/pi/exp(1))
      R2d  <- x * (N - k)/(N - m - k * x^2) * R2
      oldx <- x
      x    <- oldx - (R1 - R2)/(R1d - R2d)
    }
  }
  return(x)
}
peirce_dev <- function(N, n, m) {
    # N :: total number of observations
    # n :: number of outliers to be removed
    # m :: number of model unknowns (e.g., regression parameters)
    #
    # Check number of observations:
    if (N > 1) {
       # Calculate Q (Nth root of Gould's equation B):
       Q = (n^(n/N) * (N-n)^((N-n)/N))/N
       #
       # Initialize R values:
       Rnew = 1.0
       Rold = 0.0  # <- Necessary to prompt while loop
       #
       while (abs(Rnew-Rold) > (N*2.0e-16)) {
           # Calculate Lamda (1/(N-n)th root of Gould's equation A'):
           ldiv = Rnew^n
           if (ldiv == 0) {
              ldiv = 1.0e-6
           }
           Lamda = ((Q^N)/(ldiv))^(1.0/(N-n))
           #
           # Calculate x-squared (Gould's equation C):
           x2 = 1.0 + (N-m-n)/n * (1.0-Lamda^2.0)
           #
           # If x2 goes negative, set equal to zero:
           if (x2 < 0) {
              x2 = 0
              Rold = Rnew
           } else {
              #
              # Use x-squared to update R (Gould's equation D):
              # NOTE: error function (erfc) is replaced with pnorm (Rbasic):
              # source: 
              # http://stat.ethz.ch/R-manual/R-patched/library/stats/html/Normal.html
              Rold = Rnew
              Rnew = exp((x2-1)/2.0)*(2*pnorm(sqrt(x2)/sqrt(2)*sqrt(2), lower=FALSE))
           }
       }
    } else {
       x2 = 0
    }
    x2
}

Notas

Referencias

  • Peirce, Benjamin , "Criterio para el rechazo de observaciones dudosas" , Astronomical Journal II 45 (1852) y Fe de erratas del artículo original .
  • Peirce, Benjamin (mayo de 1877 - mayo de 1878). "A criterio de Peirce". Actas de la Academia Estadounidense de Artes y Ciencias . 13 : 348–351. doi : 10.2307 / 25138498 . JSTOR  25138498 .
  • Peirce, Charles Sanders (1870) [publicado en 1873]. "Apéndice No. 21. Sobre la teoría de los errores de observación". Informe del Superintendente de la encuesta de la costa de los Estados Unidos que muestra el progreso de la encuesta durante el año 1870 : 200–224.. NOAA PDF Eprint (va a Informe p. 200, PDF p. 215). Enlaces a los informes anuales de la encuesta geodésica y costera de los EE .
  • Peirce, Charles Sanders (1982). "Sobre la teoría de los errores de observación". En Kloesel, Christian JW; et al. (eds.). Escritos de Charles S. Peirce: una edición cronológica . Volumen 3, 1872-1878. Bloomington, Indiana: Indiana University Press. págs.  140-160 . ISBN 0-253-37201-1. |volume=tiene texto extra ( ayuda )
  • Ross, Stephen, "Criterio de Peirce para la eliminación de datos experimentales sospechosos", J. Engr. Tecnología , vol. 20, núm. 2, otoño de 2003. [1]
  • Stigler, Stephen M. (marzo de 1978). "Estadística matemática en los primeros estados" . Annals of Statistics . 6 (2): 239–265. doi : 10.1214 / aos / 1176344123 . JSTOR  2958876 . Señor  0483118 .
  • Stigler, Stephen M. (1980). "Estadística matemática en los primeros estados". En Stephen M. Stigler (ed.). Contribuciones estadounidenses a la estadística matemática en el siglo XIX, volúmenes I y II . Yo . Nueva York: Arno Press.
  • Stigler, Stephen M. (1989). "Estadística matemática en los primeros estados". En Peter Duren (ed.). Un siglo de matemáticas en América . III . Providence, RI: Sociedad Matemática Estadounidense. págs. 537–564.
  • Hawkins, DM (1980). Identificación de valores atípicos . Chapman y Hall , Londres. ISBN  0-412-21900-X
  • Chauvenet, W. (1876) Un manual de astronomía esférica y práctica . JBLippincott, Filadelfia. (reimpresiones de varias ediciones: Dover, 1960; Peter Smith Pub, 2000, ISBN  0-8446-1845-4 ; Adamant Media Corporation (2 volúmenes), 2001, ISBN  1-4021-7283-4 , ISBN  1-4212-7259 -8 ; BiblioBazaar, 2009, ISBN  1-103-92942-9 )