You are on page 1of 42

Regresin lineal y cuadrtica

Regresin lineal y cuadrtica


Pronsticos

Efran Soto Apolinar.


Programa de Posgrado en Ingeniera de Sistemas FIME UANL

21 de marzo de 2008

Regresin lineal y cuadrtica

ndice

1 Regresin lineal y cuadrtica 2 Regresin lineal 3 Regresin cuadrtica 4 Implementacin 5 Un caso de ejemplo 6 Resultados

Regresin lineal y cuadrtica Regresin lineal y cuadrtica

Fundamentos matemticos

Este mtodo es muy utilizado. Pronostica solamente casos lineales o cuadrticos. Interpolacin Vs. Extrapolacin.

Regresin lineal y cuadrtica Regresin lineal

Fundamentos matemticos
Deduccin

Conocemos n datos (xi , yi ). Queremos encontrar la recta que mejor se ajusta a los n datos. Suponemos que la recta es: y = +mx donde y m son parmetros a determinar.

Regresin lineal y cuadrtica Regresin lineal

Fundamentos matemticos
Deduccin

Grcamente tenemos la siguiente situacin: y 6 5 4 3 2 1 x 1 2 3 4 5 6 7

Regresin lineal y cuadrtica Regresin lineal

Fundamentos matemticos
Deduccin

Grcamente tenemos la siguiente situacin: y 6 5 y = +mx 4 3 2 1 x 1 2 3 4 5 6 7

Regresin lineal y cuadrtica Regresin lineal

Fundamentos matemticos
Deduccin

Grcamente tenemos la siguiente situacin: y 6 5 y = +mx 4 3 2 1 x 1 2 3 4 5 6 7 i

Regresin lineal y cuadrtica Regresin lineal

Fundamentos matemticos
Deduccin

Grcamente tenemos la siguiente situacin: y 6 5 y = +mx 4 3 2 1 x 1 2 3 4 5 6 7 j i

Regresin lineal y cuadrtica Regresin lineal

Fundamentos matemticos
Deduccin

Grcamente tenemos la siguiente situacin: y 6 5 y = +mx 4 3 2 1 x 1 2 3 4 5 6 7 j2 i2

Regresin lineal y cuadrtica Regresin lineal

Fundamentos matemticos
Deduccin

Deno el error total:


n

=
i=1 n

i2 (yi m xi )
i=1 2

Necesitamos encontrar los parmetros y m que minimicen E .

Regresin lineal y cuadrtica Regresin lineal

Fundamentos matemticos
Deduccin

Derivamos respecto a los parmetros: dE d dE dm


n

= =

2
i=1 n

(yi m xi ) (yi m xi ) xi
i=1

Para encontrar el mnimo igualamos a cero y resolvemos el S.E.L. para y m

Regresin lineal y cuadrtica Regresin lineal

Fundamentos matemticos
Deduccin

El S.E.L. es: n +m xi + m xi xi2 = = yi xi yi

Ahora resolvemos el S.E.L. para y m

Regresin lineal y cuadrtica Regresin lineal

Fundamentos matemticos
Deduccin

La solucin es: m = = n xi yi xi2 xi


2

yi

n ( xi ) yi m xi n

Regresin lineal y cuadrtica Regresin cuadrtica

Fundamentos matemticos
Deduccin

De manera semejante resolvemos el caso para encontrar la parbola de mejor ajuste. y 6 y = a x2 + b x + c 5 y = +mx 4 3 2 1 x 1 2 3 4 5 6 7

Regresin lineal y cuadrtica Regresin cuadrtica

Fundamentos matemticos
Deduccin

De manera semejante resolvemos el caso para encontrar la parbola de mejor ajuste. y 6 y = a x2 + b x + c 5 4 3 2 1 x 1 2 3 4 5 6 7

Regresin lineal y cuadrtica Regresin cuadrtica

Fundamentos matemticos
Deduccin

En este caso el error total es:


n

=
i=1 n

i2 yi a xi2 b xi c
i=1 2

Necesitamos encontrar los parmetros a, b y c que minimicen E .

Regresin lineal y cuadrtica Regresin cuadrtica

Fundamentos matemticos
Deduccin

Derivamos respecto a los parmetros: dE dc dE db dE da


n

= 2
i=1 n

yi a xi2 b xi c yi a xi2 b xi c xi
i=1 n

= 2 = 2
i=1

yi a xi2 b xi c xi2

Para encontrar el mnimo igualamos a cero y resolvemos el S.E.L. para a, b y c

Regresin lineal y cuadrtica Regresin cuadrtica

Fundamentos matemticos
Deduccin

El S.E.L. es: a a a xi2 + b xi + n c xi xi2 = = = yi xi yi xi2 yi

xi3 + b xi4 + b

xi2 + c xi3 + c

Ahora resolvemos el S.E.L. para a, b y c

Regresin lineal y cuadrtica Regresin cuadrtica

Fundamentos matemticos
Deduccin

La solucin es: yi xi yi xi2 yi xi2 xi3 xi4 xi yi a xi xi2 xi3 xi xi2 xi3 ( n xi xi2 n xi xi2 xi2 n xi ) n xi
2

b c

= =

yi a

xi yi a xi2

xi3

xi2 b n

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo del programa

/* Nombre del archivo: CR.cpp Este programa pide las coordenadas (x,y) de n puntos y los graba en un archivo. Despus lee estos datos y calcula a) la recta demejor ajuste, la cual se expresa como: y = beta + mx b) La parbola de mejor ajuste, que se expresa como: y = ax^2 + bx + c por el mtodo de mnimos cuadrados. ------------------------------------------------------------------Autor: Efran Soto Apolinar Email: efra.soto.a@gmail.com efrain@yalma.fime.uanl.mx Fecha de ltima Modificacin: 21 de marzo de 2008 ------------------------------------------------------------------- */

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo del programa

#include <cstdio> // #include <cstdlib> // #include <iostream> // Funciones bsicas 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; // contadores double a, b, c; // parmetros para parbola... double m, beta; // parmetros para recta... double Da = 0, Dp = 0; double xi, yi; // datos double Sx, Sy, Sx2, Sx3, Sx4, Sxy, Sx2y; // sumas de datos... double Error_p = 0, Error_r = 0; double dip, dir, y_approxp, y_approxr;

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo del programa

for(;;){ // for infinito... Sx = 0; Sy = 0; Sxy = 0; Sx2 = 0; Sx3 = 0; Sx4 = 0; Sx2y = 0; // Informacin 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 informacin"; cout << "\nen un archivo y despus lee esa informacin"; cout << "\npara encontrar la parbola de regresin"; cout << "\n\n\nPor favor, introduce las coordenadas de "; cout << "\nlos puntos conocidos, ingresando primero"; cout << "\nlacoordenada en x y despus la coordenada en y"; cout << "\nCuando hayas terminado introduce el nmero "; cout << "\n1 000 000, pero sin espacios.";

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo 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 }

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo 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 informacin..."; n = i - 1; // Nmero total de datos... break; }

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo 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 informacin..."; n = i - 1; // nmero total de datos... break; } out_stream << xi << " " << yi << " i\n"; cout << "Dato " << i << " grabado correctamente"; cout << "\n"; } // Termino de grabar la informacin...

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo 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 }

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo del programa

for (j=1; j <= n ; j++){ // realizo clculos... in_stream >> xi >> yi; do { // estoy buscando el siguiente rengln in_stream >> letra; } while (!letra == \n); // Sx += xi; // Suma de x Sy += yi; // Suma de y Sxy += xi * yi; // Suma de xy Sx2 += xi * xi; // Suma de x cuadrada Sx3 += xi * xi * xi; // Suma de x cbica Sx4 += xi * xi * xi * xi; // Suma x cuarta Sx2y += xi * xi * yi; } // Cierro el archivo de lectura... in_stream.close();

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo del programa

// Calculo parmetros de recta... m = (n * Sxy - Sx * Sy) / (n * Sx2 - Sx * Sx); beta = (Sy - m * Sx) / n; // Calculo los parmetros de parbola... Da = Sy * Sx2 * Sx2 + n * Sxy * Sx3 + Sx * Sx * Da = Da - n * Sx2 * Sx2y - Sx * Sx3 * Sy - Sx * Dp = Sx2 * Sx2 * Sx2 + n * Sx3 * Sx3 + Sx4 * 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;

Sx2y; Sxy * Sx2; * Sx;

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo del programa

// Muestro los resultados... cout << "\n\n\n"; // espacio cout << "La recta de mejor ajuste es: \n"; cout << "\n y = " << beta << " + " << m << " x "; cout << "\n\n\n"; // espacio cout << "La parbola de mejor ajuste es: \n"; cout << "\n y = " << a << " x^2 + " << b << " x + " << c; cout << "\n\n\n";

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo del programa

// Vuelvo a abrir el archivo donde estn 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 }

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo del programa

for (j=1; j <= n ; j++){ // realizo clculos... in_stream >> xi >> yi; do { // estoy buscando el siguiente rengln in_stream >> letra; } while (!letra == \n); // // clculo con la parbola de regresin... 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 total Error_r += dir; }

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo del programa

// Cierro el archivo de lectura... in_stream.close(); cout << "\n\n\n"; // espacio cout << "\nError total para la recta: " << Error_r; cout << "\nError total para la parbola: " << Error_p; cout << "\n\n\n"; // espacio cout << "Generando datos de la parbola de mejor ajuste..."; // creo y abro el archivo... // pma = parbola 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 }

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo 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...

Regresin lineal y cuadrtica Implementacin

Implementacin de la simulacin
Cdigo 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; }

Regresin lineal y cuadrtica Un caso de ejemplo

Ejemplo
Un caso de ejemplo

Consideramos los siguientes datos: x 1 2 3 4 5 6 7 y 0.5 2.5 2.0 4.0 3.5 6.0 5.5

Regresin lineal y cuadrtica Un caso de ejemplo

Ejemplo
Grca de datos

y 6 5 4 3 2 1 x 1 2 3 4 5 6 7

Regresin lineal y cuadrtica Resultados

Ejemplo
Resultados

El programa arroja los siguientes resultados: Recta de mejor ajuste: y = 0.0714286 + 0.839286 x. Parbola de mejor ajuste: y = 0.0297619 x 2 + 1.07738 x 0.285714 Error total para la recta: 2.99107 Error total para la parbola: 2.91667

Regresin lineal y cuadrtica Resultados

Resultados
Recta de regresin

y 6 5 y = 0.0714286 + 0.839286 x 4 3 2 1 x 1 2 3 4 5 6 7

Regresin lineal y cuadrtica Resultados

Resultados
Parbola de regresin

y 6 y = 0.02976 x 2 + 1.077 x 0.2857 5 y = 0.0714286 + 0.839286 x 4 3 2 1 x 1 2 3 4 5 6 7

Regresin lineal y cuadrtica Resultados

Desventajas
Desventajas del mtodo

Se requiere ms informacin. Cada parmetro tiene asociado un error. El mtodo de regresin aproxima bien en interpolacin NO en extrapolacin. El proceso no es estocstico, sino determinista. No se conoce la distribucin de las discrepancias.

Regresin lineal y cuadrtica Resultados

Ventajas
Ventajas del mtodo

Parmetros con errores pequeos. Mientras mayor informacin se tenga, los parmetros tienen menos errores. Puede servir para aproximar datos faltantes.

Regresin lineal y cuadrtica Resultados

Gracias
Fin de la presentacin

Preguntas, comentarios, sugerencias...

You might also like