regresión lineal y cuadrática - pronósticos · regresión lineal y cuadrática implementación...

Post on 14-Oct-2019

9 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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: efra.soto.a@gmail.com

efrain@yalma.fime.uanl.mxFecha 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...

top related