2015-01-28

Ley de Benford en Ms Access

Title La ley de Benford, también conocida como la ley del primer dígito, se refiere a la frecuencia de distribución del primer dígito en muchos de los números que aparecen en la vida real. En esta distribución, el 1 aparece con una frecuencia aproximada del 30% mientras que el 9 aparece con una frecuencia menor del 5%. Por primer dígito se refiere al primer dígito no nulo o significativo.

Esta ley se puede aplicar a una gran variedad de fuentes de datos: facturas de electricidad, direcciones de calles, precios de acciones, cifras de población, tasas de mortalidad, longitud de los ríos o constantes físicas y matemáticas. Se ha aplicado en la detección de fraudes en contabilidad, resultados electorales y científicos.

Ejemplo

Queremos calcular la frecuencia relativa del campo Cargo de la tabla Pedidos de la base de datos Neptuno. El resultado final es una tabla con los dígitos, su frecuencia absoluta, el total de registros y la frecuencia porcentual.

Solución 1

En dos pasos:

  1. Consulta intermedia (qry_Total): calcula el total de registros de la tabla cuyo último dígito del campo Cargo es mayor que cero.
  2. SELECT COUNT(Pedidos.Cargo) AS Total
    FROM Pedidos
    WHERE (((Mid([Cargo],1,1))>0));
    
  3. Consulta final (qry_BenfordLaw) que calcula la frecuencia relativa usando el total de la consulta anterior.

SELECT Mid([Cargo],1,1) AS Dígito, 
COUNT(Pedidos.Cargo) AS Frecuencia, 
qry_Total.Total, 
COUNT([Pedidos]![Cargo])/[Total] AS Porcentaje
FROM Pedidos, qry_Total
GROUP BY Mid([Cargo],1,1), qry_Total.Total
HAVING (((Mid([Cargo],1,1))>0));

Solución 2

Creando una subconsulta evitando la consulta intermedia.

SELECT Mid([Cargo],1,1) AS Dígito, 
COUNT(Pedidos.Cargo) AS Frecuencia, 
(select count([Cargo]) FROM Pedidos WHERE (((Mid([Cargo],1,1))>0))) AS Total, 
Count([Pedidos]![Cargo])/[Total] AS Porcentaje
FROM Pedidos
GROUP BY Mid([Cargo],1,1)
HAVING (((Mid([Cargo],1,1))>0));
La subconsulta es idéntica a la consulta intermedia (qry_Total) que realizamos en la solución 1.

(SELECT COUNT([Cargo]) FROM Pedidos WHERE (((Mid([Cargo],1,1))>0))) AS Total

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos