Na parte anterior, o que mostrei
foi uma forma de resgatar modelos de MaxEnt
para descrever a abundância de linguagens, P(n),
através de uma variável oculta, 𝜖,
a qual referenciamos como "tempo de programação"
e assumimos que o sistema tinha duas restrições:
Ele estava restrito não só
a ter um número médio de projetos por linguagem,
fixamos a popularidade média de linguagens;
mas também fixamos
o tempo médio de programação dedicado a projetos em dada linguagem.
Então essa distribuição aqui fica com essa forma funcional.
E quando integramos fora essa variável 𝜖,
conseguimos algo dessa forma.
Então conseguimos uma previsão diferente para a distribuição de linguagens.
E conseguimos uma previsão que, pode-se argumentar, parece bem boa.
Certamente melhor que a distribuição exponencial.
Me sinto moralmente compelido a contar sobre a controvérsia
de quando tentamos criar estes modelos...
em particular, há um modelo mecanístico bem diferente que é bem similar.
Então essa é a log-série de Fisher [Fisher Log-Series].
E o argumento por trás dela, para explicar essa distribuição,
envolve a ideia de uma restrição adicional "oculta".
No problema open source, o que fiz foi descrever essa restrição adicional
como "tempo de programação", só porque parecia uma restrição do sistema.
Então temos fixo o tempo médio de programação,
não só o número médio de projetos.
Então isso quer dizer que linguagens podem ter popularidade e eficiência variáveis.
Na modelagem ecológica, "linguagens" são espécies,
e isso [n] é a abundância da espécie —
ou seja, o número de instâncias particulares da espécie.
E também taxa metabólica [𝜖]: quanta energia uma dada espécie consome.
Nesse caso, o sistema está restrito a certa abundância média de espécies
e certo consumo médio de energia.
Aqui, linguagens estão restritas a certa abundância
e certo consumo de energia de programação. Essa é a analogia.
Então podemos construir um modelo mecanístico
da popularidade de linguagens de programação.
Quando estudamos o problema de táxis,
quando produzimos o modelo mecanístico, conseguimos encontrar um bem simples
que tinha as mesmas previsões que o modelo MaxEnt.
Aqui, ao contrário, o que faremos é encontrar o modelo mecanístico
que terá um comportamento similar,
mas cuja forma funcional será levemente diferente.
Então, eis o modelo mecanístico:
imaginamos que linguagens começam com uma popularidade original.
Criar uma linguagem, por exemplo, requer escrever algum projeto nela.
Existe ao menos algum programador no começo de sua invenção,
que sabe como programar nela, quase por definição.
Então há duas formas como essa popularidade pode aumentar.
Por exemplo, linearmente.
Então, no primeiro dia tem 1 programador.
No segundo dia, mais um programador se junta ao original.
No terceiro dia, mais um programador se junta aos 2 primeiros.
Então, ao longo do tempo,
temos uma taxa de crescimento linear...
[crescimento linear] no tempo.
Porém, talvez um modelo mais plausível
de como linguagens acumulam popularidade
é multiplicativo.
No tempo 1, tem 1 programador,
e ele possui certa eficiência
em converter outros programadores à sua causa.
Então talvez ele consiga duplicar o número de programadores.
Então ele consegue duplicar o número de programadores,
porque sua linguagem é boa,
talvez porque quem goste de programar nela calhe de ser particularmente persuasivo.
No segundo dia, os dois programadores convertem duas pessoas cada,
porque eles são "o mesmo programador" no tocante à eficiência
e a linguagem em si é tão convincente quanto antes.
Então cada um dos programadores converte dois mais, e então temos 4.
Pelo mesmo argumento, vamos a 8,
e então esse é o modelo de crescimento exponencial,
onde o número de programadores como função do tempo
cresce multiplicativamente, invés de aditivamente.
Então tornemos esse modelo um pouco mais realista,
e, em particular, vamos permitir que esse fator multiplicativo,
que neste caso era 2,
deixemos que esse fator multiplicativo varie.
De fato, vamos tomar esse fator multiplicativo, 𝛼,
de alguma distribuição, e não importa de qual distribuição,
contanto que 𝛼 seja maior que 0,
então não é possível que todos os programadores sumam do nada.
Então [𝛼] é sempre maior que 0,
e é limitada em algum ponto,
então é impossível uma linguagem
se tornar infinitamente popular após um número finito de passos.
Então vamos tomar...
a cada dia, tomaremos um número 𝛼 dessa distribuição aqui.
Então, após um dia, há 𝛼 programadores.
Após 2 dias, temos 𝛼₁ -- que tomamos no primeiro dia
No segundo dia, temos 𝛼₁ vezes 𝛼₂ programadores,
e por aí vai, 𝛼₃ vezes 𝛼₂ vezes 𝛼₁, etc.
Então agora esse crescimento ocorre por um processo multiplicativo aleatório.
É similar ao crescimento que aconteceria por um processo aditivo aleatório,
mas agora,
invés de somarmos um número aleatório de programadores a cada dia,
multiplicamos o total de programadores a cada dia, por algum fator 𝛼
tomado desta distribuição.
Então sempre podemos converter esse processo multiplicativo
em um processo aditivo,
por um truque bem simples de tomar o logaritmo.
Com o tempo,
se contarmos números de programadores, estamos multiplicando,
mas se trabalharmos no espaço log, estamos só somando.
Estamos somando um número aleatório à distribuição.
Contanto que 𝛼 > 0 estritamente, então as somas serão sempre bem-definidas.
Agora, de repente, temos algo como um modelo aditivo no espaço log.
E, pelo Teorema do Limite Central,
se somarmos muitos números aleatórios,
essa distribuição tende à distribuição Gaussiana,
com alguma média particular 𝜇 e variância particular 𝜎.
Não nos preocupemos muito com 𝜇 e 𝜎,
mas foquemos que esse crescimento ocorre no espaço log.
A distribuição dessas somas
sobre escalas de tempo longas
acabam parecendo com uma distribuição Gaussiana.
O incremento médio por dia de uma linguagem
parece, no espaço log, com uma distribuição Gaussiana.
O que isso significa é que o modelo de crescimento exponencial
com incrementos multiplicativos aleatórios,
parecem com uma Gaussiana no espaço-log,
ou o que chamamos de [distribuição] log-normal
...no espaço "real" numérico.
Invés de olhar para o log da popularidade da linguagem,
olhe somente para a popularidade total
e o que isso significa
é que isso parece com a exponencial
de -(log(n) - 𝜇)²/2𝜎² [com sinal negativo],
e então temos que tomar cuidado para normalizar de acordo.
Então essa é a distribuição log-normal.
[Sinal negativo faltando, na lousa]
E um modelo mecanístico onde o crescimento de linguagens
acontece multiplicativamente,
onde uma linguagem ganha novos adeptos
proporcionalmente ao número de adeptos que ela já tem,
e ganha novos projetos proporcionalmente ao número de projetos que já tem,
dependente de seu ambiente —
é daí que vem a aleatoriedade multiplicativa vem.
𝛼 é aleatório,
não é uma constante.
A linguagem não precisa duplicar sempre.
Mas o fato de que ela cresce através de um processo aleatório multiplicativo,
e não aditivo,
quer dizer que temos um crescimento log-normal.
Então você pode dizer:
"Ok, imaginemos que linguagens crescem por esse processo log-normal.
Encontremos os parâmetros de melhor ajuste para 𝜇 e 𝜎."
Se você fizer isso, verá que o modelo mecanístico log-normal
parece ajustar muito bem também.
Ficamos impressionados de como a linha azul ajustou essa distribuição,
comparado ao modelo exponencial vermelho, o modelo MaxEnt,
que restringe somente n. O modelo vermelho.
Aqui o modelo azul é a log-série de Fisher.
Infelizmente, um modelo mecanístico...
e já dei um resumo desse modelo mecanístico aqui,
onde o que temos é
uma adição de vários incrementos multiplicativos aleatórios.
O modelo mecanístico também funciona...
Já vou dizer a vocês que [o modelo azul] é um ajuste melhor.
Se você fizer uma análise estatística, esses dois modelos têm dois parâmetros.
Se fizer uma análise estatística, a log-série de Fisher ajusta melhor.
Em particular, ela explica melhor esses casos de alta popularidade.
Esses desvios aqui parecem maiores que os desvios dali,
mas lembremos que isso é escala log.
Então esse chega muito mais perto aqui do que esse.
Então o modelo mecanístico, ao menos visualmente,
parece competir bem contra a log-série de Fisher
derivada de um argumento MaxEnt.
Estatisticamente falando, se olharmos ambos,
este aqui [log-normal] é levemente desfavorecido.
Mas, como muitos, o que você realmente quer
é uma evidência concreta a favor de um sobre o outro.
E acho que a melhor forma de achar evidências do tipo
é descobrir o que 𝜖 é no mundo real, se for alguma coisa.
Se conseguirmos criar uma teoria sólida sobre o que esse 𝜖 é,
e como podemos medi-los nos dados,
então poderíamos ver se essa distribuição conjunta foi bem reproduzida.
Se conseguirmos evidência, por exemplo,
para o fato que ambas variam juntas.
Que aqui temos um termo
que incrementa a popularidade se a linguagem se torna mais eficiente.
Então, se isso [𝜖] diminui,
isso [n] pode aumentar,
e a linguagem teria a mesma probabilidade de ser encontrada com essas propriedades.
E, claro, o problema é que
não sabemos como medir esse
misterioso tempo de programação, ou eficiência de programação.
Os ecólogos conseguem fazê-lo facilmente.
Porque eles sabem o que 𝜖 é.
Eles sabem que 𝜖 é o consumo metabólico de unidades de energia, que é
"quanto uma instância particular dessa espécie consome de energia,
ao longo de um dia, ou ao longo de sua vida".
E eles conseguem medi-lo, e,
de fato, conseguem medir essa distribuição conjunta.
Se formos estudar o ecossistema open source,
até agora não temos bem uma forma de medi-lo [𝜖],
e não conseguimos medir [a distribuição].
Então resta-nos um modelo que é
um modelo mecanístico de acúmulo de popularidade.
Aqui temos um modelo que fala sobre haver duas restrições no sistema:
Número médio [de projetos] e tempo de programação médio.