Regressao3

Author

Silvio Aparecida da Silva

Modelo de Regressão Linear multipla

O modelo de regressão linear multipla explica a estrutura do fenômeno em observação a partir de conjunto de variáveis explicativas (\(x_1, x_2,...,x_n\)) em relação a outra considerada uma variável dependente (Y).

\[ y=\beta_0+\beta_1x_2+\beta_2x_2+...+\beta_nx_n \]

Exemplo - Preço de imóvel em relação as variáveis explicativas

Variáveis

Preço = preço do imóvel

Área = Tamanho do imóvel

Idade = Idade do imóvel

Piscina = Variável dummy (1=tem piscina, 0= não tem piscina)

  1. Abrindo dados e tabela resumo
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   4.0.2     ✔ tibble    3.2.1
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.2.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
dados<-read_csv("https://raw.githubusercontent.com/Silvioest/teste/refs/heads/master/dadosImoveis.csv")
Rows: 150 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl (4): preco, area, idade, piscina

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
summary(dados)
     preco             area            idade            piscina   
 Min.   : 94006   Min.   : 50.72   Min.   : 0.3286   Min.   :0.0  
 1st Qu.:194946   1st Qu.:100.87   1st Qu.: 9.8933   1st Qu.:0.0  
 Median :228040   Median :118.24   Median :18.8624   Median :0.0  
 Mean   :231578   Mean   :119.27   Mean   :19.6673   Mean   :0.4  
 3rd Qu.:265663   3rd Qu.:137.31   3rd Qu.:29.2451   3rd Qu.:1.0  
 Max.   :368679   Max.   :185.62   Max.   :39.9762   Max.   :1.0  
  1. Correlação
cor(dados[,1:3])
           preco      area      idade
preco  1.0000000 0.8924110 -0.1111149
area   0.8924110 1.0000000  0.1144439
idade -0.1111149 0.1144439  1.0000000
  1. Histograma da variável preço do imóvel
hist(dados$preco,
     main = "Histograma da v.a preco",
     xlab="preco")

  1. Ajustando o modelo de regressão linear simples
ajuste1<-lm(preco~area+factor(piscina), data = dados)
summary(ajuste1)

Call:
lm(formula = preco ~ area + factor(piscina), data = dados)

Residuals:
   Min     1Q Median     3Q    Max 
-41231 -12476    549  11251  36159 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)      39273.21    5749.60   6.831 2.08e-10 ***
area              1501.09      47.37  31.688  < 2e-16 ***
factor(piscina)1 33177.27    2745.91  12.082  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 16290 on 147 degrees of freedom
Multiple R-squared:  0.8978,    Adjusted R-squared:  0.8965 
F-statistic:   646 on 2 and 147 DF,  p-value: < 2.2e-16
  1. Gráfico de dispersão com diferença salarial entre homem e mulher
# Criando o gráfico
ggplot(dados, aes(x = area, y = preco, color = factor(piscina))) +
  geom_point(alpha = 0.6) + # Pontos reais (dispersão)
  geom_smooth(method = "lm", se = FALSE,fullrange = TRUE) + # Retas de regressão
  labs(title = "Diferença preço de imóvel com piscina e area",
       x = "Area",
       y = "Preco",
       color = "Piscina") +
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

  1. Ajustando o modelo de regressão linear com todas as variáveis
ajuste2<-lm(preco~area+idade+factor(piscina), data = dados)
summary(ajuste2)

Call:
lm(formula = preco ~ area + idade + factor(piscina), data = dados)

Residuals:
   Min     1Q Median     3Q    Max 
-29680  -7815   1070   7204  31340 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)      52440.37    4526.75   11.59   <2e-16 ***
area              1544.91      36.08   42.81   <2e-16 ***
idade             -928.57      88.23  -10.52   <2e-16 ***
factor(piscina)1 32850.57    2077.91   15.81   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 12330 on 146 degrees of freedom
Multiple R-squared:  0.9419,    Adjusted R-squared:  0.9407 
F-statistic: 789.2 on 3 and 146 DF,  p-value: < 2.2e-16
  1. Verificando colinearidade das variáveis
library(car)
Carregando pacotes exigidos: carData

Anexando pacote: 'car'
O seguinte objeto é mascarado por 'package:dplyr':

    recode
O seguinte objeto é mascarado por 'package:purrr':

    some
vif(ajuste2)
           area           idade factor(piscina) 
       1.036262        1.013497        1.022695 
  1. Análise de Resíduos

Resíduos vs valores ajustados

plot(ajuste2,1)

Gráfico QQPlot

plot(ajuste2,2)

Gráfico de distância de COOk’s

plot(ajuste2,4)

  1. Histograma do resíduos
hist(ajuste2$residuals)

  1. Teste de normalidade

As hipóteses do teste são:

  • \(H_0\)(hipótese nula): Os dados seguem uma distribuição normal.

  • \(H_1\) (Hipótese Alternativa): Os dados não seguem uma distribuição normal.

P-valor > 0.05 para não rejeitar a normalidade

Para amostra grande (n>50) utilizar o teste de Kolmogorov-Smirnov com correção de Correção de Lilliefors

library(nortest)
lillie.test(ajuste2$residuals)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  ajuste2$residuals
D = 0.051685, p-value = 0.4218

AJUSTE PERFEITO