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

Fite a regressão linear, \(g = \beta_0 + \beta_1t\), e forme intervalos de confiança para os coeficientes. Examine os resíduos.

0 votos
20 visitas
perguntada Abr 26 em Economia por Lucas Iantorno Klotz (21 pontos)  
editado 12 horas atrás por Lucas Iantorno Klotz

Exercício 38 do capítulo 14 do livro "Mathematical Statistics and Data Analysis" de John A. Rice, 3 ed.

A tabela observa valores do modulo de Young (\(g\)) medida em temperatura (\(T\)) para varas de safira.

A imagem será apresentada aqui.

Compartilhe

1 Resposta

+1 voto
respondida Abr 26 por Lucas Iantorno Klotz (21 pontos)  
editado Abr 26 por Lucas Iantorno Klotz

Bem, usaremos python para a resolução do exercício. Primeiramente, importe algumas bibliotecas:

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

Em seguida, montamos a tabela do enunciado usando o numpy:

 Temperature = np.array([500,550,600,603,603,650,650,650,700,700,700,750,
                   750,750,800,800,800,850,850,900,900,950,1000,1000])
 Ymodulus = np.array([328,296,266,260,244,240,232,213,204,203,184,
                174,175,154,152,146,124,117,94,97,61,38,30,5])

A biblioteca do statsmodel nos garante a regressão do módulo de Young com a temperatura:

df = pd.DataFrame({'Youngs Modulus':Ymodulus, 
                   'Temperature': Temperature,
                   'Fitted Values': fitted_value, #valores fitados pelo modelo
                   'Resiudal': residual}) #resíduos

formula = 'Ymodulus~Temperature'
model = smf.ols(formula, data =df)
result=model.fit()
fitted_value = result.fittedvalues
paramat = result.params
residual = result.resid

A imagem será apresentada aqui.

Abaixo temos a relação linear entre as duas variáveis:

plt.plot(Temperature, Ymodulus, 'o', color="green")
plt.plot(Temperature,fitted_value, color = "orange")
plt.xlabel('Temperature')
plt.ylabel('Youngs Modulus')

A imagem será apresentada aqui.

Construímos três intervalos de confiança, baseados em níveis de significânica com valores \(\alpha = 0.05, 0.01, 0.1\), respectivamente:

confidence_5 = result.conf_int(alpha=0.05)
confidence_1 = result.conf_int(alpha=0.01)
confidence_10 = result.conf_int(alpha = 0.1)

A imagem será apresentada aqui.

Por fim, analisemos os resíduos:

plt.scatter(Temperature,residual, color = 'orange')
plt.ylabel('Residuals')
plt.xlabel('Temperature (T)')

A imagem será apresentada aqui.

O resultado é curioso. A variância do erro não é constante, algo que assumimos como hipótese na derivação de propriedades do estimador de \(\beta\). Em especial, se analisarmos a tabela do enunciado, a medida em modulo de Young foi tomada na mesma temperatura repetidas vezes, com o ajuste variando entre -16 e +20, independente do aumento ou não da temperatura. Dessa forma, uma possível explicação é que a cada medida, novos erros foram introduzidos e afetaram a medição. A princípio, o modelo não é fiel à uma representação acurada do fenômeno.

comentou Abr 27 por Ricardo Nunes (11 pontos)  

Parabéns pela resposta, desenvolvimento foi bem simples e objetivo!

Devido ao número limitado na amostra não podemos realizar diversos testes interessantes, como o teste Jarque Bera, que testa a hipótese nula dos resíduos seguirem uma distribuição normal. Tal hipótese é fundamental para que possamos fazer inferências a partir da nossa regressão.

De toda forma resolvi adicionar uma variável quadrática ao modelo para verificar se conseguiríamos um melhor "fit". Na verdade, devido a linearidade aparente das duas variáveis, o resultado esperado é de que o modelo não melhore. De toda forma segue o código em Python:

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

qm = smf.ols('Ymodulus~Temperature +np.power(Temperature,2)', data = df)
result_2 = qm.fit()
fitted_value_2 = result_2.fittedvalues 
paramat_2 = result_2.params
residual_2 = result_2.resid
df['Fitted_values_QM'] = fitted_value_2
df['Residual_QM'] = residual_2

A imagem será apresentada aqui.

Claramente a variável ao quadrado não melhorou o Fit do modelo, ela não é significante. E, de fato, quando plotamos as duas variáveis, Ymodulus e Temperature, verificamos uma linearidade:

plt.scatter(Temperature,Ymodulus, color = 'orange')
plt.ylabel('Ymodulus')
plt.xlabel('Temperature (T)')

A imagem será apresentada aqui.

...