Java Regresión Lineal Código
Encontramos un buen ejemplo Java de la recta de regresión aquí, donde se explica adecuadamente. Vamos a poner el código Java para el cálculo de la regresión lineal dada una nube de puntos. Listo para un copy/paste. Es sencillo.
// funcion y= ax+b public static double[] calcRectaRegresionYsobreX(double[] lasX,
double[] lasY) { double[] retVal = new double[3]; double mediaX = calcMedia(lasX); double mediaY = calcMedia(lasY); double varianzaX = (calcMediaDeLosCuadrados(lasX) - Math.pow(mediaX, 2)); double varianzaY = (calcMediaDeLosCuadrados(lasY) - Math.pow(mediaY, 2)); double covarianza = calcMediaDeLosProductos(lasX, lasY) - (mediaX * mediaY); double diviCovaX = covarianza / varianzaX; retVal[0] = diviCovaX;
// aqui devuelve la pendiente de la recta retVal[1] = -(diviCovaX * mediaX) + mediaY;
// aqui devuelve el parametro independiente if ((Math.sqrt(varianzaX) * Math.sqrt(varianzaY))==0){ retVal[2]=1; } else { retVal[2] = covarianza / (Math.sqrt(varianzaX) *
Math.sqrt(varianzaY)); // esto es la correlacion r } return retVal; } // funcion x= ay + b public static double[] calcRectaRegresionXsobreY(double[] lasX, double[] lasY) { double[] retVal = new double[3]; double mediaX = calcMedia(lasX); double mediaY = calcMedia(lasY); double varianzaX = (calcMediaDeLosCuadrados(lasX) - Math.pow(mediaX, 2)); double varianzaY = (calcMediaDeLosCuadrados(lasY) - Math.pow(mediaY, 2)); double covarianza = calcMediaDeLosProductos(lasX, lasY) - (mediaX * mediaY); double diviCovaY = covarianza / varianzaY; retVal[0] = diviCovaY;
// aqui devuelve la pendiente de la recta retVal[1] = -(diviCovaY * mediaY) + mediaX;
// aqui devuelve el parametro independiente retVal[2] = covarianza / (Math.sqrt(varianzaX) *
Math.sqrt(varianzaY)); // esta es la correlacion r return retVal; } public static double calcMedia(double[] valores) { double retVal = 0; for (int i = 0; i < valores.length; i++) { retVal += valores[i]; } return retVal / valores.length; } public static double calcMediaDeLosCuadrados(double[] valores) { double retVal = 0; for (int i = 0; i < valores.length; i++) { retVal += Math.pow(valores[i], 2); } return retVal / valores.length; } public static double calcMediaDeLosProductos(double[] valores1,
double[] valores2) { double retVal = 0; for (int i = 0; i < valores1.length; i++) { retVal += valores1[i] * valores2[i]; } return retVal / valores1.length; }
Simplemente, llamaremos al método calcRectaRegresionYSobreX pasándole un array de valores de X y un array de valores de Y (es decir, en definitiva, una lista de puntos).
Retorno de la función
Para una función y=ax+b , esta función nos devolverá un vector de doubles de la siguiente manera.posición[0] = pendiente de la recta (a)
posición[1] = término independiente (b)
posición[2] = correlación (grado de unión de -1 a 1)
Así de sencillo. Ya tenemos la función de la recta de regresión de la nube de puntos dada y el índice de correlación.
Si necesitas una explicación más detallada, prueba aquí.
y si quiero solo la correlacion?
ResponderEliminarTe devuelve la pendiente, el término independiente y la correlacion. Si quieres solo la correlación, muy fácil, coge solo la correlación, es decir, el valor[2]
ResponderEliminarposición[0] = pendiente de la recta (a)
posición[1] = término independiente (b)
posición[2] = correlación (grado de unión de -1 a 1)
Gracias
ResponderEliminarMuchisimas Gracias!!!
ResponderEliminarcopy y paste donde?
ResponderEliminar