Como ya vimos en el post sobre regresión lineal en Arduino, el principal problema que plantea Arduino para realizar cálculos estadísticos es la escasa capacidad de memoria y cálculo que tiene. Para ello en lugar de guardar todos los datos vamos a usar formulas que permiten aproximar los valores estadísticos que vamos a utilizar sin gastar casi recursos, la idea es guardar solo una aproximación.
En el siguiente enlace puedes encontrar la librería SimpleStatisticsArduino de Arduino que implenta lo explicado en este texto.
Para la varianza y la media usaremos las siguientes formulas que tratan de aproximar
numeroDeMuestras++;
media += (nuevoValor – media)/numeroDeMuestras;
media2 += (value^2 – media2)/numeroDeMuestras;
varianza = media2 – media^2;
Con estos valores podemos aproximar la suma de todas los datos:
suma = media*numeroDeMuestras;
La desviación estándar :
desviacionEstandar = sqrt(varianza);
Otros dos valores que podemos almacenar de forma muy sencilla y casi sin costes es el valor mínimo y máximo. Cada nuevo valor se comprueba:
if(minimo > nuevoValor){
minimo = nuevoValor;
}
if(maximo < nuevoValor){
maximo = nuevoValor;
}
Ahora con estos dos valores podemos calcular el valor central, que no es lo mismo que la media:
centro = (maximo – minimo) / 2;
Con esta estrategia solo necesitamos 6 variables para almacenar los datos sobre los que se calcula la estadística.
Estadística con dos variables en Arduino
Tenemos dos variables X e Y, partiendo de los cálculos del apartado anterior para cada una ahora podemos calcular los valores conjuntos, para ello debemos de almacenar dos variables más necesarias para calcular la covarianza:
mediaXY += ((XY)-mediaXY)/numeroDeMuestras;
covarianza = mediaXY – (mediaXmediaY);
Ahora con la covarianza podemos calcular la correlación:
correlacion = covarianza / (desviacionEstandarX * desviacionEstandarY);
Con estos datos podemos calcular los parámetros de la regresión lineal:
m = covarianza / varianzaX;
b = mediaY – m*mediaX;
Y la propia regresión:
y = m*x + b;
Si buscas una implementación de la idea de este post pero optimizada exclusivamente para la regresión lineal puede mirar la librería Regressino.
Por último podemos calcular el centroide que no es nada mas que el centro de cada una de las variables X e Y.
centroide = [centroX, centroY]
De esta forma se pueden calcular bastantes valores sin consumir casi memoria o recursos
Pingback: Error medio absoluto y error cuadrático medio en Arduino | Construyendo a Chispas
Pingback: Calcular la media aritmética, media geométrica, media armónica y media cuadrática en Arduino | Construyendo a Chispas