Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Faça um gráfico com os pares (x,y) e encontre uma reta que se ajuste à eles utilizando o método de mínimos quadrados

+1 voto
65 visitas
perguntada Abr 17 em Estatística por Samuel Ceccon (11 pontos)  

Exercício 2 do capítulo 14 do livro Mathematical Statistics and Data Analysis do John Rice.

Faça o gráfico de (x,y) para os seguintes pares:

\[ \begin{array}{c|cccccccccc} x & 0.34 & 1.38 & -0.65 & 0.68 & 1.40 & -0.88 & -0.30 & -1.18 & 0.50 & -1.75\\ \hline y & 0.27 & 1.34 & -0.53 & 0.35 & 1.28 & -0.98 & -0.72 & -0.81 & 0.64 & -1.59 \end{array} \]

a) Ajuste uma reta y = a + bx usando o método de mínimos quadrados e a coloque no gráfico.

b) Ajuste uma reta x = c + dy usando o método de mínimos quadrados e a coloque no gráfico.

c) As retas (a) e (b) são iguais? Caso não sejam, por que isso ocorre?

Compartilhe

1 Resposta

0 votos
respondida Abr 17 por Samuel Ceccon (11 pontos)  

Para iniciar essa resolução, vamos plotar os pares (x,y) no gráfico conforme solicitado. Para isso usaremos as bibliotecas pandas, numpy e matplotlib, que são frequentemente usadas no Python para trabalhar com base de dados, matrizes e criar gráficos, respectivamente.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

X = np.array([0.34, 1.38, -0.65, 0.68, 1.40,
              -0.88, -0.30, -1.18, 0.50, -1.75])
Y = np.array([0.27, 1.34, -0.53, 0.35, 1.28,
              -0.98, -0.72, -0.81, 0.64, -1.59])
df = pd.DataFrame({'X':X,
                  'Y':Y})

print(df)
a = df.plot.scatter(x="X",y="Y")

Output:
A imagem será apresentada aqui.
Para ajustar uma reta, queremos estimar os parâmetros \(\beta_0,\beta_1\) de \(y=\beta_0+\beta_1x+u\).
Para focar na parte computacional, irei omitir o passo a passo de como chegar aos estimadores \(\hat{\beta}_0\) e \(\hat{\beta}_1\).
\[\hat{\beta}_0=\overline{y}-\hat{\beta}_1\overline{x}\]
\[\hat{\beta}_1=\frac{Cov(x,y)}{Var(x)}\]

Com base nesses estimadores a reta ajustada via mínimos quadrados é
\[\hat{y}=\hat{\beta}_0+\hat{\beta}_1x\]

Para encontrar essa resta é possível calcular individualmente cada um desses valores utilizados nos parâmetros com funções disponíveis no Numpy como np.cov(X,Y), np.var(X), np.mean(X) e coloca-los na equação.
Porém, optei por utilizar a biblioteca statsmodel, que irá rodar a regressão de forma direta.

(a) Ajustando uma reta y = a + bx

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import statsmodels.formula.api as smf

X = np.array([0.34, 1.38, -0.65, 0.68, 1.40,
              -0.88, -0.30, -1.18, 0.50, -1.75])
Y = np.array([0.27, 1.34, -0.53, 0.35, 1.28,
              -0.98, -0.72, -0.81, 0.64, -1.59])
df = pd.DataFrame({'X':X,
                  'Y':Y})

reg = smf.ols(formula='Y~X', data=df)
results = reg.fit()
b = results.params
print(b ,"\n")

a = df.plot.scatter(x="X",y="Y")
plt.plot(df['X'],results.fittedvalues)

Output:
Intercept: -0.033397
\(\hat{\beta}_1\): 0.904414

A imagem será apresentada aqui.
(b) Ajustando uma reta x = c + dy

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import statsmodels.formula.api as smf

X = np.array([0.34, 1.38, -0.65, 0.68, 1.40,
              -0.88, -0.30, -1.18, 0.50, -1.75])
Y = np.array([0.27, 1.34, -0.53, 0.35, 1.28,
              -0.98, -0.72, -0.81, 0.64, -1.59])
df = pd.DataFrame({'X':X,
                  'Y':Y})

reg = smf.ols(formula='X~Y', data=df)
results = reg.fit()
b = results.params
print(b ,"\n")

a = df.plot.scatter(x="X",y="Y")
plt.plot(df['Y'],results.fittedvalues)

Output:
Intercept: 0.033126
\(\hat{\beta}_1\): 1.055009
A imagem será apresentada aqui.

(c) As retas (a) e (b) são iguais?
Como vimos nos exercícios (a) e (b) as retas não são iguais. Quando fazemos uma regressão de Y em X buscamos encontrar o melhor preditor de Y dado as variáveis X, o que é diferente de encontrar o melhor preditor para X dadas as variáveis Y.

comentou Mai 3 por Luiz Guilherme Hass (11 pontos)  
editado Mai 4 por Luiz Guilherme Hass

A resposta está bem elaborada, com os cálculos corretos. Os recursos gráficos estão ilustrando bem a questão proposta. A biblioteca statsmodels, que foi utilizada, é muito interessante para este tipo de análise entre variáveis.

Nesta biblioteca, podemos encontrar vários dados, complementando a análise proposta no exercício entre os dados de X e Y.

Código utilizado:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import statsmodels.formula.api as smf

X = np.array([0.34, 1.38, -0.65, 0.68, 1.40,
              -0.88, -0.30, -1.18, 0.50, -1.75])
Y = np.array([0.27, 1.34, -0.53, 0.35, 1.28,
              -0.98, -0.72, -0.81, 0.64, -1.59])

Y_sm = sm.add_constant(Y)
results = sm.OLS(X, Y_sm).fit()
results.summary()

Sendo Y variável dependente e X a variável independente, conforme sugere a letra "a", podemos fazer uma análise com a biblioteca statsmodels:

A imagem será apresentada aqui.

É encontrado \({β_1}\) = 0.9044 , em linha com a resposta anterior do exercício.

Agora, sendo X variável dependente e Y a variável independente, conforme sugere a letra "b", podemos fazer uma análise com a biblioteca statsmodels:

A imagem será apresentada aqui.

É encontrado \({β_1}\) = 1,0550 , em linha com a resposta anterior do exercício.

Vale destacar que é encontrado um \(R^2\) de 0,954 , número próximo de 1, mostrando que as variáveis X e Y são fortemente correlacionadas.

Por fim, explicar X com base em Y é diferente de explicar Y com base em X, conforme é tratado na letra "c". As inclinações das retas são diferentes e as retas não são iguais, conforme atestado na resolução do exercício proposto.

...