Ajuste de Curvas
Regressão
Computação – 2º Semestre 2016/2017
Ajuste de Curvas
Quando apenas sabemos alguns valores de uma função contínua e queremos estimar outros valores intermédios
Quando queremos obter uma versão simplificada de uma função complexa
Exemplos de aplicações em Ciência e Engenharia para o ajuste de curvas aos dados experimentais:
Análise de tendências: usar a curva obtida para fazer previsões para valores não obtidos experimentalmente
Teste de hipóteses: verificar a correcção de um modelo matemático ou ajustar os seus parâmetros de acordo com os dados experimentais
29 Maio 2017 Ajuste de Curvas – Regressão Linear
Ajuste de Curvas
Dois tipos de abordagens que dependem dos erros
associados aos dados disponíveis:
Regressão: se o erro nos dados é significativo procurar uma curva
que represente todos os pontos sem ter que os intersectar
Interpolação: se os dados são exactos procurar uma curva que
passe por todos os pontos
3Ajuste de Curvas – Regressão Linear9 Maio 2017
Estatística Descritiva
Objectivo: Descrever um conjunto de dados de forma sucinta
Exemplo: foram feitas 24 medidas de uma quantidade
Medidas de tendência central
Média Aritmética: soma dos valores individuais (yi) a dividir pelo seu
número n:
Mediana: o ponto médio de um conjunto ordenado de dados.
Moda: o valor que ocorre mais frequentemente.
y yi
n
4Ajuste de Curvas – Regressão Linear9 Maio 2017
Estatística Descritiva
Medidas de dispersão
Desvio Padrão:
em que St é a soma do quadrado dos residuos:
Variância:
Coeficiente de variação:
sy St
n 1
St yi y 2
sy
2 yi y
2
n1
yi
2 yi 2
/nn1
c.v. sy
y 100%
5Ajuste de Curvas – Regressão Linear9 Maio 2017
Estatística Descritiva
Exemplo:
6.624
4.158
n
yy
i
6Ajuste de Curvas – Regressão Linear
1
2
n
yys
i
y
097133.0124
217.0
22 )097133.0(ys
009435.0
c.v. sy
y 100%
%47.1%1006.6
097133.0
9 Maio 2017
Estatística Descritiva
Distribuição dos dados
Histograma: representação visual das frequências de ocorrência
dos valores
Se distribuídos de acordo com a Distribuição Normal:
7Ajuste de Curvas – Regressão Linear
%95]2,2[%68],[
yy
yy
sysysysy %95]794266.6,405734.6[
9 Maio 2017
Estatística Descritiva no MATLAB
O MATLAB tem várias funções pré-definidas de estatística descritiva. Se s é um vector coluna: mean(s), median(s), mode(s)
Calcula a média, a mediana, e a moda de s.
min(s), max(s)
Calcula o valor mínimo e o valor máximo em s.
var(s), std(s)
Calcula a variância e o desvio padrão de s
Se o argumento s é uma matriz o resultado é calculado para cada coluna.
8Ajuste de Curvas – Regressão Linear9 Maio 2017
Histogramas em MATLAB
[n, x] = hist(s, x)
Determina o número de elementos em cada intervalo de dados em s.
x é um vector com os valores centrais dos intervalos.
[n, x] = hist(s, m)
Determina o número de elementos em cada intervalo de dados em s.
m é o número de intervalos usado. Por omissão: m=10
hist(s, x), hist(s, m), hist(s)
Sem argumentos de saída produz o gráfico.
9Ajuste de Curvas – Regressão Linear9 Maio 2017
Estatística Descritiva
exemplo: >> s=[6.395 6.435 6.485 6.495 6.505 6.515
6.555 6.555 6.565 6.575 6.595 6.605
6.615 6.625 6.625 6.635 6.655 6.655
6.665 6.685 6.715 6.715 6.755 6.775]';
>> format short g
>> mean(s), median(s), mode(s)
ans =
6.6
ans =
6.61
ans =
6.555
10Ajuste de Curvas – Regressão Linear9 Maio 2017
Estatística Descritiva
exemplo: >> min(s),max(s)
ans =
6.395
ans =
6.775
>> range=max(s)-min(s)
range =
0.38
>> var(s),std(s)
ans =
0.0094348
ans =
0.097133
11Ajuste de Curvas – Regressão Linear9 Maio 2017
Estatística Descritiva
exemplo: >> [n,x] =hist(s)
n =
1 1 3 1 4 3 5 2 2 2
x =
6.414 6.452 6.49 6.528 6.566 6.604 6.642 6.68 6.718 6.756
>> hist(s)
12Ajuste de Curvas – Regressão Linear9 Maio 2017
Números Aleatórios em MATLAB
r = rand(m, n)
Gera uma matriz mn de números aleatórios uniformemente distribuídos entre 0 e 1.
r = a + (b-a)*rand(m, n)
Gera uma matriz mn de números aleatórios uniformemente distribuídos entre a e b.
r = randn(m, n)
Gera uma matriz mn de números aleatórios de acordo com uma distribuição normal com média 0 e desvio padrão 1.
r = med + s*randn(m, n)
Gera uma matriz mn de números aleatórios de acordo com uma distribuição normal com média med e desvio padrão s.
13Ajuste de Curvas – Regressão Linear9 Maio 2017
Números Aleatórios em MATLAB
Exemplo: bungee jumper
Sabe-se que:
g=9.81 m/s2, m=68.1 kg
Usar a função rand para gerar 1000 valores de cd uniformemente distribuídos entre 0.225 e 0.275 (0.25 kg/m 10%) e calcular a distribuição de velocidades para t=4 s
Usar a função randn para gerar 1000 valores de cd distribuídos de acordo com uma normal com média 0.25 e desvio padrão 0.01443 e calcular a distribuição de velocidades para t=4 s
14Ajuste de Curvas – Regressão Linear
t
m
gc
c
gmtv d
d
tanh
9 Maio 2017
Números Aleatórios em MATLAB
Exemplo: bungee jumper (distribuição uniforme) Escrever ficheiro uniformCd.m
clc,format short g
n=1000;t=4;m=68.1;g=9.81;
cd=0.25;cdmin=cd-0.025;cdmax=cd+0.025;
cdrand=cdmin+(cdmax-cdmin)*rand(n,1);
meancd=mean(cdrand),stdcd=std(cdrand)
subplot(2,1,1)
hist(cdrand),title('(a) Distribution of drag')
xlabel('cd (kg/m)')
vrand=sqrt(g*m./cdrand).*tanh(sqrt(g*cdrand/m)*t);
meanv=mean(vrand)
subplot(2,1,2)
hist(vrand),title('(b) Distribution of velocity')
xlabel('v (m/s)')
15Ajuste de Curvas – Regressão Linear9 Maio 2017
Números Aleatórios em MATLAB
Exemplo: bungee jumper (distribuição uniforme)
>> uniformCd
meancd =
0.24944
stdcd =
0.014162
meanv =
33.126
16Ajuste de Curvas – Regressão Linear9 Maio 2017
Números Aleatórios em MATLAB Exemplo: bungee jumper (distribuição normal)
Escrever ficheiro normalCd.m
clc,format short g
n=1000;t=4;m=68.1;g=9.81;
cd=0.25; stdev=0.01443;
cdrand=cd+stdev*randn(n,1);
meancd=mean(cdrand),stdevcd=std(cdrand),cvcd=stdevcd/meancd*100
subplot(2,1,1)
hist(cdrand),title('(a) Distribution of drag')
xlabel('cd (kg/m)')
vrand=sqrt(g*m./cdrand).*tanh(sqrt(g*cdrand/m)*t);
meanv=mean(vrand),stdevv=std(vrand),cvv=stdevv/meanv*100
subplot(2,1,2)
hist(vrand),title('(b) Distribution of velocity')
xlabel('v (m/s)')
17Ajuste de Curvas – Regressão Linear9 Maio 2017
Números Aleatórios em MATLAB
Exemplo: bungee jumper (distribuição normal)
>> normalCd
meancd =
0.25067
stdevcd =
0.014622
cvcd =
5.833
meanv =
33.102
stdevv =
0.29137
cvv =
0.88023
18Ajuste de Curvas – Regressão Linear9 Maio 2017
Regressão Linear
Ajustar uma linha recta a um conjunto de pares de
observações: (x1, y1), (x2, y2),…,(xn, yn).
y=a0+a1x+e
Em que:
a1- slope
a0- intercept
e- erro (resíduo) entre o modelo e as observações
19Ajuste de Curvas – Regressão Linear9 Maio 2017
Regressão Linear
Ajustar uma linha recta a um conjunto de pares de
observações: (x1, y1), (x2, y2),…,(xn, yn).
y=a0+a1x+e → e=y a0 a1x
Critérios: Minimizar a soma dos erros residuais
Inadequado: os erros positivos compensam os erros negativos (ambas as linhas minimizam o critério)
20Ajuste de Curvas – Regressão Linear
n
i
ioi
n
i
i xaaye1
1
1
)(
9 Maio 2017
Regressão Linear
Ajustar uma linha recta a um conjunto de pares de
observações: (x1, y1), (x2, y2),…,(xn, yn).
y=a0+a1x+e → e=y a0 a1x
Critérios: Minimizar a soma do valor absoluto dos erros
Inadequado: não determina uma única linha (qualquer linha entre as tracejadas minimiza o critério)
21Ajuste de Curvas – Regressão Linear
n
i
ioi
n
i
i xaaye1
1
1
9 Maio 2017
Regressão Linear
Ajustar uma linha recta a um conjunto de pares de
observações: (x1, y1), (x2, y2),…,(xn, yn).
y=a0+a1x+e → e=y a0 a1x
Critérios: Minimizar o erro máximo
Inadequado: um grande erro num ponto compromete o resultado (a linha tracejada minimiza o critério)
22Ajuste de Curvas – Regressão Linear9 Maio 2017
Regressão Linear
Ajustar uma linha recta a um conjunto de pares de
observações: (x1, y1), (x2, y2),…,(xn, yn).
y=a0+a1x+e → e=y a0 a1x
Critérios: Minimizar a soma dos quadrados dos erros
Tem sempre uma única solução!
Denominado: Método dos Mínimos Quadrados
23Ajuste de Curvas – Regressão Linear
Sr ei
2
i1
n
yi a0 a1xi 2
i1
n
9 Maio 2017
Método dos Mínimos Quadrados
Minimizar a soma dos quadrados dos erros
Mínimo quando as derivadas se anulam:
24Ajuste de Curvas – Regressão Linear
Sr ei
2
i1
n
yi a0 a1xi 2
i1
n
0)(2
0)(2
1
1
1
iioir
ioi
o
r
xxaaya
S
xaaya
S ii xaay 10
0
2
100 iiii xaxaxy
ii yaxan 10
iiii yxaxax 1
2
0
xaya
xxn
yxyxna
ii
iiii
10
221
valores médios
9 Maio 2017
Método dos Mínimos Quadrados
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade
25Ajuste de Curvas – Regressão Linear9 Maio 2017
Método dos Mínimos Quadrados
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade
26Ajuste de Curvas – Regressão Linear9 Maio 2017
Método dos Mínimos Quadrados
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade
27Ajuste de Curvas – Regressão Linear9 Maio 2017
Método dos Mínimos Quadrados
(a) dispersão de dados à volta da média da variável dependente
(b) dispersão de dados à volta da linha obtida por regressão
A redução da dispersão representa a melhoria na explicação dos
dados obtida pela regressão linear.
28Ajuste de Curvas – Regressão Linear9 Maio 2017
Método dos Mínimos Quadrados
Medida de dispersão para a variável dependente:
Desvio Padrão: em que
Na regressão o resíduo representa a distância vertical entre o observado e a linha recta:
Assumindo uma distribuição
normal do erro da estimativa
“Desvio Padrão” da regressão:
sy St
n 1
St yi y 2
29Ajuste de Curvas – Regressão Linear
n
i
ii
n
i
ir xaayeS1
2
10
1
2
sy / x Sr
n 29 Maio 2017
Método dos Mínimos Quadrados
St é a soma dos quadrados à volta da média da variável dependente
Sr é a soma dos quadrados dos resíduos à volta da linha de regressão
St-Sr quantifica a redução do erro obtida pela descrição dos dados com a linha de regressão em vez da descrição com o valor médio.
O coeficiente de determinação r2 é dado por:
r2 representa a percentagem da incerteza original explicada pelo modelo.
Para um ajuste perfeito, Sr=0 e r2=1.
Se r2=0, não há melhorias relativamente à simples escolha da média.
Se r2<0, o modelo é pior que a simples escolha da média!
r2 St Sr
St
30Ajuste de Curvas – Regressão Linear
(r – coeficiente de correlação)
9 Maio 2017
Método dos Mínimos Quadrados
(a) regressão linear com um coeficiente de determinação maior
(b) regressão linear com um coeficiente de determinação menor
31Ajuste de Curvas – Regressão Linear9 Maio 2017
Método dos Mínimos Quadrados
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade
32Ajuste de Curvas – Regressão Linear
(melhorou!)
(88% da incerteza original é explicada pelo modelo)
9 Maio 2017
Linearização de Relações Não Lineares
A Regressão Linear assume a linearidade entre as
variáveis dependente e independente
No entanto, nem sempre é o caso!
Exemplo:
x
xy
xy
ey x
3
3
2
1
:limitado ocresciment
:potência
:lexponencia
2
1
33Ajuste de Curvas – Regressão Linear9 Maio 2017
Linearização de Relações Não Lineares
Em certos casos é possível linearizar o modelo:
xyx
xy
xyxy
xyey x
111:limitado ocresciment
loglog log:potência
ln ln:lexponentia
oLinearizadlinear NãoModelo
3
3
33
3
222
111
2
1
34Ajuste de Curvas – Regressão Linear9 Maio 2017
Linearização de Relações Não Lineares
35Ajuste de Curvas – Regressão Linear9 Maio 2017
Linearização de Relações Não Lineares
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade (modelo potência)
36Ajuste de Curvas – Regressão Linear9 Maio 2017
Linearização de Relações Não Lineares
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade (modelo potência)
37Ajuste de Curvas – Regressão Linear
xyxy loglog log 2222
9842.12741.0 xy
9 Maio 2017
Função linregr
38Ajuste de Curvas – Regressão Linear
function [a, r2] = linregr(x,y)
% linregr: linear regression curve fitting
% [a, r2] = linregr(x,y): Least squares fit of straight
% line to data by solving the normal equations
% input:
% x = independent variable
% y = dependent variable
% output:
% a = vector of slope, a(1), and intercept, a(2)
% r2 = coefficient of determination
n = length(x);
if length(y)~=n, error('x and y must be same length'); end
9 Maio 2017
Função linregr
39Ajuste de Curvas – Regressão Linear
x = x(:); y = y(:); % convert to column vectors
sx = sum(x); sy = sum(y);
sx2 = sum(x.*x); sxy = sum(x.*y); sy2 = sum(y.*y);
a(1) = (n*sxy-sx*sy)/(n*sx2-sx^2);
a(2) = sy/n-a(1)*sx/n;
r2 = ((n*sxy-sx*sy)/sqrt(n*sx2-sx^2)/sqrt(n*sy2-sy^2))^2;
% create plot of data and best fit line
xp = linspace(min(x),max(x),2);
yp = a(1)*xp+a(2);
plot(x,y,'o',xp,yp)
grid on
9 Maio 2017
Função linregr
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade (modelo linear)
>> x = [10 20 30 40 50 60 70 80];
>> y = [25 70 380 550 610 1220 830 1450];
>> [a, r2] = linregr(x,y)
a =
19.4702 -234.2857
r2 =
0.8805
40Ajuste de Curvas – Regressão Linear9 Maio 2017
Função linregr
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade (modelo potência)
>> [a, r2] = linregr(log10(x),log10(y))
a =
1.9842 -0.5620
r2 =
0.9481
41Ajuste de Curvas – Regressão Linear9 Maio 2017
Função pré-definida polyfit
A função pré-definida polyfit usa o método dos
mínimos quadrados para ajustar um polinómio de grau n:
p = polyfit(x, y, n)
x: dados da variável independente
y: dados da variável dependente
n: ordem do polinómio
p: coeficientes do polinómio
f(x)=p1xn+p2x
n-1+…+pnx+pn+1
O comando polyval pode ser usado para calcular um
valor com os coeficiente do polinómio obtidos.
y = polyval(p, x)
42Ajuste de Curvas – Regressão Linear9 Maio 2017
Função linregr
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade (modelo linear)
>> x = [10 20 30 40 50 60 70 80];
>> y = [25 70 380 550 610 1220 830 1450];
>> a = polyfit(x,y,1)
a =
19.4702 -234.2857
>> y = polyval(a,45)
y =
641.8750
43Ajuste de Curvas – Regressão Linear9 Maio 2017
Regressão Polinomial
O método dos mínimos quadrados pode ser usado para o ajuste de um polinómio de ordem superior.
A ideia é minimizar a soma dos quadrados dos erros residuais.
Exemplo do ajuste de:a) Um polinómio de primeiro grau
b) Um polinómio de segundo grau
44Ajuste de Curvas – Regressão Não Linear9 Maio 2017
Regressão Polinomial
Para um polinómio de segundo grau, minimizar:
Encontrar os zeros das derivadas:
Resolver o sistema equações lineares de 33:
Sr ei
2
i1
n
yi a0 a1xi a2xi
2 2
i1
n
45Ajuste de Curvas – Regressão Não Linear9 Maio 2017
Regressão Polinomial
Em geral, minimizar:
corresponde a resolver um sistema de equações lineares m+1m+1
O “Desvio Padrão” para o ajuste de um polinómio de ordem m a n pontos é:
O coeficiente de determinação r2 é:
Sr ei
2
i1
n
yi a0 a1xi a2xi
2 amxi
m 2
i1
n
sy / x Sr
n m1
r2 St Sr
St
46Ajuste de Curvas – Regressão Não Linear9 Maio 2017
Regressão Polinomial
Exemplo: ajustar um polinómio de 2º grau aos dados das 2 primeiras colunas da tabela seguinte
Resolver o sistema equações lineares de 33:
47Ajuste de Curvas – Regressão Não Linear9 Maio 2017
Regressão Polinomial
Exemplo: ajustar um polinómio de 2º grau aos dados das 2 primeiras colunas da tabela seguinte
Correspondendo ao sistema equações lineares de 33:
48Ajuste de Curvas – Regressão Não Linear9 Maio 2017
Regressão Polinomial
Exemplo: ajustar um polinómio de 2º grau aos dados
das 2 primeiras colunas da tabela seguinte>> N = [6 15 55;15 55 225;55 225 979];
>> r = [152.6 585.6 2488.8];
>> a = N\r
a =
2.4786
2.3593
1.8607
Resultando o polinómio:
49Ajuste de Curvas – Regressão Não Linear9 Maio 2017
Regressão Não Linear
Nem todas os modelos podem ser representados por equações lineares de coeficientes e funções básicas. Ex:
Uma solução consiste em transformar as variáveis e resolver o problema de regressão linear resultante. Desvantagens: Nem todas as equações podem ser transformadas
A solução obtida corresponde ao melhor ajuste para as variáveis transformadas e não para as variáveis originais.
A alternativa é usar regressão não linear para determinar directamente o ajuste que minimiza a soma dos quadrados dos erros residuais.
50Ajuste de Curvas – Regressão Não Linear9 Maio 2017
Regressão Não Linear em MATLAB
Escrever uma função que calcule a soma dos quadrados dos
erros residuais.
Usar a função pré-definida fminsearch para encontrar os
valores dos coeficientes que minimizam a função anterior.
51Ajuste de Curvas – Regressão Não Linear9 Maio 2017
Linearização de Relações Não Lineares
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade (modelo potência)
52Ajuste de Curvas – Regressão Linear
xyxy loglog log 2222
9842.12741.0 xy
9 Maio 2017
Regressão Não Linear em MATLAB
Exemplo: dados experimentais para medir como a força de resistência do ar depende da velocidade (modelo potência)
Escrever no ficheiro fSSR.m:
function f = fSSR(a,xm,ym)
yp = a(1)*xm.^a(2);
f = sum((ym-yp).^2);
Introduzir os dados para ajustar:
>> x = [10 20 30 40 50 60 70 80];
>> y = [25 70 380 550 610 1220 830 1450];
Resolver o problema de minimização:
fminsearch(@fSSR, [1, 1], [], x, y)
ans =
2.5384 1.4359
Resultado:
1
0
axay
53Ajuste de Curvas – Regressão Não Linear
4359.15384.2 xy
9 Maio 2017
Regressão Não Linear em MATLAB
Os coeficientes obtidos maximizam o coeficiente de
determinação r2 e podem ser diferentes dos obtidos por
transformação:
54Ajuste de Curvas – Regressão Não Linear9 Maio 2017
Top Related