Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación...

42
Regresión lineal y cuadrática Regresión lineal y cuadrática Pronósticos Efraín Soto Apolinar. Programa de Posgrado en Ingeniería de Sistemas FIME – UANL 21 de marzo de 2008

Transcript of Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación...

Page 1: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 2: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

Regresión lineal y cuadrática

Índice

Page 3: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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.

Page 4: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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.

Page 5: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 6: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 7: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 8: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 9: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 10: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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 .

Page 11: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 12: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 13: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 14: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 15: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 16: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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 .

Page 17: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 18: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 19: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 20: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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-------------------------------------------------------------------- */

Page 21: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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;

Page 22: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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.";

Page 23: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

}

Page 24: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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;}

Page 25: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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...

Page 26: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

}

Page 27: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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();

Page 28: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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;

Page 29: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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";

Page 30: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

}

Page 31: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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;

}

Page 32: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

}

Page 33: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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...

Page 34: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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;}

Page 35: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 36: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 37: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 38: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 39: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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

Page 40: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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.

Page 41: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

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.

Page 42: Regresión lineal y cuadrática - Pronósticos · Regresión lineal y cuadrática Implementación Implementación Códigodelprograma /* Nombre del archivo: CR.cpp Este programa pide

Regresión lineal y cuadráticaResultados

GraciasFin de la presentación

Preguntas, comentarios, sugerencias...