Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Como implementar um programa para verificar se um conjunto de dados aparenta seguir a lei de Benford?

0 votos
89 visitas
perguntada Fev 5, 2016 em Estatística por danielcajueiro (5,376 pontos)  
Compartilhe

1 Resposta

0 votos
respondida Fev 5, 2016 por danielcajueiro (5,376 pontos)  

O programa abaixo pode ser usado como ponto de partida para checar se uma base de dados segue a lei de Benford:

import numpy as np
import math
import matplotlib.pyplot as plt

def benfordLaw():
    return [math.log10(1 + 1./i) for i in range(1, 10)]        

def fibonacci(n):
    fib=np.empty([n])
    fib[0]=1
    fib[1]=1
    for i in range(2,n):
        fib[i]=fib[i-1]+fib[i-2]
    return fib            
def firstDigit(x):
    e = math.floor(math.log10(x))
    return int(x*10**-e)

if __name__ == '__main__':
    numberOfEachDigit = np.zeros([9])
    n=1000
    fib=fibonacci(n)

    for i in range(n):
        j=firstDigit(fib[i])-1
        numberOfEachDigit[j]=numberOfEachDigit[j]+1
    total=sum(numberOfEachDigit)    
    probD=numberOfEachDigit/(1.0*total)
    benford= benfordLaw()

    #Plotting the results    

    resultadosBenford=plt.figure()
    x=np.array([1,2,3,4,5,6,7,8,9])
    ax = plt.subplot(111)
    dist=0.2
    ax.bar(x-dist, benford,width=0.3,color='b',align='center')
    ax.bar(x+dist, probD,width=0.3,color='r',align='center')
    plt.rcParams['xtick.labelsize'] = 8    
    ax.set_ylabel('Probability')
    ax.set_title('Benford in Blue and Fibonacci in Red')
    ax.set_xticks(x)
    ax.set_xticklabels( ('1','2', '3', '4', '5', '6', '7','8','9') )        

Nesse programa eu comparo os primeiros dígitos dos elementos de uma série de Fibonacci (que pode-se provar que assintoticamente segue a lei de Benford) com a Lei de Benford, como mostra a figura abaixo:

Fibonacci

Se você quiser usar esse programa para testar uma base específica, você apenas substituir a linha

    fib=fibonacci(n)

por

    fib=np.loadtxt('nomeDoArquivo.txt')

Como disse, o programa é um ponto de partida para testar se uma base de dados segue a Lei de Benford. Obviamente, existem testes estatísticos para comparar distribuições (veja por exemplo nosso livro).

...