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.