Tenho várias frequências de consulta e preciso estimar o coeficiente da lei de Zipf. Estas são as principais frequências:
26486
12053
5052
3033
2536
2391
1444
1220
1152
1039
Tenho várias frequências de consulta e preciso estimar o coeficiente da lei de Zipf. Estas são as principais frequências:
26486
12053
5052
3033
2536
2391
1444
1220
1152
1039
Respostas:
Atualização Atualizei o código com o estimador de máxima verossimilhança, conforme a sugestão @whuber. Minimizar a soma dos quadrados das diferenças entre as probabilidades teóricas do log e as frequências do log, embora dê uma resposta, seria um procedimento estatístico se fosse possível demonstrar que é algum tipo de estimador-M. Infelizmente, não consegui pensar em nenhum que pudesse dar os mesmos resultados.
Aqui está a minha tentativa. Calculo os logaritmos das frequências e tento ajustá-los aos logaritmos das probabilidades teóricas fornecidas por esta fórmula . O resultado final parece razoável. Aqui está o meu código em R.
O melhor ajuste quadrático então é .s = 1,47
A probabilidade máxima em R pode ser executada com a
mle
função (dostats4
pacote), que calcula os erros padrão de maneira útil (se a função de probabilidade máxima negativa correta for fornecida):Aqui está o gráfico do ajuste na escala log-log (novamente como @whuber sugeriu):
A linha vermelha é a soma dos quadrados, a linha verde é a probabilidade máxima.
fonte
Existem vários problemas diante de nós em qualquer problema de estimativa:
Estime o parâmetro.
Avalie a qualidade dessa estimativa.
Explore os dados.
Avalie o ajuste.
Para aqueles que usariam métodos estatísticos para compreensão e comunicação, o primeiro nunca deveria ser feito sem os outros.
Para a estimativa , é conveniente usar a máxima verossimilhança (ML). As frequências são tão grandes que podemos esperar que as conhecidas propriedades assintóticas se mantenham. ML usa a distribuição de probabilidade assumida dos dados. A lei de Zipf supõe que as probabilidades de sejam proporcionais a para algumas potências constantes (geralmente ). Como essas probabilidades devem somar à unidade, a constante de proporcionalidade é o recíproco da somai = 1 , 2 , … , n Eu- s s s > 0
Consequentemente, o logaritmo da probabilidade de qualquer resultado entre e éEu 1 1 n
Para dados independentes resumidos por suas frequências , a probabilidade é o produto das probabilidades individuais,fEu, i = 1 , 2 , … , n
Assim, a probabilidade do log para os dados é
Considerando os dados como fixos e expressando-os explicitamente como uma função de , torna-se o log Probabilidade .s
Minimização numérica do log Probabilidade com os dados fornecidos na pergunta produz e . Isso é significativamente melhor (mas apenas pouco) do que a solução dos mínimos quadrados (com base nas frequências de log) de com . (A otimização pode ser feita com uma pequena alteração no código R claro e elegante fornecido por mpiktas.)s^= 1.45041 Λ ( s^) = - 94046,7 s^eu s= 1,463946 Λ ( s^eu s) = - 94049,5
O ML também estimará os limites de confiança para da maneira usual. A aproximação do qui-quadrado fornece (se eu fiz os cálculos corretamente :-).[ 1.43922 , 1,46162 ]s [ 1,43922 , 1,46162 ]
Dada a natureza da lei de Zipf, a maneira correta de representar graficamente esse ajuste é em um gráfico de log-log , em que o ajuste será linear (por definição):
Para avaliar a qualidade do ajuste e explorar os dados, observe os resíduos (dados / ajuste, eixos de log-log novamente):
Isso não é muito grande: embora não exista correlação serial evidente ou heterocedasticidade nos resíduos, eles geralmente estão em torno de 10% (longe de 1,0). Com frequências na casa dos milhares, não esperaríamos desvios em mais do que alguns por cento. A qualidade do ajuste é prontamente testada com o qui quadrado . Obtemos com = 9 graus de liberdade; isso é uma evidência altamente significativa de desvios da lei de Zipf .χ2= 656.476
Como os resíduos parecem aleatórios, em algumas aplicações, podemos aceitar aceitar a Lei de Zipf (e nossa estimativa do parâmetro) como uma descrição aceitável, embora grosseira, das frequências . Essa análise mostra, no entanto, que seria um erro supor que essa estimativa tenha algum valor explicativo ou preditivo para o conjunto de dados examinado aqui.
fonte
As estimativas de máxima verossimilhança são apenas estimativas pontuais dos parâmetros . É necessário um esforço extra para encontrar também o intervalo de confiança da estimativa. O problema é que esse intervalo não é probabilístico. Não se pode dizer "o valor do parâmetro s = ... está com probabilidade de 95% na faixa [...]".s
Uma das linguagens de programação probabilística, como PyMC3, torna essa estimativa relativamente direta. Outros idiomas incluem Stan, que possui ótimos recursos e comunidade de suporte.
Aqui está minha implementação em Python do modelo ajustado nos dados dos OPs (também no Github ):
Aqui estão as estimativas dos parâmetros na forma de distribuição. Observe como compacta é a estimativa! Com probabilidade de 95%, o valor verdadeiro do parâmetro está na faixa [1.439,1.461]; a média é de cerca de 1,45, o que está muito próximo das estimativas do MLE.ss s
Para fornecer alguns diagnósticos básicos de amostragem, podemos ver que a amostragem estava "se misturando bem", pois não vemos nenhuma estrutura no rastreamento:
Para executar o código, é necessário o Python com os pacotes Theano e PyMC3 instalados.
Obrigado a @ w-huber por sua ótima resposta e comentários!
fonte
Aqui está minha tentativa de ajustar os dados, avaliar e explorar os resultados usando o VGAM:
No nosso caso, as hipóteses nulas de Chi square são que os dados são distribuídos de acordo com a lei do zipf, portanto, valores p maiores sustentam a alegação de que os dados são distribuídos de acordo com ele. Observe que mesmo valores p muito grandes não são uma prova, apenas um indicador.
fonte
Apenas por diversão, essa é outra instância em que o UWSE pode fornecer uma solução de formulário fechado usando apenas a maior frequência - embora a um custo de precisão. A probabilidade em é única entre os valores dos parâmetros. Se denota a frequência relativa correspondente, então,x=1 wx=1^
Nesse caso, como , obtemos:wx=1^=0.4695599775
Novamente, o UWSE fornece apenas uma estimativa consistente - sem intervalos de confiança, e podemos ver algumas compensações na precisão. A solução do mpiktas acima também é uma aplicação do UWSE - embora seja necessária programação. Para uma explicação completa do estimador, consulte: https://paradsp.wordpress.com/ - todo o caminho na parte inferior.
fonte
Minha solução tenta complementar as respostas fornecidas por mpiktas e whuber fazendo uma implementação em Python. Nossas frequências e faixas x são:
Como nossa função não está definida em todos os intervalos, precisamos verificar se estamos normalizando cada vez que a computamos. No caso discreto, uma aproximação simples é dividir pela soma de todos os y (x). Desta forma, podemos comparar diferentes parâmetros.
O resultado nos dá uma inclinação de 1.450408, como nas respostas anteriores.
fonte