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
Eso esta buenísimo, así sea para resolver ejercicios de la tarea de estadística