1. Introdução

Quando um erro substancial estiver associado aos dados, a interpolação polinomial é inapropriada e pode produzir resultados insatisfatórios. Isso ocorre porque pontos obtidos por um experimento geralmente exibem variações significativas entre as amostragens. A estratégia mais precisa para aproximar um conjunto de pontos consiste em determinar uma função de aproximação que

ajuste a forma geral dos dados, sem necessariamente passar por todos pontos individualmente. As figuras abaixo mostram esta diferença.

Points

Dados amostrados com erros significativos

Interpolation

Ajuste polinomial oscilando além do intervalo dos dados

Regression

Ajuste mais satisfatório usando regressão linear

Pelos gráficos, notamos que uma reta é a função que melhor caracteriza a sequência de dados e não passa nenhum ponto. A técnica para tal ajuste consiste na utilização de regressão linear. Embora este exemplo seja uma distribuição simples, métodos de regressão são geralmente ótimos para aproximações de valores à um modelo funcional. Neste e nos demais posts, apresentamos casos e técnicas de regressão, derivadas da regressão por mínimos quadrados.

 

2. Regressão Linear

A forma mais simples de aproximação por mínimos quadrados é o ajuste de uma reta na forma


$$y = \alpha_0 + \alpha_1 x + \epsilon $$

a um conjunto de pontos amostrados . Onde é o coeficiente linear, é o coeficiente angular da reta e é o resíduo (erro de aproximação) entre o modelo e a amostra, que pode ser isolado da equação acima, tendo representação


$$\epsilon = y – \alpha_0 – \alpha_1 x $$

Assim, o erro de aproximação deve ser minimizado, a fim de que possamos ajustar os parâmetros e de forma que o modelo corresponda mais fielmente ao fenômeno observado.

 

3. Critério de Ajuste

Para ajustarmos a reta que melhor aproximasse a todos os pontos, poderíamos utilizar como critério de erro a diferença absoluta entre o modelo e o valor amostrado. A estratégia de solução do ajuste consistiria em minimizar a soma dos erros residuais individuais, isto é


$$ \sum_{i=1}^{n} | \epsilon_i | = \sum_{i=1}^{n} \left| y_i – \alpha_0 – \alpha_1 x_i \right| $$

onde é o número total de pontos. Contudo, este critério é inadequado.

Como podemos ver, este problema consiste na minimização do erro . Portanto, uma estratégia consistiria em utilizar o critério minimax. A ideia aqui é escolher a reta que minimize a distancia máxima que um ponto individual tenha da reta. Contudo, essa técnica possui um problema quando o conjunto de pontos amostrados possui um valor muito discrepante dos demais, ou seja, quando há uma grande variância no erro dos pontos. Geralmente, critério minimax é utilizado para reduzir uma função adequada à uma simples.

A abordagem que contorna todas as deficiências acima consiste na minimização da soma dos quadrados dos resíduos entre o medido e o calculado a partir do modelo linear. Ou Seja,


$$S_r = \sum_{i=1}^{n} \epsilon_i^2 = \sum_{i=1}^{n} \left( y_{i,amostrado} – y_{i,modelo} \right)^2 = \sum_{i=1}^{n} \left( y_i – \alpha_0 -\alpha_1 x_i \right)^2 $$

A utilização desse critério possui a vantagem fornecer uma única reta para um dado conjunto de dados.

 

4. Ajuste dos Parâmetros por Mínimos Quadrados

Para determinar os valores de e , derivamos a última equação acima por cada coeficiente. Isto é


$$\frac{\partial S_r}{\partial \alpha_0} = -2 \sum_{i=1}^{n} (y_i – \alpha_0 – \alpha_1 x_i) $$

e


$$\frac{\partial S_r}{\partial \alpha_1} = -2 \sum_{i=1}^{n} (y_i – \alpha_0 – \alpha_1 x_i) x_i $$

</p>

Como queremos minimizar ao máximo o erro, tomamos como a soma da derivada de como sendo zero. Isto é


$$\frac{\partial S_r}{\partial \alpha_0} = \sum_{i=1}^{n} \frac{\partial e_i^2}{\partial \alpha_0} = 0 $$

Portanto, igualando as derivadas a zero, obtemos mínimo. Assim, as equações podem ser expressas como


$$0 = \sum_{i=1}^{n} y_i – \sum_{i=1}^{n} \alpha_0 – \sum_{i=1}^{n} \alpha_1 x_i $$

e


$$0 = \sum_{i=1}^{n} y_i x_i – \sum_{i=1}^{n} \alpha_0 x_i – \sum_{i=1}^{n} \alpha_1 x_i^2 $$

Agora, tomando


$$\sum_{i=1}^{n} \alpha_0 = n \alpha_0 $$

podemos expressar essas equações como um conjunto de duas equações lineares simultâneas em termos das variáveis e : </p>


$$n \alpha_0 + \left( \sum_{i=1}^{n} x_i \right) \alpha_1 = \sum_{i=1}^{n} y_i $$

e


$$\left( \sum_{i=1}^{n} x_i \right) \alpha_0 + \left( x_i^2 \right) \alpha_1 = \sum_{i=1}^{n} x_i y_i $$

Dessas equações, podemos isolar e :


$$\alpha_1 = \dfrac{n \sum_{i=1}^{n} x_i y_i – \sum_{i=1}^{n} x_i \sum_{i=1}^{n} y_i}{n \sum_{i=1}^{n} x_i^2 – (\sum_{i=1}^{n} x_i)^2} $$

e


$$\alpha_0 = \dfrac{\sum_{i=1}^{n} y_i}{n} – \alpha_1 \dfrac{\sum_{i=1}^{n} x_i}{n} $$

</p>

 

5. Implementação

def linear_regression(points):
    """
    Return a LINEAR FUNCTION with parameters adjusted by linear regression

    f = linear_regression(points)

    INPUT:
    * points: list of tuples of sampled points (x_i, y_i)

    return: a linear function f(x) = a_0 + a_1 * x

    Author: Pedro Garcia [sawp@sawp.com.br]
    see: http://www.sawp.com.br

    License: Creative Commons
             http://creativecommons.org/licenses/by-nc-nd/2.5/br/

    Jul 2011
    """
    n = len(points)
    (sx, sy, sxy, sxx) = (0, 0, 0, 0)
    for (xi, yi) in points:
        sx += xi
        sy += yi
        sxy += xi * yi
        sxx += xi * xi
    (xm, ym) = (sx / n, sy / n)
    a1 = (n * sxy - sx * sy) / (n * sxx - sx * sx)
    a0 = ym - a1 * xm
    fun = lambda t: a0 + a1 * t
    return fun

Esta função está disponível em http://www.sawp.com.br/code/regression/linear_regression.py assim como um exemplo de como utilizá-la.

 

Este documento é disponível sob a licença Creative Commons. As regras dos direitos de cópia deste conteúdo estão acessíveis em http://creativecommons.org/licenses/by-nc-nd/2.5/br/.

 

References

[1] Anthony Ralston and Philip Rabinowitz, A First Course in Numerical Analysis (2nd ed.), McGraw-Hill and Dover, (2001).
[2] N.B Franco, Cálculo Numérico, Pearson Prentice Hall (2006).</p>

</a>
</fieldset>