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.
Rendimento mensal do trabalho principal para pessoas de 10 anos ou mais de idade.
Idade do morador na data de referência em anos.
Altura do morador em metros.
| 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 |
| Código | Descrição |
|---|---|
| 0 | Masculino |
| 1 | Feminino |
| 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 |
| Código | Descrição |
|---|---|
| 0 | Indígena |
| 2 | Branca |
| 4 | Preta |
| 6 | Amarela |
| 8 | Parda |
| 9 | Sem declaração |
Os seguintes tratamentos foram realizados nos dados originais:
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)
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
\(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
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
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'
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.
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.
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.
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:
\[\sigma_{xy} = \frac 1n\sum_{i=1}^{n}(X_i-\mu_x)(Y_i-\mu_y)\]
\[S_{xy} = \frac 1{n-1}\sum_{i=1}^{n}(X_i-\bar{X})(Y_i-\bar{Y})\]
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)
)
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
var(amostra$Idade)
## [1] 134.4105
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.
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')
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')
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')
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.
É 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.
\[\rho_{xy} = \frac{\sigma_{xy}}{\sigma_{x}\sigma_{y}}\]
\[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
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
s_x <- sd(amostra$Altura)
s_y <- sd(amostra$Renda)
r_xy <- s_xy / (s_x * s_y)
r_xy
## [1] -0.140982
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')
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.
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.
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\).
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
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'
corrplot(cor(dataset), method="number")
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\]
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} \]
n <- nrow(dataset)
n
## [1] 50
SOMA_Y <- sum(dataset$Y)
SOMA_Y
## [1] 100556
SOMA_X <- sum(dataset$X)
SOMA_X
## [1] 303275
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
SOMA_Y2 <- sum(apply(dataset, 1, function(x) x['Y'] ** 2))
SOMA_Y2
## [1] 234954332
SOMA_XY <- sum(apply(dataset, 1, function(x) x['Y'] * x['X']))
SOMA_XY
## [1] 716683794
\[\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
\[ \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
resultado_regressao <- lm(formula = Y ~ X, data = dataset)
resultado_regressao
##
## Call:
## lm(formula = Y ~ X, data = dataset)
##
## Coefficients:
## (Intercept) X
## 207.9033 0.2973
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
\[\hat{Y}_i = 207,9033 + 0,2973X_i\]
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
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
prever <- function(x){
return(beta_1 + beta_2 * x)
}
prever(7510)
## [1] 2440.556
predict(resultado_regressao, data.frame(X = c(7510, 7550)))
## 1 2
## 2440.556 2452.448
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
O termo de erro \(u\) é uma variável aleatória com média igual a zero: \(E(u) = 0\)
A variância de \(u\) é a mesma para todos os valores de \(X\)
Os valores de \(u\) são independentes
O termo de erro \(u\) é uma variável aleatória normalmente distribuída.
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),
)
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),
)
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}\]
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
SQT <- sum(apply(dataset, 1, function(x) (x['Y'] - mean(dataset$Y)) ** 2))
SQT
## [1] 32724149
SQR <- sum(apply(dataset, 1, function(x) (x['Y_previsto'] - mean(dataset$Y)) ** 2))
SQR
## [1] 31739163
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
\[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}\)
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}\]
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
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.
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.
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:
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)
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)
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)
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.
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.
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.
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.