Exemplo n.º 1
0
    def do_test(self,  lim_inf, lim_sup, _type, intervals):

        interval_size = truncate((lim_sup - lim_inf) / intervals, self.accuracy)

        ac = 0.0

        if _type != 3:
            for i in range(intervals):
                self.freq_observ[i] = 0

                k = truncate(lim_inf + interval_size * i, self.accuracy)
                k_prox = truncate(k + interval_size, self.accuracy)
                if _type != 3:
                    self.labels.append((k, k_prox))
                else:
                    self.labels.append((i, i))

            for i in self.data:
                k = int((i - lim_inf) // interval_size)

                if k == intervals:
                    self.freq_observ[k-1] += 1
                else:
                    self.freq_observ[k] += 1
        else:
            self.freq_observ = Counter(self.data)
            self.freq_observ.most_common()
            self.freq_observ = sorted(self.freq_observ.items())
            for i in self.freq_observ:
                self.labels.append((i, i))

        self.freq_esperadas = self.get_frecuencia_esperada(_type, self.labels)

        # self.agrupar_freq_esperadas()

        for i in self.freq_observ:
            if _type != 3:
                freq_esp = self.freq_esperadas[i]
                freq_obs = self.freq_observ[i]
            else:
                freq_esp = self.freq_esperadas[int(i[0])]
                freq_obs = self.freq_observ[int(i[0])][1]
            if freq_esp == 0:
                freq_esp = 1

            chi_2 = truncate(
                (pow(freq_obs - freq_esp, 2)) / freq_esp,
                self.accuracy
            )
            self.chi_2.append(chi_2)

            ac += chi_2
            self.chi_2_ac.append(ac)
Exemplo n.º 2
0
    def do_test(self):
        percentil = 1 / self.subintervals
        freq_esperada = self.n / self.subintervals

        # creo archivo si no existe, borro lo que ya estaba
        csv_filename = 'exports/data.csv'
        f = open(csv_filename, 'w+')
        f.close()

        for i in range(self.subintervals):
            key_interval = truncate(percentil * i, self.accuracy)
            label_interval = str(key_interval) + ' - ' + str(
                truncate(key_interval + percentil, self.accuracy))

            self.labels.append((key_interval, label_interval))

            self.freq_esperadas[key_interval] = freq_esperada
            self.freq_observ[key_interval] = 0

        write_csv = []
        for i in self.data:
            key = truncate(percentil * int(i[1] / percentil), self.accuracy)
            if int(key) == 1:
                self.freq_observ[truncate(1 - percentil, self.accuracy)] += 1
            else:
                self.freq_observ[key] += 1

            # guardo la serie en un csv cada 1000 registros
            write_csv.append(i[1])
            if len(write_csv) == 1000:
                with open(csv_filename, 'a') as csvfile:
                    writer = csv.writer(csvfile)
                    writer.writerows(map(lambda x: [x], write_csv))
                    write_csv.clear()

        # agrego los que faltaron, si no llego a 1000 registros
        if len(write_csv) > 0:
            with open(csv_filename, 'a') as csvfile:
                writer = csv.writer(csvfile)
                writer.writerows(map(lambda x: [x], write_csv))
                write_csv.clear()

        ac = 0.0
        for i in self.freq_observ:
            chi_2 = truncate(
                (pow(self.freq_observ[i] - self.freq_esperadas[i], 2)) /
                self.freq_esperadas[i], self.accuracy)
            self.chi_2.append(chi_2)

            ac += chi_2
            self.chi_2_ac.append(ac)
Exemplo n.º 3
0
 def get_frecuencia_esperada(self, serie, intervalos):
     listaFrecuenciaEsperada = []
     lambdaa = truncate((1 / self.calcularMedia(serie)), 9)
     for i in range(0, len(intervalos)):
         marcaClase = truncate(((intervalos[i][0] + intervalos[i][1]) / 2),
                               1)
         # probEsperadaConMarcaClase = truncate(lambdaa * math.exp(-lambdaa*marcaClase) * (intervalos[i][1] - intervalos[i][0]),4)
         probEsperadaConMarcaClaseAcum = truncate(
             (1 - math.exp(-lambdaa * intervalos[i][1])) -
             (1 - math.exp(-lambdaa * intervalos[i][0])), 4)
         frecuenciaEsperada = truncate(
             (len(serie) * probEsperadaConMarcaClaseAcum), 4)
         listaFrecuenciaEsperada.append(frecuenciaEsperada)
     return listaFrecuenciaEsperada
Exemplo n.º 4
0
 def get_frecuencia_esperada(self, serieEntera, intervalo):
     # eliminamos las repeticiones de la serie, pero sigue desordenada e incompleta
     serieSinRepeticiones = set(serieEntera)
     # la serie final es la que ya esta ordenada, completa y sin repeticiones
     serieFinal = self.ordenarYcompletarSerie(serieSinRepeticiones)
     lambdaa = self.calcularLambda(serieEntera)
     listaFrecuenciaEsperadaPoisson = []
     for i in range(0, len(serieFinal)):
         probabilidad = truncate(
             (((lambdaa**(serieFinal[i])) * math.exp(-lambdaa)) /
              math.factorial(serieFinal[i])), 4)
         frecuenciaEsperadaPoission = round(len(serieEntera) * probabilidad)
         listaFrecuenciaEsperadaPoisson.append(frecuenciaEsperadaPoission)
     return listaFrecuenciaEsperadaPoisson
    def get_frecuencia_esperada(self, serie, intervalos):
        listaFrecuenciaEsperadaNormal = []
        media = self.calcularMedia(serie)
        desviacionEstandar = self.calcularDevEstandar(serie)
        for i in range(0, len(intervalos)):
            marcaClase = truncate(((intervalos[i][0] + intervalos[i][1]) / 2),
                                  1)
            probabilidad = ((math.exp(-0.5 * (
                (marcaClase - media) / desviacionEstandar)**2)) /
                            (desviacionEstandar * math.sqrt(2 * math.pi))) * (
                                intervalos[i][1] - intervalos[i][0])
            frecuenciaEsperadaNormal = len(serie) * probabilidad
            listaFrecuenciaEsperadaNormal.append(frecuenciaEsperadaNormal)
        return listaFrecuenciaEsperadaNormal


# print(frecuenciaEsperadaNormal(serie,intervalos))
 def get_random(self):
     # formula metodo congruencial mixto
     x1 = ((self.a * self.xo) + self.c) % self.m
     self.set_xo(x1)
     return truncate((x1 / (self.m - 1)), self.ACCURACY)
 def get_random(self):
     # formula metodo congruencial multiplicativo
     x1 = (self.a * self.xo) % self.m
     self.set_xo(x1)
     return truncate((x1 / (self.m - 1)), self.ACCURACY)
Exemplo n.º 8
0
def get_random_numbers_python(n):
    # random.random() es la funcion random de python
    for i in range(n):
        yield i + 1, truncate(random.random(), ACCURACY)