Operaciones estadísticas básicas con listas

Publicado por bygdle, Abril 25, 2016, 01:49:53 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

bygdle

Autor: NiuWeb
Versión de GM utilizada:  :GMS: Studio 1.4+
Descripción: Son un conjunto de scripts que permiten hallar valores estadísticos básicos de una lista. Estos valores son: sumatoria, mediana, moda y desviación estándar. La media no la incluyo porque al tener la sumatoria y la cantidad de datos ( ds_list_size()  ) se puede obtener fácilmente. Sería desperdiciar por completo un script.

Códigos:
Todos los scripts a continuación requieren de un sólo argumento: La lista a la que queremos sacarle los datos.

Sumatoria:
[gml]
///ds_list_sumatory(list)
var list = argument0;
var count = 0;
for(var i = 0; i < ds_list_size(list); i++)
    count += real(list[| i]);
return count;
[/gml]

Mediana:
[gml]
///ds_list_median(list);
var _list = argument0;
var list = ds_list_create();
ds_list_copy(list, _list);

ds_list_sort(list, true);

var size = ds_list_size(list);
if size >= 1 {
    var iseven = (frac(size / 2)) == 0;
    var med;
   
    if (iseven) {
        med = (list[| (size/2) - 1] + list[| size/2]) / 2;
    }
    else {
        med = list[| (size-1) / 2];
    }
    ds_list_destroy(list);
    return med;
}
else return 0;
[/gml]

Moda:
[gml]
///ds_list_mode(list);
var list = argument0;
var indexes = ds_list_create();
var amounts = ds_list_create();

if ds_list_size(list) >= 1 {
    var i, a, b, c, d;
   
    for(i = 0; i < ds_list_size(list); i++) {
        a = list[| i];
        b = ds_list_find_index(indexes, a);
       
        if (b == -1) {
            ds_list_add(indexes, a);
            ds_list_add(amounts, 0);
        }
        else
            amounts[| b] ++;
    }
   
    c = 0;
   
    for(i = 0; i < ds_list_size(amounts); i++) {
        c = max(c, amounts[| i]);
        if (c == amounts[| i])
            d = i;
    }
   
    var index = indexes[| d];
    var first = amounts[| 0];
    b = true;
    for(i = 0; i < ds_list_size(amounts); i++) {
        a = amounts[| i]
        if a != first
            b = false;
    }
   
    if(b)
        index = undefined;
   
    ds_list_destroy(amounts);
    ds_list_destroy(indexes);
   
    return index;
}
else return 0;
[/gml]
Esta función devuelve la última de las modas, es decir que de una lista con los valores {1, 2, 3, 2, 4, 5, 3} se obtendrá la moda 3. Y si no hay moda (todos los valores con la misma frecuencia) devolverá <undefined>

Desviación estándar:
[gml]
///ds_list_standev(list);
var list = argument0;

var m = 0;
for(var i = 0; i < ds_list_size(list); i++) {
    m += list[| i];
}

m = m / max(ds_list_size(list), 1);

var a, b;
b = 0;
for(i = 0; i < ds_list_size(list); i++) {
    a = list[| i];
    a = a - m;
    b += power(a, 2);
   
}

b = b / max(1, ds_list_size(list));

return sqrt(b);
[/gml]

Espero le pueda ser de utilidad a alguien :D
alaberga regué el café.

BA:STFW&RTFM

Johann

Eso esta buenísimo, así sea para resolver ejercicios de la tarea de estadística
Cita de: Fenris78Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: CalioSomos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.

Powered by EzPortal
SMF spam blocked by CleanTalk