Mostrando entradas con la etiqueta Benford. Mostrar todas las entradas
Mostrando entradas con la etiqueta Benford. Mostrar todas las entradas

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

2014-10-11

Ley de Benford en R

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.

Distribución

En R, al igual que hicimos en Excel, podemos calcular la tabla con la probabilidad para cada dígito. En R, al contrario de Excel, log calcula por defecto el logaritmo natural. Para calcular el logaritmo en base 10, necesitamos especificar la base o usar la función log10.

benford <- log10(1+1/(1:9)) # O log(1+1/(1:9), base = 10)
data.frame(benford)
     benford
1 0.30103000
2 0.17609126
3 0.12493874
4 0.09691001
5 0.07918125
6 0.06694679
7 0.05799195
8 0.05115252
9 0.04575749 
sum(benford) # Comprobamos que suma 1
[1] 1

Gráficos

Si representamos el vector sin ningún tipo de argumento, obtenemos el siguiente gráfico de barras.

barplot(benford)
Buscamos un formato similar al creado en la entrada ley de Benford en Excel. Formateamos el gráfico suministrando los argumentos necesarios.

barplot(rev(benford*100), # Revierte el orden
        las = 1, # Etiquetas del eje horizontales 
        main = "Ley de Benford",
        xlab = "%",
        ylab = "Dígitos",
        names.arg = c(9:1), # Dígitos orden inverso 
        horiz = TRUE,       # Barras horizontales
        col = "steelblue", 
        border = "white", 
        xlim = c(0, 35))    # Amplia el máximo de la escala                                                                                          
grid(ny = 0) # Líneas de división

Referencias:

?log
?barplot
Bendford's law, mathematical statement
Benford law and lognormal distributions

Entradas relacionadas:
Ley de Benford en Excel
Distribución de frecuencias en Ms Excel

2014-09-10

Ley de Benford en Excel

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.

Gráficos convencionales

En Excel elaboramos el siguiente gráfico de barras, donde d es el dígito y P(d) la probabilidad de ocurrencia del mismo. Para calcular P(d), asumiendo que el 1 está en la celda A2, escribimos en B2 la fórmula =LOG(1+1/A2) y arrastramos el controlador de relleno hacia abajo.

Minigráficos

En Excel 2013, también podemos utilizar la herramienta Analizar los datos al instante y añadir un gráfico en miniatura.

Para ello, debemos transponer los datos de la tabla, seleccionar las celdas que contienen los datos y hacer clic en el botón Análisis rápido.

Como se puede apreciar el gráfico creado es demasiado pequeño en este caso. Para ampliarlo lo arrastramos a otra celda y cambiamos el ancho y alto de la celda.

Si necesitamos calcular la frecuencia de ocurrencias de unos datos:

1. Extraemos el primer dígito empezando por la izquierda: =IZQUIERDA(A1;1)
2. Creamos la tabla de frecuencias usando la fórmula matricial FRECUENCIA. En el argumento datos incluimos el rango con el primer dígito y en grupos los dígitos del 1 al 9.

Entradas relacionadas

Nube de datos