1 CONHECENDO OS DADOS


1.1 DataSet do projeto

Pesquisa Nacional por Amostra de Domicílios - 2015

A Pesquisa Nacional por Amostra de Domicílios - PNAD investiga anualmente, de forma permanente, características gerais da população, de educação, trabalho, rendimento e habitação e outras, com periodicidade variável, de acordo com as necessidades de informação para o país, como as características sobre migração, fecundidade, nupcialidade, saúde, segurança alimentar, entre outros temas. O levantamento dessas estatísticas constitui, ao longo dos 49 anos de realização da pesquisa, um importante instrumento para formulação, validação e avaliação de políticas orientadas para o desenvolvimento socioeconômico e a melhoria das condições de vida no Brasil.

Variáveis utilizadas

Renda

Rendimento mensal do trabalho principal para pessoas de 10 anos ou mais de idade.

Idade

Idade do morador na data de referência em anos.

Altura (elaboração própria)

Altura do morador em metros.

UF

Código Descrição
11 Rondônia
12 Acre
13 Amazonas
14 Roraima
15 Pará
16 Amapá
17 Tocantins
21 Maranhão
22 Piauí
23 Ceará
24 Rio Grande do Norte
25 Paraíba
26 Pernambuco
27 Alagoas
28 Sergipe
29 Bahia
31 Minas Gerais
32 Espírito Santo
33 Rio de Janeiro
35 São Paulo
41 Paraná
42 Santa Catarina
43 Rio Grande do Sul
50 Mato Grosso do Sul
51 Mato Grosso
52 Goiás
53 Distrito Federal

Sexo

Código Descrição
0 Masculino
1 Feminino

Anos de Estudo

Código Descrição
1 Sem instrução e menos de 1 ano
2 1 ano
3 2 anos
4 3 anos
5 4 anos
6 5 anos
7 6 anos
8 7 anos
9 8 anos
10 9 anos
11 10 anos
12 11 anos
13 12 anos
14 13 anos
15 14 anos
16 15 anos ou mais
17 Não determinados
Não aplicável

Cor

Código Descrição
0 Indígena
2 Branca
4 Preta
6 Amarela
8 Parda
9 Sem declaração

Observação

Os seguintes tratamentos foram realizados nos dados originais:

    1. Foram eliminados os registros onde a Renda era inválida (999 999 999 999);
    1. Foram eliminados os registros onde a Renda era missing;
    1. Foram considerados somente os registros das Pessoas de Referência de cada domicílio (responsável pelo domicílio).

Configurações

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

Confirgurando os gráficos:

options(repr.plot.width = 7, repr.plot.height = 4)

Importando dataset do projeto

dados <- read.csv('dados.csv')
head(dados)
##   UF Sexo Idade Cor Anos.de.Estudo Renda   Altura
## 1 11    0    23   8             12   800 1.603808
## 2 11    1    23   2             12  1150 1.739790
## 3 11    1    35   8             15   880 1.760444
## 4 11    0    46   2              6  3500 1.783158
## 5 11    1    47   8              9   150 1.690631
## 6 11    1    34   8             12   790 1.637906

Verificando a quantidade de linhas no dataset

nrow(dados)
## [1] 76840

2 RODANDO UMA REGRESSÃO LINEAR


Dataset de exemplo

\(Y\) = Gasto das famílias

\(X\) = Renda das Famílias

dataset = data.frame(
    Y = c(3011, 1305, 1879, 2654, 2849, 1068, 2892, 2543, 3074, 849, 2184, 2943, 1357, 2755, 2163, 3099, 1600, 353, 1778, 740, 2129, 3302, 2412, 2683, 2515, 2395, 2292, 1000, 600, 1864, 3027, 1978, 2791, 1982, 900, 1964, 1247, 3067, 700, 1500, 3110, 2644, 1378, 2601, 501, 1292, 2125, 1431, 2260, 1770),
    X = c(9714, 3728, 6062, 8845, 8378, 3338, 8507, 7947, 9915, 1632, 6825, 8918, 4100, 9184, 6180, 9997, 4500, 1069, 5925, 2466, 6083, 9712, 7780, 8383, 7185, 7483, 7640, 2100, 2000, 6012, 8902, 5345, 8210, 5662, 2700, 6546, 2900, 9894, 1500, 5000, 8885, 8813, 3446, 7881, 1164, 3401, 6641, 3329, 6648, 4800)
)

Vamos ver os registros iniciais de nosso Dataset

head(dataset)
##      Y    X
## 1 3011 9714
## 2 1305 3728
## 3 1879 6062
## 4 2654 8845
## 5 2849 8378
## 6 1068 3338

Verificando o número de linhas:

nrow(dataset)
## [1] 50

Estatísticas descritivas

Documentações:

Vamos ver as estatisticas deste dataset

summary(dataset)
##        Y              X       
##  Min.   : 353   Min.   :1069  
##  1st Qu.:1362   1st Qu.:3516  
##  Median :2127   Median :6363  
##  Mean   :2011   Mean   :6066  
##  3rd Qu.:2676   3rd Qu.:8382  
##  Max.   :3302   Max.   :9997

Vamos analisar o desvio padrão de cada uma das variáveis.

apply(dataset, 2, sd)
##         Y         X 
##  817.2146 2707.1878

Análise gráfica

Documentações:

Vamos aprender uma maneira de modificar o dataset para uma coluna única com as informações

head(stack(dataset))
##   values ind
## 1   3011   Y
## 2   1305   Y
## 3   1879   Y
## 4   2654   Y
## 5   2849   Y
## 6   1068   Y

Agora vamo construir um boxplot com as infomrações no formato de linha única.

ggplot(stack(dataset), aes(x = ind, y = values)) + 
    stat_boxplot(geom ='errorbar', width = 0.4) + 
    geom_boxplot(fill = c('green', "blue")) + 
    coord_flip() +
    xlab("Variáveis") + 
    ylab("Reais (R$)") + 
    ggtitle('Box-plot') +
    theme(
        plot.title=element_text(size = 14, hjust = 0.5),
        axis.title.y=element_text(size = 12, vjust = +0.2),
        axis.title.x=element_text(size = 12, vjust = -0.2),
        axis.text.y=element_text(size = 10),
        axis.text.x=element_text(size = 10),
    )

Vamos comparar também com o gráfico de dispersão com a reta de regressão.

ggplot(data = dataset, aes(x = X, y = Y)) + 
    geom_point(size = 1.5, stroke = 0) + 
    geom_smooth(method = lm) +
    xlab("Renda das Famílias") + 
    ylab("Gasto das Famílias") + 
    ggtitle('Reta de Regressão - Gasto X Renda') +
    theme(
        plot.title=element_text(size = 12, hjust = 0.5),
        axis.title.y=element_text(size = 10, vjust = +0.2),
        axis.title.x=element_text(size = 10, vjust = -0.2),
        axis.text.y=element_text(size = 10),
        axis.text.x=element_text(size = 10),
    )
## `geom_smooth()` using formula = 'y ~ x'

Análise da correlação

Documentações:

Vamos compreender a matriz de correlação entre as duas variáveis do dataset

cor <-cor(dataset)
cor
##           Y         X
## Y 1.0000000 0.9848352
## X 0.9848352 1.0000000

Para melhorar a visualização da correlação use a biblioteca corrplot.

library(corrplot)
## corrplot 0.92 loaded
corrplot(cor, method="number")

Veja que na diagonal inferior temos uma correlação muito significativa para o cruzamento de x e y.

Modelo de regressão linear simples

Documentações:

Estimando o modelo

resultado_regressao <- lm(formula = Y ~ X, data= dataset)
resultado_regressao
## 
## Call:
## lm(formula = Y ~ X, data = dataset)
## 
## Coefficients:
## (Intercept)            X  
##    207.9033       0.2973

Neste caso encontramos o intercept do gráfico em y e a inclinação da reta ou taxa de crescimento de x.

Vamos analisar as estatísticas desta regressão

summary(resultado_regressao)
## 
## Call:
## lm(formula = Y ~ X, data = dataset)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -202.49 -125.96  -22.28  140.53  260.67 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.079e+02  5.013e+01   4.148 0.000136 ***
## X           2.973e-01  7.559e-03  39.328  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 143.2 on 48 degrees of freedom
## Multiple R-squared:  0.9699, Adjusted R-squared:  0.9693 
## F-statistic:  1547 on 1 and 48 DF,  p-value: < 2.2e-16

Nela podemos verificar inúmeros testes e valores adicionais.

Obtendo as previsões dentro da amostra

dataset$Y_previsto <- resultado_regressao$fitted.values
head(dataset)
##      Y    X Y_previsto
## 1 3011 9714   3095.785
## 2 1305 3728   1316.203
## 3 1879 6062   2010.079
## 4 2654 8845   2837.439
## 5 2849 8378   2698.605
## 6 1068 3338   1200.260

Agora temos uma nova coluna com resultados previstos para y adotando-se a regra de correlação estabelecida.

3 CORRELAÇÃO


3.1 Covariância


A covariância, ou variância conjunta, é a medida do grau de interdependência (ou inter-relação) numérica entre duas variáveis. É definida da seguinte maneira:

Covariância populacional

\[\sigma_{xy} = \frac 1n\sum_{i=1}^{n}(X_i-\mu_x)(Y_i-\mu_y)\]

Covariância amostral

\[S_{xy} = \frac 1{n-1}\sum_{i=1}^{n}(X_i-\bar{X})(Y_i-\bar{Y})\]

Documentações:

Gerando uma amostra aleatória para facilitar o entendimento

amostra <- data.frame(
    Idade = c(39, 29, 21, 49, 29, 34, 32, 32, 24, 53, 28, 28, 46, 58, 41, 43, 31, 55, 52, 54),
    Renda = c(1500, 1000, 3500, 1570, 600, 1200, 2000, 500, 1300, 600, 1500, 3000, 0, 550, 1500, 1600, 746, 1000, 0, 1400),
    Anos.de.Estudo = c(6, 7, 12, 13, 9, 12, 12, 6, 7, 5, 7, 16, 12, 3, 12, 9, 1, 6, 1, 6),
    Altura = c(1.6162, 1.7525, 1.6940, 1.8041, 1.7854, 1.7468, 1.6633, 1.6937, 1.6569, 1.6671, 1.6786, 1.6730, 1.7853, 1.6090, 1.7833, 1.6709, 1.6392, 1.6861, 1.7107, 1.7288)
)

Obtendo a matriz de covariância

matriz_cov <- cov(amostra)
matriz_cov
##                        Idade        Renda Anos.de.Estudo       Altura
## Idade           1.344105e+02  -4947.96842    -16.4105263  0.016483684
## Renda          -4.947968e+03 764668.32632   2209.0210526 -7.139630000
## Anos.de.Estudo -1.641053e+01   2209.02105     16.9368421  0.111258421
## Altura          1.648368e-02     -7.13963      0.1112584  0.003353907

Identificando as variâncias na diagonal principal da matriz

var(amostra$Idade)
## [1] 134.4105

3.2 Interpretação da Covariância


Valor de \(S_{xy}\) positivo indica uma associação linear positiva entre x e y, ou seja, à medida que o valor de x aumenta, o valor de y também aumenta. Neste caso, podemos ver na figura abaixo que os pontos que têm a maior influência sobre \(S_{xy}\) devem estar nos quadrantes I e III.

Se o valor de \(S_{xy}\) for negativo temos um indicativo de associação linear negativa entre x e y, ou seja, à medida que x aumenta, o valor de y diminui. Neste caso, podemos ver na figura abaixo que os pontos que têm a maior influência sobre \(S_{xy}\) devem estar nos quadrantes II e IV.

Finalmente, se os pontos estiverem uniformemente distribuídos pelos quadrantes, o valor de \(S_{xy}\) se aproximará de zero, indicando que não existe nenhuma associação linear entre x e y.

Verificando a existência de uma associação linear negativa

grafico <- amostra[, c('Renda', 'Idade')]

ggplot(data = grafico, aes(x = Renda, y = Idade)) + 
    geom_point(size = 1.5, stroke = 0) + 
    geom_hline(yintercept = mean(amostra$Idade), color = 'black') + 
    geom_vline(xintercept = mean(amostra$Renda), color = 'black')

Verificando a existência de uma associação linear positiva

grafico <- amostra[, c('Renda', 'Anos.de.Estudo')]

ggplot(data = grafico, aes(x = Renda, y = Anos.de.Estudo)) + 
    geom_point(size = 1.5, stroke = 0) + 
    geom_hline(yintercept = mean(amostra$'Anos.de.Estudo'), color = 'black') + 
    geom_vline(xintercept = mean(amostra$Renda), color = 'black')

Verificando a inexistência de uma associação linear entre as variáveis

grafico <- amostra[, c('Idade', 'Altura')]

ggplot(data = grafico, aes(x = Idade, y = Altura)) + 
    geom_point(size = 1.5, stroke = 0) + 
    geom_hline(yintercept = mean(amostra$Altura), color = 'black') + 
    geom_vline(xintercept = mean(amostra$Idade), color = 'black')

Observação Importante:

Pelo que foi apresentado pode parecer que valores elevados, tanto positivos quanto negativos, para a covariância indicam relações lineares fortes entre as variáveis envolvidas. No entanto, um problema quando se usa a covariância como uma medida da intensidade da relação linear é que o valor da covariância depende das unidades de medida para x e y.

Uma medida da relação entre duas variáveis que não é afetada pelas unidades de medida para x e y é o coeficiente de correlação que veremos no próximo tópico.

3.3 Coeficiente de correlação de Pearson


É obtido dividindo-se a covariância da população ou amostra pelo produto do desvio padrão populacional ou amostral de x pelo desvio padrão populacional ou amostral de y.

O coeficiente de correlação varia de -1 a +1. Valores que se aproximam de -1 ou +1 indicam uma relação linear forte. Quanto mais próxima a correlação estiver de zero, mais fraca será a relação.

Um ponto importante é que o coeficiente de correlação é uma medida de associação linear e não necessariamente de causação. Uma correlação alta entre duas variáveis não significa, necessariamente, que variações em uma delas provocará alterações na outra.

Coeficiente de correlação de Pearson - dados populacionais

\[\rho_{xy} = \frac{\sigma_{xy}}{\sigma_{x}\sigma_{y}}\]

Coeficiente de correlação de Pearson - dados amostrais

\[r_{xy} = \frac{s_{xy}}{s_{x}s_{y}}\]

Onde

\(\sigma_{xy}\) = covariância populacional entre x e y

\(s_{xy}\) = covariância amostral entre x e y

\(\sigma_{x}\) e \(\sigma_{y}\) = desvios padrão populacionais de x e y, respectivamente

\(s_{x}\) e \(s_{y}\) = desvios padrão amostrais de x e y, respectivamente

Obtendo \(s_{xy}\)

s_xy <- cov(amostra[c('Altura', 'Renda')])
s_xy
##              Altura        Renda
## Altura  0.003353907     -7.13963
## Renda  -7.139630000 764668.32632
s_xy <- s_xy['Altura', 'Renda']
s_xy
## [1] -7.13963

Obtendo \(s_x\) e \(s_y\)

s_x <- sd(amostra$Altura)
s_y <- sd(amostra$Renda)

Obtendo o coeficiente de correlação \(r_{xy}\)

r_xy <- s_xy / (s_x * s_y)
r_xy
## [1] -0.140982

Obtendo uma matriz de correlação

cor(amostra[c('Altura', 'Renda')])
##           Altura     Renda
## Altura  1.000000 -0.140982
## Renda  -0.140982  1.000000
cor(dataset[c('Y', 'X')])
##           Y         X
## Y 1.0000000 0.9848352
## X 0.9848352 1.0000000
grafico <- amostra[, c('Renda', 'Altura')]

ggplot(data = grafico, aes(x = Renda, y = Altura)) + 
    geom_point(size = 1.5, stroke = 0) + 
    geom_hline(yintercept = mean(amostra$Altura), color = 'black') + 
    geom_vline(xintercept = mean(amostra$Renda), color = 'black')

ggplot(data = dataset, aes(x = X, y = Y)) + 
    geom_point(size = 1.5, stroke = 0) + 
    geom_hline(yintercept = mean(dataset$Y), color = 'black') + 
    geom_vline(xintercept = mean(dataset$X), color = 'black')

4 REGRESSÃO LINEAR


A análise de regressão diz respeito ao estudo da dependência de uma variável (a variável dependente) em relação a uma ou mais variáveis, as variáveis explicativas ou independentes, visando estimar e/ou prever o valor médio da primeira em termos dos valores conhecidos ou fixados das segundas.

Terminologia

A variável que é prevista é conhecida como variável dependente (Y).

A variável utilizada para prever o valor da variável dependente é conhecida como variável independente (X).

Em nosso treinamento vamos abordar o tipo mais simples de análise de regressão que considera uma variável dependente e apenas uma variável independente onde a relação entre as variáveis se aproxima de uma linha reta.

4.1 Regressão linear simples


Função consumo

Um economista famoso do passado concluiu em um de seus estudos que os indivíduos tendem a aumentar o seu consumo conforme sua renda aumenta. Logicamente esta teoria ganhou um pouco mais de complexidade, mas vamos utilizar sua forma mais simples para entender o procedimento de análise de regressão com a seguninte formulação:

\[Y_i = \beta_1 + \beta_2X_i\]

Onde

  • \(Y_i\) é o gasto das famílias ou consumo das famílias

  • \(X_i\) é a renda disponível

  • \(\beta_1\) é conhecido como intercepto (no modelo teórico acima é conhecido como consumo autônomo, ou seja, o consumo quando o rendimento é zero)

  • \(\beta_2\) é o coefiente angular (no modelo teórico é a propensão marginal a consumir)

Em uma análise de regressão linear simples, o interesse está em estimar a função de regressão populacional como a apresentada acima, ou seja, estimar os valores dos parâmetros \(\beta_1\) e \(\beta_2\) com base nas observações de \(Y\) e \(X\).

Carregando o dataset

dataset <- data.frame(
    Y = c(3011, 1305, 1879, 2654, 2849, 1068, 2892, 2543, 3074, 849, 2184, 2943, 1357, 2755, 2163, 3099, 1600, 353, 1778, 740, 2129, 3302, 2412, 2683, 2515, 2395, 2292, 1000, 600, 1864, 3027, 1978, 2791, 1982, 900, 1964, 1247, 3067, 700, 1500, 3110, 2644, 1378, 2601, 501, 1292, 2125, 1431, 2260, 1770),
    X = c(9714, 3728, 6062, 8845, 8378, 3338, 8507, 7947, 9915, 1632, 6825, 8918, 4100, 9184, 6180, 9997, 4500, 1069, 5925, 2466, 6083, 9712, 7780, 8383, 7185, 7483, 7640, 2100, 2000, 6012, 8902, 5345, 8210, 5662, 2700, 6546, 2900, 9894, 1500, 5000, 8885, 8813, 3446, 7881, 1164, 3401, 6641, 3329, 6648, 4800)
)
head(dataset)
##      Y    X
## 1 3011 9714
## 2 1305 3728
## 3 1879 6062
## 4 2654 8845
## 5 2849 8378
## 6 1068 3338

Identificando a relação entre as variáveis

Plota a reta de regressão entre duas variáveis juntamente com a dispersão entre elas.

ggplot(data = dataset, aes(x = X, y = Y)) + 
    geom_point(size = 1.5, stroke = 0) + 
    geom_smooth(method = lm) +
    xlab("Renda das Famílias") + 
    ylab("Gasto das Famílias") + 
    ggtitle('Reta de Regressão - Gasto X Renda') +
    theme(
        plot.title=element_text(size = 12, hjust = 0.5),
        axis.title.y=element_text(size = 10, vjust = +0.2),
        axis.title.x=element_text(size = 10, vjust = -0.2),
        axis.text.y=element_text(size = 10),
        axis.text.x=element_text(size = 10),
    )
## `geom_smooth()` using formula = 'y ~ x'

Matriz de correlação

 corrplot(cor(dataset), method="number")

Função de regressão populacional

A equação formulada acima é conhecida como função de regressão populacional (FRP) e em alguns livros é também representada da seguinte forma:

\[E(Y|X_i) = \beta_1 + \beta_2X_i\]

Ela afirma que o valor esperado da distribuição de \(Y\), dado \(X_i\), tem uma relação funcional com \(X_i\), isto é, a resposta média de \(Y\) varia com \(X\). Os coeficientes \(\beta_1\) e \(\beta_2\) são conhecidos como coeficientes de regressão e também como intercepto e coeficiente angular, respectivamente.

O gráfico de dispersão mais abaixo deixa claro que com o aumento da renda familiar, em média, as despesas de consumo das famílias aumentam, mas não no mesmo nível. O que podemos dizer é que para um nível de renda \(X_i\) as despesas médias de consumo de uma família agrupam-se em torno do consumo médio de todas as famílias deste nível \(X_i\), isto é, em torno de sua esperança condicional \(E(Y|X_i)\). Portanto, podemos expressar o desvio individual de \(Y_i\) em torno de seu valor esperado da seguinte forma:

\[u_i = Y_i - E(Y|X_i)\]

ou

\[Y_i = E(Y|X_i) + u_i\]

onde o desvio \(u_i\) é uma variável aleatória não-observável que assume valores positivos ou negativos. Esta variável é também conhecida como termo de erro estocástico.

Observe que a partir da elaboração acima podemos representar a FRP em sua forma estocástica da seguinte maneira:

\[Y_i = \beta_1 + \beta_2X_i + u_i\]

4.2 O método de mínimos quadrados


Considere a seguinte função de regressão da população (FRP) para duas variáveis:

\[Y_i = \beta_1 + \beta_2X_i + u_i\]

Como a FRP não pode ser obtida de forma direta, precisamos estimá-la através da função de regressão amostral (FRA).

\[Y_i = \hat{\beta}_1 + \hat{\beta}_2X_i + \hat{u}_i\] \[Y_i = \hat{Y}_i + \hat{u}_i\]

onde \(\hat{Y}_i\) é o valor estimado de \(Y_i\).

A partir da equação acima podemos expressar o erro da seguinte maneira:

\[\hat{u}_i = Y_i - \hat{Y}_i\] \[\hat{u}_i = Y_i - \hat{\beta}_1 - \hat{\beta}_2X_i\]

A ideia é determinar FRA de forma que fique o mais próximo possível do valor observado de \(Y\). Intuitivamente uma forma interessante de fazer isso seria determinar FRA de maneira que a soma dos resíduos seja a menor possível.

\[\sum\hat{u}_i = \sum{(Y_i - \hat{Y}_i)}\]

Avaliando a figura abaixo se pode verificar que talvez o critério de minimizar a soma dos resíduos não seja a melhor abordagem para solucionar o problema.

O critério de minimização da soma dos resíduos assume que todos os resíduos têm o mesmo peso no somatório, o que nem sempre se comprova. Em nosso exemplo os resíduos \(\hat{u}_1\) e \(\hat{u}_4\) encontram-se bem mais afastados da FRA que \(\hat{u}_2\) e \(\hat{u}_3\). Isso acarreta na possibilidade de que a soma dos \(\hat{u}_i\)’s seja bastante pequena e até mesmo nula, mesmo que os resíduos estejam muito dispersos em relação a reta de regressão.

Para evitar tal problema adotou-se o critério de minimização da soma dos quadrados dos resíduos que é conhecido como Método de Mínimos Quadrados.

\[\sum\hat{u}_i^2 = \sum{(Y_i - \hat{Y}_i)^2}\] \[\sum\hat{u}_i^2 = \sum{(Y_i - \hat{\beta}_1 - \hat{\beta}_2X_i)^2}\]

Após um procedimento de diferenciação, algumas simplificações e manipulações algébricas obtemos os estimadores de mínimos quadrados.

\[ \begin{equation} \boxed{\hat{\beta}_2 = \frac{n\sum{X_iY_i} - \sum{X_i}\sum{Y_i}}{n\sum{X_i^2} - (\sum{X_i})^2}} \end{equation} \]

\[ \begin{equation} \boxed{ \begin{eqnarray} \hat{\beta}_1 &=& \frac{\sum{X_i^2}\sum{Y_i} - \sum{X_i}\sum{X_iY_i}}{n\sum{X_i^2} - (\sum{X_i})^2}\\ &=& \bar{Y} - \hat{\beta}_2\bar{X} \end{eqnarray} } \end{equation} \]

4.3 Estimadores de mínimos quadrados ordinários


Obter \(n\)

n <- nrow(dataset)
n
## [1] 50

Obter \(\sum{Y}\)

SOMA_Y <- sum(dataset$Y)
SOMA_Y
## [1] 100556

Obter \(\sum{X}\)

SOMA_X <- sum(dataset$X)
SOMA_X
## [1] 303275

Obter \(\sum{X^2}\)

Método 01

dataset$X2 <- dataset$X ** 2
SOMA_X2 <- sum(dataset$X2)
SOMA_X2
## [1] 2198628939

Método 02

SOMA_X2 <- sum(apply(dataset, 1, function(x) x['X'] ** 2))
SOMA_X2
## [1] 2198628939

Eliminando a coluna criada

dataset$X2 <- NULL
head(dataset)
##      Y    X
## 1 3011 9714
## 2 1305 3728
## 3 1879 6062
## 4 2654 8845
## 5 2849 8378
## 6 1068 3338

Obter \(\sum{Y^2}\)

SOMA_Y2 <- sum(apply(dataset, 1, function(x) x['Y'] ** 2))
SOMA_Y2
## [1] 234954332

Obter \(\sum{XY}\)

SOMA_XY <- sum(apply(dataset, 1, function(x) x['Y'] * x['X']))
SOMA_XY
## [1] 716683794

Obter \(\hat{\beta}_2\)

\[\hat{\beta}_2 = \frac{n\sum{X_iY_i} - \sum{X_i}\sum{Y_i}}{n\sum{X_i^2} - (\sum{X_i})^2}\]

numerador <- n * SOMA_XY - SOMA_X * SOMA_Y
denominador <- n * SOMA_X2 - (SOMA_X) ** 2

beta_2 <- numerador / denominador
beta_2
## [1] 0.2972907

Obter \(\hat{\beta}_1\)

\[ \begin{eqnarray} \hat{\beta}_1 &=& \frac{\sum{X_i^2}\sum{Y_i} - \sum{X_i}\sum{X_iY_i}}{n\sum{X_i^2} - (\sum{X_i})^2}\\ &=& \bar{Y} - \hat{\beta}_2\bar{X} \end{eqnarray} \]

beta_1 <- mean(dataset$Y) - beta_2 * mean(dataset$X)
beta_1
## [1] 207.9033

Obtendo a estimativa dos parâmetros

Documentações:

resultado_regressao <- lm(formula = Y ~ X, data = dataset)
resultado_regressao
## 
## Call:
## lm(formula = Y ~ X, data = dataset)
## 
## Coefficients:
## (Intercept)            X  
##    207.9033       0.2973

Visualizando os parâmetros estimados

Documentações:

beta_1
## [1] 207.9033
beta_2
## [1] 0.2972907
coefficients(resultado_regressao)
## (Intercept)           X 
## 207.9033138   0.2972907
resumo <- summary(resultado_regressao)
resumo
## 
## Call:
## lm(formula = Y ~ X, data = dataset)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -202.49 -125.96  -22.28  140.53  260.67 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.079e+02  5.013e+01   4.148 0.000136 ***
## X           2.973e-01  7.559e-03  39.328  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 143.2 on 48 degrees of freedom
## Multiple R-squared:  0.9699, Adjusted R-squared:  0.9693 
## F-statistic:  1547 on 1 and 48 DF,  p-value: < 2.2e-16
resumo$coefficients
##                Estimate   Std. Error   t value     Pr(>|t|)
## (Intercept) 207.9033138 50.126682183  4.147558 1.362270e-04
## X             0.2972907  0.007559238 39.328132 3.555543e-38

4.4 Obtendo previsões


\[\hat{Y}_i = 207,9033 + 0,2973X_i\]

Previsões dentro da amostra

dataset['Y_previsto'] <- beta_1 + beta_2 * dataset$X
head(dataset, 10)
##       Y    X Y_previsto
## 1  3011 9714  3095.7851
## 2  1305 3728  1316.2030
## 3  1879 6062  2010.0795
## 4  2654 8845  2837.4395
## 5  2849 8378  2698.6047
## 6  1068 3338  1200.2596
## 7  2892 8507  2736.9552
## 8  2543 7947  2570.4724
## 9  3074 9915  3155.5405
## 10  849 1632   693.0817

Utilizando a função do R

dataset['Y_previsto_R'] <- resultado_regressao$fitted.values
head(dataset, 10)
##       Y    X Y_previsto Y_previsto_R
## 1  3011 9714  3095.7851    3095.7851
## 2  1305 3728  1316.2030    1316.2030
## 3  1879 6062  2010.0795    2010.0795
## 4  2654 8845  2837.4395    2837.4395
## 5  2849 8378  2698.6047    2698.6047
## 6  1068 3338  1200.2596    1200.2596
## 7  2892 8507  2736.9552    2736.9552
## 8  2543 7947  2570.4724    2570.4724
## 9  3074 9915  3155.5405    3155.5405
## 10  849 1632   693.0817     693.0817
dataset$Y_previsto_R <- NULL
head(dataset, 10)
##       Y    X Y_previsto
## 1  3011 9714  3095.7851
## 2  1305 3728  1316.2030
## 3  1879 6062  2010.0795
## 4  2654 8845  2837.4395
## 5  2849 8378  2698.6047
## 6  1068 3338  1200.2596
## 7  2892 8507  2736.9552
## 8  2543 7947  2570.4724
## 9  3074 9915  3155.5405
## 10  849 1632   693.0817

Estimando o ‘Gasto das Famílias’ fora da amostra

prever <- function(x){
    return(beta_1 + beta_2 * x)
}

prever(7510)
## [1] 2440.556

Estimando o ‘Gasto das Famílias’ fora da amostra com a função do R

Documentações:

predict(resultado_regressao, data.frame(X = c(7510, 7550)))
##        1        2 
## 2440.556 2452.448

4.5 Resíduos


Como vimos anteriormente, o resíduo da i-ésima observação é a diferença entre o valor observado de nossa variável dependente (\(Y_i\)) e o valor estimado da variável dependente (\(\hat{Y}_i\)).

\[\hat{u}_i = Y_i - \hat{Y}_i\]

Em outras palavras, \(\hat{u}_i\) é o erro obtido ao se utilizar a equação de regressão estimada para prever o valor da variável dependente.

dataset['u'] <- dataset$Y - dataset$Y_previsto
head(dataset)
##      Y    X Y_previsto          u
## 1 3011 9714   3095.785  -84.78509
## 2 1305 3728   1316.203  -11.20301
## 3 1879 6062   2010.079 -131.07948
## 4 2654 8845   2837.439 -183.43948
## 5 2849 8378   2698.605  150.39528
## 6 1068 3338   1200.260 -132.25964
dataset['Residuos'] <- resultado_regressao$residuals
head(dataset)
##      Y    X Y_previsto          u   Residuos
## 1 3011 9714   3095.785  -84.78509  -84.78509
## 2 1305 3728   1316.203  -11.20301  -11.20301
## 3 1879 6062   2010.079 -131.07948 -131.07948
## 4 2654 8845   2837.439 -183.43948 -183.43948
## 5 2849 8378   2698.605  150.39528  150.39528
## 6 1068 3338   1200.260 -132.25964 -132.25964
dataset$u <- NULL
head(dataset)
##      Y    X Y_previsto   Residuos
## 1 3011 9714   3095.785  -84.78509
## 2 1305 3728   1316.203  -11.20301
## 3 1879 6062   2010.079 -131.07948
## 4 2654 8845   2837.439 -183.43948
## 5 2849 8378   2698.605  150.39528
## 6 1068 3338   1200.260 -132.25964
mean(dataset$Residuos)
## [1] 1.465772e-15

4.6 Suposições sobre o termo de erro \(u\)


  1. O termo de erro \(u\) é uma variável aleatória com média igual a zero: \(E(u) = 0\)

  2. A variância de \(u\) é a mesma para todos os valores de \(X\)

  3. Os valores de \(u\) são independentes

  4. O termo de erro \(u\) é uma variável aleatória normalmente distribuída.

Plotando os resíduos do modelo

Documentações:

ggplot(data = dataset, aes(x = X, y = Residuos)) + 
    geom_hline(yintercept = 0, color = 'black') +
    geom_point(size = 1.5, stroke = 0) + 
    xlab("X") + 
    ylab("Resíduos") + 
    ggtitle('Resíduos vs Variável Independente') +
    theme(
        plot.title=element_text(size = 12, hjust = 0.5),
        axis.title.y=element_text(size = 10, vjust = +0.2),
        axis.title.x=element_text(size = 10, vjust = -0.2),
        axis.text.y=element_text(size = 10),
        axis.text.x=element_text(size = 10)
    )

ggplot(data = dataset, aes(x = Y_previsto, y = Residuos)) + 
    geom_hline(yintercept = 0, color = 'black') +
    geom_point(size = 1.5, stroke = 0) + 
    xlab("Y_Previsto") + 
    ylab("Resíduos") + 
    ggtitle('Resíduos vs Y_Previsto') +
    theme(
        plot.title=element_text(size = 12, hjust = 0.5),
        axis.title.y=element_text(size = 10, vjust = +0.2),
        axis.title.x=element_text(size = 10, vjust = -0.2),
        axis.text.y=element_text(size = 10),
        axis.text.x=element_text(size = 10),
    )

Hipótese de variância constante

ggplot(data = dataset, aes(x = Y_previsto, y = Residuos^2)) + 
    geom_point(size = 1.5, stroke = 0) + 
    xlab("Y_Previsto") + 
    ylab("Resíduos²") + 
    ggtitle('Resíduos² vs Y_Previsto') +
    theme(
        plot.title=element_text(size = 12, hjust = 0.5),
        axis.title.y=element_text(size = 10, vjust = +0.2),
        axis.title.x=element_text(size = 10, vjust = -0.2),
        axis.text.y=element_text(size = 10),
        axis.text.x=element_text(size = 10),
    )

4.7 O coeficiente de determinação \(R^2\)


O coeficiente de determinação R² é uma medida resumida que diz quanto a linha de regressão amostral se ajusta aos dados. Pode ser obtido a partir da seguinte fórmula:

\[R^2 = \frac{\big[\sum{(Y_i - \bar{Y})(\hat{Y}_i - \bar{Y})}\big]^2}{\sum{(Y_i - \bar{Y}})^2 \sum{(\hat{Y}_i - \bar{Y}})^2}\]

Sabemos que o i-ésimo resíduo representa o erro de usarmos \(\hat{Y}_i\) para estimar \(Y_i\). A soma dos quadrados desses resíduos é o valor que é minimizado pelo método dos mínimos quadrados. Esse valor pode ser representado da seguinte forma:

\[SQE = \sum{(Y_i - \hat{Y}_i)^2}\]

O valor da SQE é uma medida do erro de se usar a equação de regressão estimada para estimar os valores da variável dependente na amostra.

Outro componente que podemos medir é a soma dos quadrados total (SQT) que representa a medida do erro envolvido no uso da média (\(\bar{Y}\)) para fazer as estimativas. A SQT pode ser representada da forma abaixo:

\[SQT = \sum{(Y_i - \bar{Y})^2}\]

Para quantificar o quanto os valores estimados (\(\hat{Y}_i\)) se afastam da média (\(\bar{Y}\)) podemos obter mais uma soma de quadrados. Essa soma é chamada de soma dos quadrados da regressão (SQR) e é representada pela seguinte fórmula:

\[SQR = \sum{(\hat{Y}_i - \bar{Y})^2}\]

Soma do quadrados do erros (SQE)

head(dataset)
##      Y    X Y_previsto   Residuos
## 1 3011 9714   3095.785  -84.78509
## 2 1305 3728   1316.203  -11.20301
## 3 1879 6062   2010.079 -131.07948
## 4 2654 8845   2837.439 -183.43948
## 5 2849 8378   2698.605  150.39528
## 6 1068 3338   1200.260 -132.25964
SQE <- sum(apply(dataset, 1, function(x) x['Residuos'] ** 2))
SQE
## [1] 984986

Soma do quadrados total (SQT)

SQT <- sum(apply(dataset, 1, function(x) (x['Y'] - mean(dataset$Y)) ** 2))
SQT
## [1] 32724149

Soma do quadrados da regressão (SQR)

SQR <- sum(apply(dataset, 1, function(x) (x['Y_previsto'] - mean(dataset$Y)) ** 2))
SQR
## [1] 31739163

ANOVA

Documentações:

anova <- anova(resultado_regressao)
anova
## Analysis of Variance Table
## 
## Response: Y
##           Df   Sum Sq  Mean Sq F value    Pr(>F)    
## X          1 31739163 31739163  1546.7 < 2.2e-16 ***
## Residuals 48   984986    20521                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova[1, 2]
## [1] 31739163
anova[2, 2]
## [1] 984986
anova[1, 2] + anova[2, 2]
## [1] 32724149

Relação entre as somas de quadrados

\[SQT = SQR + SQE\]

Onde,

\(SQE = \sum{(Y_i - \hat{Y}_i)^2}\)

\(SQT = \sum{(Y_i - \bar{Y})^2}\)

\(SQR = \sum{(\hat{Y}_i - \bar{Y})^2}\)

Coeficiente de determinação (R²)

A regressão estimada teria um ajuste perfeito se todos os valores da variável dependente (\(Y_i\)) estiverem sobre a reta de regressão estimada. Quando isso ocorre temos \(Y_i - \hat{Y}_i = 0\) para todas as observações, o que resulta em uma \(SQE = 0\). Como \(SQT=SQR+SQE\), é possível deduzir que para termos um ajuste perfeito \(SQT\) deve ser igual a \(SQR\) e a razão entre estas medidas (\(\frac{SQR}{SQT}\)) deve ser igual a 1.

Quando o ajuste não é tão perfeito nota-se que a \(SQE\) apresenta valores maiores o que faz a razão \(\frac{SQR}{SQT}\) diminuir, e em uma situação de total imperfeição do ajuste teríamos uma \(SQR=0\) e \(SQE=SQT\) levando a \(\frac{SQR}{SQT}=0\).

A razão \(\frac{SQR}{SQT}\), que assume valores entre 0 e 1, é utilizada como medida de eficiência do ajuste da equação de regressão estimada. Essa medida é conhecida como coeficiente de determinação (R²).

\[R^2 = \frac{SQR}{SQT}\]

Observação

Somente com a utilização do R² não é possível tirar conclusões sobre a relação entre \(Y\) e \(X\) ser ou não ser estatisticamente significativa. Este tipo de afirmação deve basear-se em considerações que envolvem o tamanho da amostra e as propriedades da distribuição amostral dos estimadores mínimos quadrados.

R2 <- SQR / SQT
R2
## [1] 0.9699003
resumo <- summary(resultado_regressao)
resumo
## 
## Call:
## lm(formula = Y ~ X, data = dataset)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -202.49 -125.96  -22.28  140.53  260.67 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.079e+02  5.013e+01   4.148 0.000136 ***
## X           2.973e-01  7.559e-03  39.328  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 143.2 on 48 degrees of freedom
## Multiple R-squared:  0.9699, Adjusted R-squared:  0.9693 
## F-statistic:  1547 on 1 and 48 DF,  p-value: < 2.2e-16
resumo$r.squared
## [1] 0.9699003

4.8 Regresão Multipla


A regressão múltipla é uma técnica estatística utilizada para modelar a relação entre uma variável dependente e duas ou mais variáveis independentes. Ao contrário da regressão simples, que envolve apenas uma variável independente, a regressão múltipla permite considerar múltiplos fatores que podem influenciar a variável de interesse.

Nesse tipo de análise, o objetivo é encontrar a equação que melhor descreve a relação entre a variável dependente e as variáveis independentes, levando em consideração o impacto de cada variável enquanto controla os efeitos das demais. A regressão múltipla permite quantificar a contribuição relativa de cada variável independente para a variável dependente, identificando quais são estatisticamente significativas.

\[Y_i = \beta_0 + \beta_1X_1+ \beta_2X_2+ \cdots + \beta_nX_n + e\]

Um exemplo prático de aplicação da regressão múltipla é a análise do desempenho acadêmico de estudantes, considerando variáveis como horas de estudo, idade, número de disciplinas cursadas, entre outros. Ao utilizar a regressão múltipla, é possível investigar a influência conjunta desses fatores no desempenho dos alunos, controlando os efeitos de cada variável para entender sua importância relativa.

Agora, vamos exemplificar a aplicação da regressão múltipla utilizando a linguagem R. Suponha que tenhamos um dataframe fictício chamado “dados_alunos”, com as variáveis “horas_estudo”, “idade” e “disciplinas_cursadas”, representando as variáveis independentes, e a variável dependente “desempenho”. Faremos a regressão múltipla para analisar a relação entre essas variáveis:

# Exemplo de regressão múltipla em R

# Carregando a biblioteca necessária
library(ggplot2)

# Criando um dataframe fictício
dados_alunos <- data.frame(horas_estudo = c(2, 3, 4, 5, 6),
                           idade = c(18, 19, 20, 21, 22),
                           disciplinas_cursadas = c(5, 5, 5, 5, 5),
                           desempenho = c(70, 75, 80, 85, 90))


# Realizando a regressão múltipla
modelo <- lm(desempenho ~ horas_estudo + idade + disciplinas_cursadas, data = dados_alunos)

# Imprimindo os coeficientes do modelo
print(modelo)
## 
## Call:
## lm(formula = desempenho ~ horas_estudo + idade + disciplinas_cursadas, 
##     data = dados_alunos)
## 
## Coefficients:
##          (Intercept)          horas_estudo                 idade  
##                   60                     5                    NA  
## disciplinas_cursadas  
##                   NA

Agora vamos entender os resultados apresentados:

summary(modelo)
## Warning in summary.lm(modelo): essentially perfect fit: summary may be
## unreliable
## 
## Call:
## lm(formula = desempenho ~ horas_estudo + idade + disciplinas_cursadas, 
##     data = dados_alunos)
## 
## Residuals:
##          1          2          3          4          5 
##  2.668e-15 -3.460e-15 -6.489e-16  1.004e-15  4.364e-16 
## 
## Coefficients: (2 not defined because of singularities)
##                       Estimate Std. Error   t value Pr(>|t|)    
## (Intercept)          6.000e+01  3.525e-15 1.702e+16   <2e-16 ***
## horas_estudo         5.000e+00  8.308e-16 6.018e+15   <2e-16 ***
## idade                       NA         NA        NA       NA    
## disciplinas_cursadas        NA         NA        NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.627e-15 on 3 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 3.622e+31 on 1 and 3 DF,  p-value: < 2.2e-16

Neste exemplo, utilizamos a função lm do R para realizar a regressão múltipla, especificando as variáveis independentes (horas_estudo, idade, disciplinas_cursadas) e a variável dependente (desempenho). Em seguida, imprimimos os coeficientes do modelo, que representam a contribuição de cada variável independente para a variável dependente, controlando os efeitos das demais variáveis.

  • O R-quadrado varia entre 0 e 1 e mede a proporção de variação nos dados que é contabilizada pelo modelo.
  • Quanto maior a estatístca de teste, menor o p_valor e mais significativo o modelo.

A regressão múltipla é uma ferramenta valiosa na análise estatística, pois permite explorar e quantificar a relação entre múltiplas variáveis, auxiliando na compreensão e previsão de fenômenos complexos. Ela é amplamente utilizada em diversos campos, incluindo ciências sociais, economia, saúde e pesquisa de mercado, proporcionando insights importantes para a tomada de decisões informadas.

4.8.1 Avaliando um modelo

Avaliar um modelo de regressão múltipla é crucial para garantir sua eficácia na análise estatística e aprimorar suas capacidades preditivas. A avaliação do modelo envolve a análise dos preditores incluídos no modelo e a identificação daqueles que são estatisticamente significativos para a variável resposta. O pacote MASS do R, desenvolvido por Venables e Ripley, fornece uma série de ferramentas úteis para realizar essa avaliação.

Aqui está uma explicação detalhada do processo de avaliação de um modelo de regressão múltipla usando o pacote MASS:

    1. Ajuste do modelo: Primeiro, é necessário ajustar o modelo de regressão múltipla aos dados. A função lm() do R é utilizada para esse fim. Suponha que estamos interessados em analisar a relação entre uma variável resposta “y” e dois preditores “x1” e “x2”. O código para ajustar o modelo seria o seguinte:
library(MASS)
modelo <- lm(y ~ x1 + x2, data = dados)
    1. Avaliação global do modelo: É importante analisar a qualidade geral do modelo. A função summary() pode ser usada para obter informações estatísticas relevantes, como R-quadrado ajustado, estatísticas F e os coeficientes estimados para cada preditor. Por exemplo:
summary(modelo)
    1. Avaliação dos preditores: A avaliação dos preditores envolve a análise da significância estatística de cada coeficiente estimado. Isso é feito verificando os valores p associados a cada coeficiente. Valores p baixos (geralmente abaixo de 0,05) indicam que o preditor é estatisticamente significativo.
    1. Remoção de preditores pouco significativos: Caso sejam identificados preditores que não são estatisticamente significativos, eles podem ser removidos do modelo. Isso pode ser feito utilizando a função stepAIC() do pacote MASS, que utiliza o critério de informação de Akaike (AIC) para selecionar os melhores preditores. Por exemplo:
modelo_ajustado <- stepAIC(modelo)
    1. Avaliação do modelo ajustado: Após remover os preditores pouco significativos, é importante realizar uma nova avaliação do modelo ajustado. Isso pode ser feito repetindo a análise global do modelo (passo 2) e a avaliação dos preditores (passo 3) para o modelo ajustado.

Agora, vamos apresentar um exemplo prático utilizando o pacote MASS e o R:

library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
# Criação do dataframe fictício
dados <- data.frame(
  y = c(2, 4, 6, 8, 10),
  x1 = c(1, 2, 3, 4, 5),
  x2 = c(0, 1, 0, 1, 0),
  x3 = c(0,0,1,1,0),
  x4 = c(1,1,1,1,1)
)


# Ajuste do modelo de regressão múltipla
modelo <- lm(y ~ x1 + x2+x3+x4, data = dados)

# Avaliação global do modelo
summary(modelo)
## Warning in summary.lm(modelo): essentially perfect fit: summary may be
## unreliable
## 
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4, data = dados)
## 
## Residuals:
##          1          2          3          4          5 
##  2.730e-16 -2.730e-16 -2.730e-16  2.730e-16  1.109e-31 
## 
## Coefficients: (1 not defined because of singularities)
##               Estimate Std. Error    t value Pr(>|t|)    
## (Intercept) -1.589e-15  6.065e-16 -2.620e+00    0.232    
## x1           2.000e+00  1.805e-16  1.108e+16   <2e-16 ***
## x2          -6.669e-16  5.061e-16 -1.318e+00    0.413    
## x3           5.150e-16  5.286e-16  9.740e-01    0.508    
## x4                  NA         NA         NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.459e-16 on 1 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 4.474e+31 on 3 and 1 DF,  p-value: < 2.2e-16

Agora vamos ajustar o modelo:

# Remoção de preditores pouco significativos
modelo_ajustado <- stepAIC(modelo, direction = "both")
## Start:  AIC=-351.49
## y ~ x1 + x2 + x3 + x4
## Warning: attempting model selection on an essentially perfect fit is nonsense
## Warning in stepAIC(modelo, direction = "both"): 0 df terms are changing AIC
##        Df Sum of Sq    RSS     AIC
## <none>               0.000 -351.49
## - x3    1     0.000  0.000 -350.34
## - x2    1     0.000  0.000 -345.03
## - x1    1    36.571 36.571   15.95
# Avaliação do modelo ajustado
summary(modelo_ajustado)
## Warning in summary.lm(modelo_ajustado): essentially perfect fit: summary may be
## unreliable
## 
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4, data = dados)
## 
## Residuals:
##          1          2          3          4          5 
##  2.730e-16 -2.730e-16 -2.730e-16  2.730e-16  1.109e-31 
## 
## Coefficients: (1 not defined because of singularities)
##               Estimate Std. Error    t value Pr(>|t|)    
## (Intercept) -1.589e-15  6.065e-16 -2.620e+00    0.232    
## x1           2.000e+00  1.805e-16  1.108e+16   <2e-16 ***
## x2          -6.669e-16  5.061e-16 -1.318e+00    0.413    
## x3           5.150e-16  5.286e-16  9.740e-01    0.508    
## x4                  NA         NA         NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.459e-16 on 1 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 4.474e+31 on 3 and 1 DF,  p-value: < 2.2e-16

Nesse exemplo fictício, criamos um dataframe com cinco variáveis: “y”, “x1”, “x2”, “x3” e “x4”. Ajustamos um modelo de regressão múltipla usando a função lm() e, em seguida, utilizamos a função stepAIC() para remover os preditores pouco significativos. Por fim, realizamos uma nova avaliação do modelo ajustado.

É importante ressaltar que a avaliação de um modelo de regressão múltipla deve levar em consideração não apenas os aspectos estatísticos, mas também o contexto teórico e prático dos dados, além de outros critérios relevantes para a análise específica em questão.

4.9 Regressão Polinomial

A regressão polinomial é uma técnica estatística utilizada para modelar e descrever a relação entre duas variáveis, sendo uma delas a variável independente e a outra a variável dependente. Diferente da regressão linear, que assume uma relação linear entre as variáveis, a regressão polinomial permite capturar relações não lineares, utilizando um polinômio como função de ajuste.

Neste tipo de regressão, o objetivo é encontrar o polinômio que melhor se ajusta aos dados, ou seja, aquele que minimiza a diferença entre os valores observados e os valores estimados pelo modelo. O polinômio pode ter diferentes graus, como quadrático (grau 2), cúbico (grau 3), entre outros, o que permite capturar diferentes padrões e curvaturas nos dados.

\[Y_i = \beta_0 + \beta_1X+ \beta_2X^2+ \cdots + \beta_nX^ n + e\]

Um exemplo prático de aplicação da regressão polinomial é a análise da relação entre o tempo de estudo e o desempenho em provas. Suponha que tenhamos um conjunto de dados com o número de horas de estudo (variável independente) e as notas obtidas pelos alunos (variável dependente). Ao utilizar a regressão polinomial, podemos encontrar um polinômio que descreve a relação entre essas variáveis de forma mais precisa do que uma simples regressão linear.

Agora, vamos exemplificar a aplicação da regressão polinomial utilizando a linguagem R. Para isso, consideraremos um dataframe fictício chamado “dados_estudo”, com as variáveis “horas_estudo” e “notas”. Faremos a regressão polinomial de grau 2 para encontrar o polinômio que melhor se ajusta aos dados:

# Exemplo de regressão polinomial em R

# Criando um dataframe fictício
dados_estudo <- data.frame(horas_estudo = c(2, 3, 4, 5, 6),
                           notas = c(60, 70, 80, 85, 90))

# Realizando a regressão polinomial de grau 2
modelo <- lm(notas ~ poly(horas_estudo, degree = 2), data = dados_estudo)

# Plotando o gráfico de dispersão dos dados e a curva de regressão
ggplot(dados_estudo, aes(x = horas_estudo, y = notas)) +
  geom_point() +
  geom_smooth(method = "lm", formula = y ~ poly(x, degree = 2), se = FALSE) +
  labs(x = "Horas de Estudo", y = "Notas") +
  theme_minimal()

Vamos visualizar as estatísticas de texte:

# Imprimindo os coeficientes do modelo
print(summary(modelo))
## 
## Call:
## lm(formula = notas ~ poly(horas_estudo, degree = 2), data = dados_estudo)
## 
## Residuals:
##       1       2       3       4       5 
##  0.1429 -0.5714  0.8571 -0.5714  0.1429 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      77.0000     0.3780 203.723 2.41e-05 ***
## poly(horas_estudo, degree = 2)1  23.7171     0.8452  28.062  0.00127 ** 
## poly(horas_estudo, degree = 2)2  -4.0089     0.8452  -4.743  0.04169 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8452 on 2 degrees of freedom
## Multiple R-squared:  0.9975, Adjusted R-squared:  0.9951 
## F-statistic:   405 on 2 and 2 DF,  p-value: 0.002463

Neste exemplo, utilizamos a função lm do R para realizar a regressão polinomial de grau 2, utilizando a função poly para criar as variáveis polinomiais. Em seguida, plotamos o gráfico de dispersão dos dados e a curva de regressão utilizando a função ggplot2. Por fim, imprimimos os coeficientes do modelo, que representam os termos do polinômio de ajuste.

4.10 Regressão Logistica

A regressão logística é um método estatístico utilizado para modelar e analisar a relação entre uma variável dependente categórica binária (por exemplo, sim/não, sucesso/fracasso) e uma ou mais variáveis independentes. É uma técnica amplamente aplicada em problemas de classificação, onde o objetivo é prever a probabilidade de um evento ocorrer com base em variáveis explanatórias.

Diferentemente da regressão linear, que é usada para variáveis dependentes contínuas, a regressão logística é adequada para lidar com variáveis dependentes binárias. Ela utiliza a função logística, também conhecida como função sigmoide, para modelar a relação entre as variáveis independentes e a probabilidade de ocorrência do evento de interesse.

Um exemplo prático de aplicação da regressão logística é a previsão de churn (taxa de abandono) de clientes em uma empresa. Pode-se utilizar variáveis como tempo de uso do serviço, histórico de reclamações e idade do cliente para prever a probabilidade de um cliente cancelar seu contrato.

Agora, vamos exemplificar a aplicação da regressão logística utilizando a linguagem R. Suponha que tenhamos um dataframe fictício chamado “dados_clientes”, com as variáveis “tempo_uso”, “reclamacoes” e “idade”, representando as variáveis independentes, e a variável dependente binária “churn” (0 - não churn, 1 - churn). Faremos a regressão logística para analisar a relação entre essas variáveis e prever a probabilidade de churn:

# Exemplo de regressão logística em R

# Carregando a biblioteca necessária
library(ggplot2)

# Criando um dataframe fictício
dados_clientes <- data.frame(tempo_uso = c(12, 24, 36, 48, 60),
                             reclamacoes = c(0, 1, 3, 2, 4),
                             idade = c(30, 45, 50, 28, 35),
                             churn = c(0, 1, 1, 0, 1))

# Realizando a regressão logística
modelo <- glm(churn ~ tempo_uso + reclamacoes + idade, data = dados_clientes, family = binomial)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
# Imprimindo os coeficientes do modelo
print(summary(modelo))
## 
## Call:
## glm(formula = churn ~ tempo_uso + reclamacoes + idade, family = binomial, 
##     data = dados_clientes)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)
## (Intercept) -9.303e+01  5.383e+05       0        1
## tempo_uso   -9.036e-01  1.162e+04       0        1
## reclamacoes  1.958e+01  1.300e+05       0        1
## idade        2.637e+00  9.805e+03       0        1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 6.7301e+00  on 4  degrees of freedom
## Residual deviance: 4.3459e-10  on 1  degrees of freedom
## AIC: 8
## 
## Number of Fisher Scoring iterations: 23

Neste exemplo, utilizamos a função glm do R para realizar a regressão logística, especificando as variáveis independentes (tempo_uso, reclamacoes, idade) e a variável dependente binária (churn). Utilizamos o argumento family = binomial para indicar que estamos realizando uma regressão logística. Em seguida, imprimimos os coeficientes do modelo, que representam o efeito das variáveis independentes na probabilidade de churn.

A regressão logística é uma ferramenta poderosa na análise estatística, permitindo modelar e prever eventos binários com base em variáveis explicativas. É amplamente utilizada em diversas áreas, como marketing, medicina, ciências sociais e muitas outras, fornecendo insights valiosos para tomadas de decisão estratégicas.

REFERÊNCIAS

BENGFORT, B.; KIM, J. Análise de dados com Hadoop: Uma introdução para Cientista de Dados. 1ª Edição. São Paulo - SP: Novatec, 2016.

BRUCE, P.; BRUCE, A. Estatística para Cientista de Dados: 50 conceitos iniciais. 1ª Edição. Rio de Janeiro - RJ: Alta Books, 2019.

DIAS, Rodrigo fernando. Estaística com R. Alura. 2022. disponível em: https://cursos.alura.com.br/course/estatistica-r-frequencias-medidas

GOLDSCHMIDT, R.; PASSOS, E.; BEZERRA, E. Data Mining: Conceitos, técnicas, orientações e aplicações. 2ª Edição. Rio de Janeiro - RJ: ELSEVIER, 2015.

HADLEY, W.; GARRETT, G. R para Data Science: Importe, arrume, transforme, visualize e modele dados. 1ª Edição. Rio de Janeiro - RJ: Alta Books, 2019.

MUELLER, J. P.; MASSARON, L. Aprendizado de Máquina para leigos. 1ª Edição. Rio de Janeiro - RJ: Alta Books, 2019.

OLIVEIRA, Francisco Estevam Martins de. Estatistica e Probabilidade - Exercicios Resolvidos e Propostos, 3ª edição. [Digite o Local da Editora]: Grupo GEN, 2017. E-book. ISBN 9788521633846. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788521633846/. Acesso em: 06 abr. 2023.

ROSS, Sheldon. Probabilidade. [Digite o Local da Editora]: Grupo A, 2010. E-book. ISBN 9788577806881. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788577806881/. Acesso em: 06 abr. 2023.

UCS - Universidade Caxias do Sul. Big Data: o que é, para que serve, como aplicar e exemplos. Disponível em: https://ead.ucs.br/blog/big-data Acesso em: 12, setembro de 2022.

TAULLI, T. Introdução à Inteligência Artificial: Uma abordagem não técnica. 1ª Edição. São Paulo - SP: Novatec, 2020.