tablas poligono histograma hacer graficas frecuencias frecuencia ejemplos ejemplo distribucion como perl integer equation curve-fitting data-partitioning

perl - poligono - ¿Cómo puedo adaptar una curva a una distribución de histograma?



poligono de frecuencia (1)

Creo que una distribución de Poisson es una estimación razonable. Teniendo en cuenta esa presunción, su problema ahora se convierte en uno de obtener la frecuencia máxima, k, dado N. Creo que tiene dos enfoques:

  1. descifrarlo desde un punto de vista matemático (comenzaría por mirar combinatoria , pero puede que no sea un buey particularmente bueno)
  2. supongamos que es poisson y mida el pico para cualquier N dado, como lo ha hecho anteriormente.

Una vez que tienes el pico (k), la estimación de lambda debería ser sencilla (prueba con algunas) y tienes tu curva.

Otro enfoque es trabajar todo en Python y preguntar sobre los tableros numpy o scipy :-)

HTH

Alguien me hizo una pregunta por correo electrónico sobre particiones enteras el otro día (ya que había lanzado un módulo Perl, Integer :: Partition, para generarlas), que no pude responder.

Fondo: aquí están todas las particiones enteras de 7 (la suma de cada fila es igual a 7).

7 6 1 5 2 5 1 1 4 3 4 2 1 4 1 1 1 3 3 1 3 2 2 3 2 1 1 3 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1

Ahora, si miramos las longitudes de cada partición y contamos cuántas hay de cada longitud:

1 1 2 3 3 4 4 3 5 2 6 1 7 1

... vemos que una partición tiene una longitud de 1 (7), una tiene una longitud de 7 (1 1 1 1 1 1 1). Hay 4 particiones que tienen una longitud de 3: (5 1 1), (4 2 1), (3 3 1), (3 2 2).

Para números más grandes de N, si grafica la distribución de las longitudes de partición, emerge una curva asimétrica, sesgada hacia el origen. Si tiene curiosidad, grafique los siguientes recuentos de longitud de partición para N = 40.

1 20 133 478 1115 1945 2738 3319 3589 3590 3370 3036 2637 2241 1861 1530 1236 995 790 627 490 385 297 231 176 135 101 77 56 42 30 22 15 11 7 5 3 2 1 1

Si está interesado en generar estos recuentos de distribución, aquí está el código que utilicé:

#! /usr/local/bin/perl use strict; use warnings; use Integer::Partition; my $n = shift || 1; while (1) { my $start = time; my $i = Integer::Partition->new($n); my %size; while (my $p = $i->next) { $size{scalar @$p}++; } open my $out, ''>>'', "bucket-count.out"; for my $s (sort {$a <=> $b} keys %size) { print $out "$n/t$s/t$size{$s}/n"; } close $out; my $delta = time - $start; print "$n/t$delta secs/n"; ++$n; }

(Nota: en mi computadora, N = 90 tarda aproximadamente 10 minutos en generar).

Entonces mi pregunta es: ¿qué ecuación se puede usar para que coincida con la curva de distribución observada? ¿Es un Gauss (puede una distribución gaussiana ser asimétrica?) O una distribución de Poisson, o alguna otra cosa?

¿Cómo lo soluciono para N? Si recuerdo mis matemáticas de la escuela secundaria, puedo determinar el pico al resolver cuando la derivada se cruza con 0. ¿Cómo puedo producir la derivada? He buscado en la web pero todo lo que recupero son abstrusos papeles matemáticos. Solo necesito un código :)