{"id":8030,"date":"2022-08-04T20:46:27","date_gmt":"2022-08-05T01:46:27","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/analisisnumerico\/?p=8030"},"modified":"2026-01-09T06:41:54","modified_gmt":"2026-01-09T11:41:54","slug":"regresion-polinomial-grado-m","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u08\/regresion-polinomial-grado-m\/","title":{"rendered":"8.3 Regresi\u00f3n polinomial de grado m con Python"},"content":{"rendered":"\n<p><em><strong>Referencia<\/strong><\/em>: Chapra 17.2 p482, Burden 8.1 p501<\/p>\n\n\n\n<p>Una alternativa a usar transformaciones ente los ejes para ajustar las curvas es usar regresi\u00f3n polinomial extendiendo el procedimiento de los m\u00ednimos cuadrados.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"440\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2022\/08\/RegresionPolinomial01.png\" alt=\"Regresi\u00f3n Polin\u00f3mica 01\" class=\"wp-image-13925\" \/><\/figure>\n\n\n\n<p>Suponga que la curva se ajusta a un polinomio de segundo grado o cuadr\u00e1tico<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y = a_0 + a_1 x + a_2 x^2 +e <\/span>\n\n\n\n<p>usando nuevamente la suma de los cuadrados de los residuos, se tiene,<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S_r = \\sum_{i=1}^n (y_i- (a_0 + a_1 x_i + a_2 x_i^2))^2 <\/span>\n\n\n\n<p>para minimizar los errores se deriva respecto a cada coeficiente: a<sub>0<\/sub>, a<sub>1<\/sub>, a<sub>2<\/sub><\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{\\partial S_r}{\\partial a_0} = -2\\sum (y_i- a_0 - a_1 x_i - a_2 x_i^2) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{\\partial S_r}{\\partial a_1} = -2\\sum x_i (y_i- a_0 - a_1 x_i - a_2 x_i^2) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\frac{\\partial S_r}{\\partial a_2} = -2\\sum x_i^2 (y_i- a_0 - a_1 x_i - a_2 x_i^2) <\/span>\n\n\n\n<p>Se busca el m\u00ednimo de cada sumatoria, igualando a cero la derivada y reordenando, se tiene el conjunto de ecuaciones:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a_0 (n) + a_1 \\sum x_i + a_2 \\sum x_i^2 = \\sum y_i <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a_0 \\sum x_i + a_1 \\sum x_i^2 + a_2 \\sum x_i^3 =\\sum x_i y_i <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> a_0 \\sum x_i^2 + a_1 \\sum x_i^3 + a_2 \\sum x_i^4 =\\sum x_i^2 y_i <\/span>\n\n\n\n<p>con inc\u00f3gnitas a<sub>0<\/sub>, a<sub>1<\/sub> y a<sub>2<\/sub>, cuyos coeficientes se pueden evaluar con los puntos observados. Se puede usar un m\u00e9doto directo de la unidad 3 para resolver el sistema de ecuaciones Ax=B.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\begin{bmatrix} n &amp; \\sum x_i &amp; \\sum x_i^2 \\\\ \\sum x_i &amp; \\sum x_i^2 &amp; \\sum x_i^3 \\\\ \\sum x_i^2 &amp; \\sum x_i^3 &amp; \\sum x_i^4 \\end{bmatrix} \\begin{bmatrix} a_0 \\\\ a_1 \\\\ a_2 \\end{bmatrix} = \\begin{bmatrix} \\sum y_i \\\\ \\sum x_i y_i \\\\ \\sum x_i^2 y_i \\end{bmatrix} <\/span>\n\n\n\n<pre class=\"wp-block-code\"><code>C = np.linalg.solve(A,B)<\/code><\/pre>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> y = C_0 + C_1 x + C_2 x^2 <\/span>\n\n\n\n<p>El error est\u00e1ndar se obtiene como:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S_{y\/x} = \\sqrt{\\frac{S_r}{n-(m+1)}}<\/span>\n\n\n\n<p>siendo m el grado del polinomio usado, para el caso presentado m = 2<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S_r = \\sum{(yi-fi)^2}<\/span>\n\n\n\n<p>S<sub>r<\/sub> es la suma de los cuadrados de los residuos alrededor de la l\u00ednea de regresi\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>x<sub>i<\/sub><\/th><th>y<sub>i<\/sub><\/th><td>(y<sub>i<\/sub>-y<sub>media<\/sub>)<sup>2<\/sup><\/td><td>(y<sub>i<\/sub>-f<sub>i<\/sub>)<sup>2<\/sup><\/td><\/tr><tr><td>...<\/td><td>...<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>...<\/td><td>...<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>&nbsp;<\/td><td>\u2211y<sub>i<\/sub><\/td><td>S<sub>t<\/sub><\/td><td>S<sub>r<\/sub><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> r^2 = \\frac{S_t-S_r}{S_t}<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> S_t = \\sum{(yi-ym)^2}<\/span>\n\n\n\n<p>siendo S<sub>t<\/sub> la suma total de los cuadrados alrededor de la media para la variable dependiente y. Este valor es la magnitud del error residual asociado con la variable dependiente antes de la regresi\u00f3n.<\/p>\n\n\n\n<p>El algoritmo se puede desarrollar de forma semejante a la presentada en la secci\u00f3n anterior,<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ejercicio Chapra 17.5 p484<\/h3>\n\n\n\n<p>Los datos de ejemplo para la referencia son:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>xi = &#091;0,   1,    2,    3,    4,   5]\nyi = &#091;2.1, 7.7, 13.6, 27.2, 40.9, 61.1]<\/code><\/pre>\n\n\n\n<p>resultado de algoritmo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\nfx  =  1.86071428571429*x**2 + 2.35928571428571*x + 2.47857142857143\nSyx =  1.117522770621316\ncoef_determinacion r2 =  0.9985093572984048\n99.85% de los datos se describe con el modelo\n&gt;&gt;&gt; \n\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Instrucciones en Python<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# regresion con polinomio grado m=2\nimport numpy as np\nimport sympy as sym\nimport matplotlib.pyplot as plt\n\n# INGRESO\nxi = &#x5B;0,   1,    2,    3,    4,   5]\nyi = &#x5B;2.1, 7.7, 13.6, 27.2, 40.9, 61.1]\nm  = 2\n\n# PROCEDIMIENTO\nxi = np.array(xi)\nyi = np.array(yi)\nn  = len(xi)\n\n# llenar matriz a y vector B\nk = m + 1\nA = np.zeros(shape=(k,k),dtype=float)\nB = np.zeros(k,dtype=float)\nfor i in range(0,k,1):\n    for j in range(0,i+1,1):\n        coeficiente = np.sum(xi**(i+j))\n        A&#x5B;i,j] = coeficiente\n        A&#x5B;j,i] = coeficiente\n    B&#x5B;i] = np.sum(yi*(xi**i))\n\n# coeficientes, resuelve sistema de ecuaciones\nC = np.linalg.solve(A,B)\n\n# polinomio\nx = sym.Symbol('x')\nf = 0\nfetiq = 0\nfor i in range(0,k,1):\n    f = f + C&#x5B;i]*(x**i)\n    fetiq = fetiq + np.around(C&#x5B;i],4)*(x**i)\n\nfx = sym.lambdify(x,f)\nfi = fx(xi)\n\n# errores\nym = np.mean(yi)\nxm = np.mean(xi)\nerrado = fi - yi\n\nsr = np.sum((yi-fi)**2)\nsyx = np.sqrt(sr\/(n-(m+1)))\nst = np.sum((yi-ym)**2)\n\n# coeficiente de determinacion\nr2 = (st-sr)\/st\nr2_porcentaje = np.around(r2*100,2)\n\n# SALIDA\nprint('ymedia = ',ym)\nprint(' f =',f)\nprint('coef_determinacion r2 = ',r2)\nprint(str(r2_porcentaje)+'% de los datos')\nprint('     se describe con el modelo')\n\n# grafica\nplt.plot(xi,yi,'o',label='(xi,yi)')\n# plt.stem(xi,yi, bottom=ym)\nplt.plot(xi,fi, color='orange', label=fetiq)\n\n# lineas de error\nfor i in range(0,n,1):\n    y0 = np.min(&#x5B;yi&#x5B;i],fi&#x5B;i]])\n    y1 = np.max(&#x5B;yi&#x5B;i],fi&#x5B;i]])\n    plt.vlines(xi&#x5B;i],y0,y1, color='red',\n               linestyle = 'dotted')\n\nplt.xlabel('xi')\nplt.ylabel('yi')\nplt.legend()\nplt.title('Regresion polinomial grado '+str(m))\nplt.show()\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Referencia: Chapra 17.2 p482, Burden 8.1 p501 Una alternativa a usar transformaciones ente los ejes para ajustar las curvas es usar regresi\u00f3n polinomial extendiendo el procedimiento de los m\u00ednimos cuadrados. Suponga que la curva se ajusta a un polinomio de segundo grado o cuadr\u00e1tico usando nuevamente la suma de los cuadrados de los residuos, se [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-mn-unidades","format":"standard","meta":{"footnotes":""},"categories":[42],"tags":[],"class_list":["post-8030","post","type-post","status-publish","format-standard","hentry","category-mn-u08"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/8030","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=8030"}],"version-history":[{"count":2,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/8030\/revisions"}],"predecessor-version":[{"id":13927,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/8030\/revisions\/13927"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=8030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=8030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=8030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}