En la sección anterior lo guíe por un conjunto de derivaciones matemáticas diseñadas para producir la máxima entropía de un problema de juguete, el problema de juguete es, como podemos modelar la distribución de tiempos de llegada de taxis en Nueva York, basados en un pequeño grupo de datos, y ese es un problema que puede ser de su interés personal pero ciertamente no es un problema de profundo interés científico. En esta sección, lo que voy a hacer es presentarle un problema razonablemente interesante y mostrarle como el enfoque de la máxima entropía puede aclarar algunas propiedades interesantes de ese sistema. En particular, el sistema que tengo en mente es el que la gente tiende a llamar el ecosistema de código abierto. Es la gran comunidad de gente que escribe código para que sea abierto, accesible, y depurable, y en general producido no por un individuo, ni por una corporación, con derechos de autor y control sobre el código, sino por una comunidad de gente compartiendo y editando código entre si El ecosistema de código abierto domina una gran fracción del código de código de computadora que usado por nosotros hoy, incluyendo no solo Mac OS X, claro, Linux. Es una gran historia de triunfo y nos gustaría estudiarla científicamente. Use la palabra ecosistema en parte, porque mucho de lo que voy a decirle es un conjunto de herramientas y derivaciones que aprendi de John Harte y de la gente que trabaja con John Harte en el enfoque de máxima entropía a… no sistemas sociales, si no, a sistemas biológicos, y en particular a ecosistemas. El libro de John Harte "Máxima entropía y ecología" Se lo recomiendo como una fuente de información en este tipo de herramientas que voy a mostrarle ahora. Mi objetivo es mostrarle que inclusive argumentos simples basados en máxima entropía pueden proveer conocimiento científico muy profundo. Lo que voy a usar como mi fuente de datos, porque ahora voy a estudiar el mundo empírico, es la pagina SourceForge. SourceForge ya no es el mayor repositorio de software abierto, quizás Github lo eclipso, pero por un largo periodo de tiempo tal vez desde 1999, y recopilamos datos hasta 2011 sobre esto, tiene un enorme archivo de proyectos que van desde diferentes tipos de juegos de computadora hasta editores de texto, a software de negocios y matemático, parte del código que he usado en mi propia investigación esta en SourceForge. Es un gran ligar para estudiar, en particular, el uso de lenguajes computadora. Aquí, lo que he graficado es la distribución de lenguajes usados en la comunidad de código abierto y encontrados en SourceForge. En el eje x tenemos el logaritmo del numero de proyectos escritos en un lenguaje en particular Puede ver que el logaritmo de cero es uno. En la base de datos hay alrededor de doce lenguajes que están en el orden de un solo proyecto Estos lenguajes son extremadamente raros, en otras palabras, en el movimiento de código abierto. Contrariamente en el otro extremo de esta escala logarítmica, aquí, en el cuatro, diez a la cuatro es diez mil, vemos que hay un pequeño numero de lenguajes extremadamente populares, estos son los lenguajes mas populares que encontrara en SourceForge, Tienen una popularidad desmesurada, ok? Y si sabe algo acerca de programación de computadoras no le sorprenderá saber que estos lenguajes son mayoritariamente derivados de C, como C, C++, Java, ok? En el medio entre estos extremadamente poco comunes, y estos increíblemente comunes que son mas o menos como las bacterias del movimiento de código abierto por aquí, en el medio tiene un gran numero de lenguajes moderadamente populares, ok? Así, esta distribución de lenguajes es lo que vamos a tratar de explicar usando métodos de máxima entropía, ok? Hay un pequeño numero de lenguajes poco comunes, un gran numero de lenguajes moderadamente populares, y un numero muy pequeño de lenguajes extremadamente populares, ok? Entonces, grafiqué eso como una distribución de probabilidad, de hecho, P de n donde n es el numero de proyectos en la comunidad de código abierto que usan ese lenguaje, y esta el la probabilidad de que su lenguaje tenga n proyectos en la comunidad de código abierto, lo que nos gustaría hacer construir un modelo de máxima entropía de esta distribución de aquí, yo represente los mismo datos de una manera un poco diferente, así es como la gente tiende a representarlos esta es la distribución del ranking de abundancia lo que los ecologistas llaman una distribución de abundancia de especies, Así, el lenguaje en el tope, aquí, es el lenguaje con el mayor numero de proyectos, y no va a sorprenderlo saber que resulta ser Java, hay veinte mil proyectos escritos en Java, el segundo en el ranking como puede ver es C++, luego C, luego PHP, y estos lenguajes raros tienen un ranking mas bajo, así, que números altos significan rangos bajos, como en 3er lugar, 4to lugar, entonces, el 100mo es el puesto esta el desafortunado lenguaje llamado Turing, que hasta donde se, solo hay dos proyectos escritos en Turing en el archivo, y puede ver algunos de mis lenguajes favoritos como Ruby, están por aquí, en esta zona de moderada popularidad. Entonces representamos esos datos, son los mismos datos, lo que acabo de graficar es el logaritmo de la abundancia en este eje, y aquí esta el ranking lineal en cambio aquí, donde le mostré el logaritmo, ok? esta es una gráfica log-log, esta es conocida como una gráfica log-lineal, así que estos son los datos reales. Así que la primera cosa que intentare es… Una distribución de máxima entropía de abundancia de lenguajes, en otras palabras, a la probabilidad de encontrar un lenguaje con n proyectos, y lo que vamos a hacer es vamos a restringir solo una cosa, la popularidad promedio de un lenguaje esta va a ser nuestra restriccion para el problema de máxima entropía, y vamos a elegir la distribución de probabilidad, p de n que maximiza la entropía, suma negativa p log p y de cero a infinito, de p log p, vamos a tratar de maximizar estas cantidades sujetas a esta restricción, y claro, siempre sujeta a la restricción de normalización, que p(n) es igual a la unidad, ok? Entonces esa es mi otra restricción, y claro, ya sabemos como resolver este problema, conocemos la forma funcional, es exactamente el mismo problema que el que aprendió a resolver cuando modelo el tiempo de espera de un taxi en Nueva York, ok? Usted modelo ese problema exactamente de la misma manera, Así que, solo voy a restringir el promedio del tiempo de espera, aquí solo voy a restringir el promedio de la popularidad de un lenguaje, popularidad significa el numero de proyectos escritos en ese lenguaje en el archivo, y así, sabemos que la forma funcional se vera como, se ve como algo como e a la menos lambda n, ok? todo sobre Z, y luego todo lo que tenemos que hacer es ajustar lambda y Z, ok? Tal que reproduzca la abundancia correcta, como la vemos en los datos, así que esta es la distribución de máxima entropía, es también, claro, un modelo exponencial, tiene una forma exponencial, y si realmente encontramos el valor de lambda y Z que reproducen mejor los datos, en otras palabras, que mejor satisfacen esta restricción, y satisfacen la máxima entropía, esto es lo que encontramos, ok? Esta banda roja de aquí son los contornos sigmas uno y dos del ranking de la distribución de abundancia, y lo que quiero que vea en esta gráfica es que se ajusta a los datos un increíblemente mal. La distribución de máxima entropía con esta restricción no reproduce los datos, no es capas de explicar… nuestro modelado, los datos de ninguna manera razonable, sub predice estos lenguajes extremadamente populares, es incapaz, en otras palabras, de reproducir el hecho de que hayan lenguajes como C y Python, que son extremadamente populares, sobre predice esta especie de régimen mesoscopico, sobre predice los lenguajes moderadamente populares, igual que sobre predice estos lenguajes poco comunes, esos lenguajes de rangos muy bajos, con muy pocos ejemplos en el archivo, entonces esto esta bien, esto es un fallo científico