regresión lineal y cuadrática - pronósticos · regresión lineal y cuadrática implementación...
TRANSCRIPT
Regresión lineal y cuadrática
Regresión lineal y cuadráticaPronósticos
Efraín Soto Apolinar.
Programa de Posgrado en Ingeniería de SistemasFIME – UANL
21 de marzo de 2008
Regresión lineal y cuadrática
Índice
Regresión lineal y cuadráticaRegresión lineal y cuadrática
Fundamentos matemáticos
Este método es muy utilizado.Pronostica solamente casos lineales o cuadráticos.Interpolación Vs. Extrapolación.
Regresión lineal y cuadráticaRegresión lineal
Fundamentos matemáticosDeducción
Conocemos n datos (xi , yi ).Queremos encontrar la recta que mejor se ajusta a los n datos.Suponemos que la recta es:
y = β + m x
donde β y m son parámetros a determinar.
Regresión lineal y cuadráticaRegresión lineal
Fundamentos matemáticosDeducción
Gráficamente tenemos la siguiente situación:
x1 2 3 4 5 6 7
y
1
2
3
4
5
6
Regresión lineal y cuadráticaRegresión lineal
Fundamentos matemáticosDeducción
Gráficamente tenemos la siguiente situación:
x1 2 3 4 5 6 7
y
1
2
3
4
5
6
y = β + m x
Regresión lineal y cuadráticaRegresión lineal
Fundamentos matemáticosDeducción
Gráficamente tenemos la siguiente situación:
x1 2 3 4 5 6 7
y
1
2
3
4
5
6
y = β + m x
δi
Regresión lineal y cuadráticaRegresión lineal
Fundamentos matemáticosDeducción
Gráficamente tenemos la siguiente situación:
x1 2 3 4 5 6 7
y
1
2
3
4
5
6
y = β + m x
δiδj
Regresión lineal y cuadráticaRegresión lineal
Fundamentos matemáticosDeducción
Gráficamente tenemos la siguiente situación:
x1 2 3 4 5 6 7
y
1
2
3
4
5
6
y = β + m x
δ2iδ2j
Regresión lineal y cuadráticaRegresión lineal
Fundamentos matemáticosDeducción
Defino el error total:
E =n∑
i=1
δ2i
=n∑
i=1
(yi − β −m xi )2
Necesitamos encontrar los parámetros β y m que minimicen E .
Regresión lineal y cuadráticaRegresión lineal
Fundamentos matemáticosDeducción
Derivamos respecto a los parámetros:
dEdβ
= −2n∑
i=1
(yi − β −m xi )
dEdm
= −2n∑
i=1
(yi − β −m xi ) xi
Para encontrar el mínimo igualamos a cero y resolvemos el S.E.L.para β y m
Regresión lineal y cuadráticaRegresión lineal
Fundamentos matemáticosDeducción
El S.E.L. es:
n β + m∑
xi =∑
yi
β∑
xi + m∑
x2i =∑
xi yi
Ahora resolvemos el S.E.L. para β y m
Regresión lineal y cuadráticaRegresión lineal
Fundamentos matemáticosDeducción
La solución es:
m =n∑
xi yi −∑
xi∑
yi
n∑
x2i − (∑
xi )2
β =
∑yi −m
∑xi
n
Regresión lineal y cuadráticaRegresión cuadrática
Fundamentos matemáticosDeducción
De manera semejante resolvemos el caso para encontrar la parábolade mejor ajuste.
x1 2 3 4 5 6 7
y
1
2
3
4
5
6
y = β + m xy = a x2 + b x + c
Regresión lineal y cuadráticaRegresión cuadrática
Fundamentos matemáticosDeducción
De manera semejante resolvemos el caso para encontrar la parábolade mejor ajuste.
x1 2 3 4 5 6 7
y
1
2
3
4
5
6y = a x2 + b x + c
Regresión lineal y cuadráticaRegresión cuadrática
Fundamentos matemáticosDeducción
En este caso el error total es:
E =n∑
i=1
δ2i
=n∑
i=1
(yi − a x2i − b xi − c
)2Necesitamos encontrar los parámetros a, b y c que minimicen E .
Regresión lineal y cuadráticaRegresión cuadrática
Fundamentos matemáticosDeducción
Derivamos respecto a los parámetros:
dEdc
= −2n∑
i=1
(yi − a x2i − b xi − c
)dEdb
= −2n∑
i=1
(yi − a x2i − b xi − c
)xi
dEda
= −2n∑
i=1
(yi − a x2i − b xi − c
)x2i
Para encontrar el mínimo igualamos a cero y resolvemos el S.E.L.para a, b y c
Regresión lineal y cuadráticaRegresión cuadrática
Fundamentos matemáticosDeducción
El S.E.L. es:
a∑
x2i + b∑
xi + n c =∑
yi
a∑
x3i + b∑
x2i + c∑
xi =∑
xi yi
a∑
x4i + b∑
x3i + c∑
x2i =∑
x2i yi
Ahora resolvemos el S.E.L. para a, b y c
Regresión lineal y cuadráticaRegresión cuadrática
Fundamentos matemáticosDeducción
La solución es:
a =
∣∣∣∣∣∣∑
yi∑
xi n∑xi yi
∑x2i
∑xi∑
x2i yi∑
x3i∑
x2i
∣∣∣∣∣∣∣∣∣∣∣∣∑
x2i∑
xi n∑x3i
∑x2i
∑xi∑
x4i∑
x3i∑
x2i
∣∣∣∣∣∣b =
∑xi(∑
yi − a∑
x2i)− n
∑xiyi − a
∑x3i
(∑
xi )2 − n
∑x2i
c =
∑yi − a
∑x2i − b
∑xi
n
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
/* Nombre del archivo: CR.cppEste programa pide las coordenadas (x,y) de n puntosy los graba en un archivo. Después lee estos datos ycalculaa) la recta demejor ajuste, la cual se expresa como:
y = beta + mxb) La parábola de mejor ajuste, que se expresa como:
y = ax^2 + bx + cpor el método de mínimos cuadrados.--------------------------------------------------------------------Autor: Efraín Soto ApolinarEmail: [email protected]
[email protected] de última Modificación: 21 de marzo de 2008-------------------------------------------------------------------- */
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
#include <cstdio> //#include <cstdlib> //#include <iostream> // Funciones básicas para input/output#include <conio.h> // para usar: getche, getch#include <fstream> // para grabar los datos generados...using namespace std;int main(void){
char respuesta, letra;// char file_name[15];int i, j, n; // contadoresdouble a, b, c; // parámetros para parábola...double m, beta; // parámetros para recta...double Da = 0, Dp = 0;double xi, yi; // datosdouble Sx, Sy, Sx2, Sx3, Sx4, Sxy, Sx2y; // sumas de datos...double Error_p = 0, Error_r = 0;double dip, dir, y_approxp, y_approxr;
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
for(;;){ // for infinito...Sx = 0; Sy = 0; Sxy = 0;Sx2 = 0; Sx3 = 0; Sx4 = 0; Sx2y = 0;
// Información sobre el programa...cout << "\n\nEste programa pide un grupo de datos ";cout << "\nque corresponden a las coordenadas de n";cout << "\npuntos en el plano, guarda esta información";cout << "\nen un archivo y después lee esa información";cout << "\npara encontrar la parábola de regresión";cout << "\n\n\nPor favor, introduce las coordenadas de ";cout << "\nlos puntos conocidos, ingresando primero";cout << "\nlacoordenada en x y después la coordenada en y";cout << "\nCuando hayas terminado introduce el número ";cout << "\n1 000 000, pero sin espacios.";
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
ifstream in_stream;ofstream out_stream;// cout << "\nNombre del archivo: ";// cin >> file_name;//out_stream.open(file_name); // creo y abro el archivo...//out_stream.open("CR.txt"); // creo y abro el archivo...if (out_stream.fail()){ // si no puede abrir el archivo...
cout << "\n\nNo se pudo abrir el archivo...";cout << "\nPor favor, reinicie el programa...";exit(1); // Termina el programa
}
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
for (i = 1 ; ; i++){cout << "\nCoordenada en x del punto " << i << ": ";cin >> xi;if (xi == 1000000){cout << "\n\n\nEl último valor no se incluye...";out_stream.close();// Cierro el archivo...cout << "\nLos datos se han grabado correctamente...";cout << "\n\nProcesando información...";n = i - 1; // Número total de datos...break;}
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
cout << "\nCoordenada en y del punto " << i << ": ";cin >> yi;
if (yi == 1000000){cout << "\n\n\nEl último valor no se incluye...";out_stream.close();// Cierro el archivo...cout << "\nLos datos se han grabado correctamente...";cout << "\n\nProcesando información...";n = i - 1; // número total de datos...break;}out_stream << xi << " " << yi << " i\n";cout << "Dato " << i << " grabado correctamente";cout << "\n";} // Termino de grabar la información...
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
// Abrimos el archivo para leer...in_stream.open("CR.txt");if (in_stream.fail()){ // si no puede abrir el archivo...
cout << "\n\nNo se pudo abrir el archivo...";cout << "\nPor favor, reinicie el programa...";exit(1); // Termina el programa
}
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
for (j=1; j <= n ; j++){ // realizo cálculos...in_stream >> xi >> yi;do { // estoy buscando el siguiente renglón
in_stream >> letra;} while (!letra == ’\n’);//Sx += xi; // Suma de xSy += yi; // Suma de ySxy += xi * yi; // Suma de xySx2 += xi * xi; // Suma de x cuadradaSx3 += xi * xi * xi; // Suma de x cúbicaSx4 += xi * xi * xi * xi; // Suma x cuartaSx2y += xi * xi * yi;}// Cierro el archivo de lectura...in_stream.close();
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
// Calculo parámetros de recta...m = (n * Sxy - Sx * Sy) / (n * Sx2 - Sx * Sx);beta = (Sy - m * Sx) / n;
// Calculo los parámetros de parábola...Da = Sy * Sx2 * Sx2 + n * Sxy * Sx3 + Sx * Sx * Sx2y;Da = Da - n * Sx2 * Sx2y - Sx * Sx3 * Sy - Sx * Sxy * Sx2;Dp = Sx2 * Sx2 * Sx2 + n * Sx3 * Sx3 + Sx4 * Sx * Sx;Dp = Dp - n * Sx2 * Sx4 - 2 * Sx * Sx2 * Sx3;a = Da / Dp;b = (Sx * (Sy - a * Sx2) - n * (Sxy - a * Sx3)) /
(Sx * Sx - n * Sx2);c = (Sy - a * Sx2 - b * Sx) / n;
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
// Muestro los resultados...cout << "\n\n\n"; // espaciocout << "La recta de mejor ajuste es: \n";cout << "\n y = " << beta << " + " << m << " x ";cout << "\n\n\n"; // espaciocout << "La parábola de mejor ajuste es: \n";cout << "\n y = " << a << " x^2 + " << b << " x + " << c;cout << "\n\n\n";
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
// Vuelvo a abrir el archivo donde están grabados los datos...in_stream.open("CR.txt");if (in_stream.fail()){ // si no puede abrir el archivo...
cout << "\n\nNo se pudo abrir el archivo...";cout << "\nPor favor, reinicie el programa...";exit(1); // Termina el programa
}
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
for (j=1; j <= n ; j++){ // realizo cálculos...in_stream >> xi >> yi;do { // estoy buscando el siguiente renglón
in_stream >> letra;} while (!letra == ’\n’);//// cálculo con la parábola de regresión...y_approxp = a * xi * xi + b * xi + c;y_approxr = beta + m * xi;// discrepancia...dip = (yi - y_approxp) * (yi - y_approxp);dir = (yi - y_approxr) * (yi - y_approxr);Error_p += dip; // Error totalError_r += dir;
}
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
// Cierro el archivo de lectura...in_stream.close();cout << "\n\n\n"; // espaciocout << "\nError total para la recta: " << Error_r;cout << "\nError total para la parábola: " << Error_p;cout << "\n\n\n"; // espaciocout << "Generando datos de la parábola de mejor ajuste...";// creo y abro el archivo...// pma = parábola de mejor ajuste.out_stream.open("pma.txt");if (out_stream.fail()){ // si no puede abrir el archivo...
cout << "\n\nNo se pudo abrir el archivo...";cout << "\nPor favor, reinicie el programa...";exit(1); // Termina el programa
}
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
// Reinicio las coordenadas...xi = 0;yi = 0;for (i = 0 ; i <= 100 ; i++){
yi = a * xi * xi + b * xi + c;// grabamos los datos en el archivo...out_stream << xi << " " << yi << " i\n";xi = xi + 0.07;
}cout << "\n\n\nSe han grabado 100 datos en el intervalo";cout << "\n(0,7) en el archivo <<pma.txt>>";out_stream.close();// Cierro el archivo...
Regresión lineal y cuadráticaImplementación
ImplementaciónCódigo del programa
// pregunto si desea salir...cout << "\n\n\nPresione < S > para salir...";respuesta = getche();if ((respuesta == ’S’)||(respuesta == ’s’)){
break; // Salir del ciclo for inicial...}cout << "\n\n\n";
} // end for infinito...return 0;}
Regresión lineal y cuadráticaUn caso de ejemplo
EjemploUn caso de ejemplo
Consideramos los siguientes datos:
x y
1 0.52 2.53 2.04 4.05 3.56 6.07 5.5
Regresión lineal y cuadráticaUn caso de ejemplo
EjemploGráfica de datos
x1 2 3 4 5 6 7
y
1
2
3
4
5
6
Regresión lineal y cuadráticaResultados
EjemploResultados
El programa arroja los siguientes resultados:
Recta de mejor ajuste:
y = 0.0714286 + 0.839286 x .
Parábola de mejor ajuste:
y = −0.0297619 x2 + 1.07738 x − 0.285714
Error total para la recta: 2.99107Error total para la parábola: 2.91667
Regresión lineal y cuadráticaResultados
ResultadosRecta de regresión
x1 2 3 4 5 6 7
y
1
2
3
4
5
6
y = 0.0714286 + 0.839286 x
Regresión lineal y cuadráticaResultados
ResultadosParábola de regresión
x1 2 3 4 5 6 7
y
1
2
3
4
5
6
y = 0.0714286 + 0.839286 xy = −0.02976 x2 + 1.077 x − 0.2857
Regresión lineal y cuadráticaResultados
DesventajasDesventajas del método
Se requiere más información.Cada parámetro tiene asociado un error.El método de regresión aproxima bien en interpolación NO enextrapolación.El proceso no es estocástico, sino determinista.No se conoce la distribución de las discrepancias.
Regresión lineal y cuadráticaResultados
VentajasVentajas del método
Parámetros con errores pequeños.Mientras mayor información se tenga, los parámetros tienen menoserrores.Puede servir para aproximar datos faltantes.
Regresión lineal y cuadráticaResultados
GraciasFin de la presentación
Preguntas, comentarios, sugerencias...