1 Apresentação do Capítulo

Este capítulo fornecerá uma base sólida para estudantes iniciantes em Matemática, Estatística e programação em R, preparando-os para uma compreensão abrangente de conceitos essenciais em Ciência de Dados.

Você começará sua jornada revisando conceitos fundamentais, como a definição de Estatística e sua relevância na Ciência de Dados, além de explorar aspectos cruciais da probabilidade e revisar noções básicas de álgebra linear. No âmbito da Estatística, aprofundaremos nosso conhecimento em Correlação, examinando tipos e aplicações, e detalharemos os coeficientes de Correlação de Pearson e Spearman, bem como a Correlação Parcial.

Ao avançar para a Regressão Linear, você explorará conceitos introdutórios, a diferença entre correlação e regressão, e a formulação matemática do modelo. O Método dos Mínimos Quadrados será discutido em detalhes, proporcionando uma compreensão abrangente dos resíduos e diagnósticos associados.

A Regressão Linear Múltipla expandirá seus horizontes para modelos com múltiplas variáveis, abordando formulação, coeficientes parciais e diagnósticos importantes, como colinearidade e testes de significância.

Você explorará a Regressão Polinomial, incluindo sua introdução, formulação, limitações e a implementação prática em R. A visualização de modelos polinomiais e a avaliação de desempenho também serão destacadas.

Na introdução à Regressão Logística, exploraremos fundamentos teóricos, aplicações em classificação e a interpretação dos coeficientes. A avaliação de modelos logísticos será abordada por meio de conceitos como matriz de confusão e curva ROC.

Concluiremos com a análise de resíduos em Regressão Polinomial e Logística, destacando a importância dessa análise na validação do modelo. Abordaremos também técnicas de validação não linear, como cross-validation e bootstrap.

2 Correlação

2.1 Introdução à Correlação

A correlação é uma medida estatística que descreve a relação linear entre duas variáveis. Essa medida quantifica a direção e a força dessa relação. O coeficiente de correlação varia de -1 a 1, onde -1 indica uma correlação negativa perfeita, 1 indica uma correlação positiva perfeita, e 0 indica ausência de correlação.

A fórmula para o coeficiente de correlação de Pearson (\(r\)) entre duas variáveis \(X\) e \(Y\) é dada por:

\[\begin{equation} r = \frac{\sum_{i=1}^{n}(X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum_{i=1}^{n}(X_i - \bar{X})^2 \sum_{i=1}^{n}(Y_i - \bar{Y})^2}} \end{equation}\]

  • Correlação Positiva: Quando o aumento em uma variável está associado ao aumento na outra variável. O coeficiente de correlação é próximo de 1.

  • Correlação Negativa: Quando o aumento em uma variável está associado à diminuição na outra variável. O coeficiente de correlação é próximo de -1.

  • Correlação Nula: Quando não há relação linear aparente entre as variáveis. O coeficiente de correlação é próximo de 0.

2.1.1 Coeficiente de Correlação de Pearson

O coeficiente de correlação de Pearson (\(r\)) mede a força e a direção de uma relação linear entre duas variáveis. A fórmula para calcular \(r\) entre duas variáveis \(X\) e \(Y\) é:

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

onde \(\bar{X}\) e \(\bar{Y}\) são as médias de \(X\) e \(Y\), respectivamente.

  • \(r = 1\): Correlação positiva perfeita.
  • \(r = -1\): Correlação negativa perfeita.
  • \(r = 0\): Ausência de correlação linear.

O valor absoluto de \(r\) indica a força da correlação, sendo 0 para nenhuma correlação e 1 para correlação perfeita.

Esta correlação deve ser utilizada para dados que apresentam uma distribuição que segue uma distribuição normal. Vamos considerar dois conjuntos de dados, X e Y, e calcular o coeficiente de correlação de Pearson entre eles.

set.seed(123)
# Criando o dataSet
X = rnorm(n=100, mean=2450, sd=13)
Y = 1.65*X^2 - X*round(runif(n=1, min=500, max=1500))

df_normal <- data.frame(X,Y)
head(df_normal)
##          X       Y
## 1 2442.714 8040138
## 2 2447.008 8071608
## 3 2470.263 8243106
## 4 2450.917 8100310
## 5 2451.681 8105926
## 6 2472.296 8258180

Verificando a normalidade dos dados:

  1. Para a variavel X temos:
shapiro.test(df_normal$X)
## 
##  Shapiro-Wilk normality test
## 
## data:  df_normal$X
## W = 0.99388, p-value = 0.9349
  1. Para a variavel y temos:
shapiro.test(df_normal$Y)
## 
##  Shapiro-Wilk normality test
## 
## data:  df_normal$Y
## W = 0.99374, p-value = 0.9283

Ambos passaram no teste de shapiro, sendo considerados assim uma distribuição que segue a tendência de normalidade. Logo podemos fazer o teste de Pearson.

# Cálculo do coeficiente de correlação
correlacao <- cor(df_normal$X, df_normal$Y, method = 'pearson')

# Exibição do resultado
print(correlacao)
## [1] 0.9999936

Veja que obtivemos uma correlação positiva muito boa de 99% entre as duas variáveis.

2.1.2 Coeficiente de Correlação de Spearman

O coeficiente de correlação de Spearman (\(\rho\)) é uma medida não paramétrica que avalia a relação monotônica entre duas variáveis. Ele é especialmente útil quando os dados não seguem uma distribuição normal ou quando a relação entre as variáveis não é linear. Aplicações comuns incluem classificações, ranqueamentos e dados ordinais.

Enquanto o coeficiente de correlação de Pearson avalia a correlação linear, o coeficiente de Spearman avalia a correlação monotônica. Correlação monotônica significa que, à medida que uma variável aumenta, a outra também aumenta (ou diminui). O coeficiente de Spearman é menos sensível a outliers do que o de Pearson, tornando-o mais robusto em algumas situações.

Vamos considerar o dataset abaixo:

# Criando o dataSet
df_2 <- 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(df)
##                                               
## 1 function (x, df1, df2, ncp, log = FALSE)    
## 2 {                                           
## 3     if (missing(ncp))                       
## 4         .Call(C_df, x, df1, df2, log)       
## 5     else .Call(C_dnf, x, df1, df2, ncp, log)
## 6 }

Verificando a normalidade dos dados:

  1. Para a variavel X temos:
shapiro.test(df_2$X)
## 
##  Shapiro-Wilk normality test
## 
## data:  df_2$X
## W = 0.93986, p-value = 0.01331
  1. Para a variavel y temos:
shapiro.test(df_2$Y)
## 
##  Shapiro-Wilk normality test
## 
## data:  df_2$Y
## W = 0.95319, p-value = 0.04619

Ambos não passaram no teste de shapiro, sendo considerados assim uma distribuição que não segue a tendência de normalidade. Logo podemos fazer o teste de Spearman

# Cálculo do coeficiente de correlação de Spearman
correlacao_spearman <- cor(df_2$X, df_2$Y, 
                           method = "spearman")

# Exibição do resultado
print(correlacao_spearman)
## [1] 0.9830012

Veja que obtivemos uma boa correlação positiva entre estes dois dados de 98% o que indicam que ambos possuem uma boa força relacional.

2.1.3 Correlação Parcial

A correlação parcial é uma medida estatística que avalia a relação entre duas variáveis, levando em consideração o efeito de uma ou mais variáveis de controle. Ela é particularmente útil quando queremos examinar a associação entre duas variáveis controlando o efeito de outras variáveis relevantes. A fórmula para calcular a correlação parcial entre duas variáveis \(X\) e \(Y\), controlando \(Z\), é dada por:

\[\begin{equation} r_{XY\cdot Z} = \frac{r_{XY} - r_{XZ} \cdot r_{YZ}}{\sqrt{(1 - r_{XZ}^2) \cdot (1 - r_{YZ}^2)}} \end{equation}\]

onde \(r_{XY}\) é a correlação entre \(X\) e \(Y\), \(r_{XZ}\) é a correlação entre \(X\) e \(Z\), e \(r_{YZ}\) é a correlação entre \(Y\) e \(Z\).

Suponha que estamos investigando a relação entre a quantidade de horas de estudo (X), o número de horas de sono (Y) e o desempenho acadêmico (Z). Queremos calcular a correlação parcial entre horas de estudo e desempenho acadêmico, controlando o efeito do número de horas de sono.

Exemplo em R:

# Dados de exemplo
horas_estudo <- c(5, 8, 6, 7, 9)
horas_sono <- c(7, 6, 8, 5, 7)
desempenho_academico <- c(80, 92, 75, 88, 95)

# Cálculo da correlação parcial
cor_parcial <- cor(horas_estudo, desempenho_academico,
                   method = "pearson") - 
  cor(horas_sono, desempenho_academico, method = "pearson") * 
  cor(horas_sono, horas_estudo, method = "pearson") / 
  sqrt((1 - cor(horas_sono, desempenho_academico, 
                method = "pearson")^2) * 
         (1 - cor(horas_sono, horas_estudo, method = "pearson")^2))

# Exibição do resultado
print(cor_parcial)
## [1] 0.7001423

Neste exemplo em R, calculamos a correlação parcial entre horas de estudo e desempenho acadêmico, controlando o efeito do número de horas de sono. Utilizamos a função cor() com o método de Pearson para calcular as correlações envolvidas e, em seguida, aplicamos a fórmula da correlação parcial. Este exemplo ilustra a aplicação prática da correlação parcial para entender a relação entre variáveis quando fatores adicionais precisam ser considerados.

2.2 Exercícios

  1. Defina o conceito de correlação e explique como ela quantifica a relação entre duas variáveis. Destaque a diferença entre correlação positiva, negativa e nula.

  2. Explique a diferença entre correlação e causalidade. Utilize exemplos para ilustrar por que uma correlação não implica necessariamente uma relação de causa e efeito.

  3. Suponha que você tenha um coeficiente de correlação de 0,75 entre duas variáveis. Interprete esse valor em termos de força e direção da relação.

  4. Compare e contraste os conceitos de correlação de Pearson e correlação de Spearman. Em que situações cada uma é mais apropriada?

  5. Descreva uma situação prática em que a análise de correlação pode auxiliar na tomada de decisões em um contexto de negócios ou pesquisa. Explique como a correlação é interpretada nesse cenário.

  6. Apresente a fórmula matemática do coeficiente de correlação de Pearson. Explique o significado de cada termo na fórmula.

  7. Qual é o intervalo de valores que o coeficiente de correlação de Pearson pode assumir? Explique como interpretar valores dentro desse intervalo.

  8. Se o coeficiente de correlação de Pearson entre duas variáveis for -0,6, como você interpretaria essa relação em termos de força e direção?

  9. Explique a condição de linearidade associada ao coeficiente de correlação de Pearson. Por que esse coeficiente pode não ser adequado para medir a correlação em relações não-lineares?

  10. Suponha que você está analisando dados financeiros e encontra um coeficiente de correlação de 0,85 entre duas variáveis. Como essa informação pode ser útil na análise financeira?

  11. Explique o conceito de correlação de Spearman e como ela difere do coeficiente de correlação de Pearson. Quando a correlação de Spearman é preferível?

  12. Se o coeficiente de correlação de Spearman entre duas variáveis for 0,75, como você interpretaria essa relação em termos de ordem e força?

  13. Discuta como a correlação de Spearman lida com outliers em comparação com o coeficiente de correlação de Pearson. Qual dos dois é mais robusto em presença de valores atípicos?

  14. Forneça um exemplo prático de situação em que a correlação de Spearman seria mais apropriada do que a correlação de Pearson.

  15. Compare e contrasta as situações em que o coeficiente de correlação de Pearson e o coeficiente de correlação de Spearman seriam mais adequados. Quando você escolheria usar um em vez do outro?

  16. Explique o conceito de correlação parcial. Em que cenários a análise de correlação parcial é valiosa?

  17. Apresente a fórmula matemática para o cálculo da correlação parcial entre duas variáveis, controlando o efeito de uma terceira variável.

  18. Como a correlação parcial ajuda a controlar o efeito de variáveis de confusão em uma análise de correlação?

  19. Suponha que você calculou a correlação parcial entre duas variáveis e obteve um valor de 0,60. Como interpretaria esse resultado em relação à relação entre essas variáveis?

  20. Forneça um exemplo prático de um cenário onde a análise de correlação parcial seria essencial na interpretação dos relacionamentos entre variáveis.

3 Regressão

3.1 Introdução à Regressão Linear

A regressão linear é uma técnica estatística que modela a relação linear entre uma variável dependente (\(Y\)) e uma variável independente (\(X\)). A forma geral de uma equação de regressão linear é dada por:

\[\begin{equation} Y = \beta_0 + \beta_1X + \epsilon \end{equation}\]

onde:

  • \(Y\) é a variável dependente,
  • \(X\) é a variável independente,
  • \(\beta_0\) é a interceptação (ponto onde a linha cruza o eixo \(Y\) quando \(X = 0\)),
  • \(\beta_1\) é a inclinação da linha de regressão,
  • \(\epsilon\) é o termo de erro, representando a variação não explicada.

Enquanto a correlação mede a força e direção da relação linear entre duas variáveis, a regressão linear vai além, tentando modelar e prever o valor de uma variável a partir de outra. A correlação não implica causalidade, mas a regressão linear pode ser interpretada causalmente quando apropriado.

Exemplo em R:

Considere um conjunto de dados representando o número de horas de estudo (\(X\)) e as notas obtidas (\(Y\)) por um grupo de alunos.

library(ggplot2)

# Dados de exemplo
horas_estudo <- c(3, 5, 7, 4, 6)
notas <- c(65, 75, 85, 70, 80)

# Ajuste do modelo de regressão linear
modelo <- lm(notas ~ horas_estudo)

# Criando um data frame para o gráfico
dados_grafico <- data.frame(horas_estudo, notas)

# Criando o gráfico de dispersão com a linha de regressão
ggplot(dados_grafico, aes(x = horas_estudo, y = notas)) +
  geom_point() +                    
  # Adiciona os pontos de dados
  geom_smooth(method = "lm", se = FALSE, color = "blue") + 
  # Adiciona a linha de regressão
  labs(title = "Regressão Linear Simples", 
       x = "Horas de Estudo", 
       y = "Notas Obtidas") +        
  # Adiciona rótulos aos eixos e título
  theme_minimal()                    
## `geom_smooth()` using formula = 'y ~ x'

# Define o tema do gráfico


# Exibição dos coeficientes do modelo
print(coef(modelo))
##  (Intercept) horas_estudo 
##           50            5

Explicação do Problema e Comandos Utilizados:

Neste exemplo em R, ajustamos um modelo de regressão linear simples para prever as notas dos alunos com base nas horas de estudo. Utilizamos a função lm() para realizar o ajuste do modelo e coef() para obter os coeficientes da interceptação (\(\beta_0\)) e inclinação (\(\beta_1\)). Este exemplo ilustra a aplicação prática da regressão linear simples para modelar a relação entre duas variáveis e obter insights preditivos.

Exemplo 2:

Vamos supor que você quer estudar se existe relação entre:

  • X = Horas de estudo por semana
  • Y = Nota na prova (0 a 100)

A expectativa intuitiva é que quanto mais o aluno estuda, maior tende a ser sua nota.

dados <- data.frame(
  x = c(2,3,4,5,6,7,8,9,10,11),
  y = c(55,58,63,65,70,72,78,82,85,88)
)

modelo <- lm(y ~ x, data = dados)
summary(modelo)
## 
## Call:
## lm(formula = y ~ x, data = dados)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.4849 -0.5242  0.2455  0.6500  0.9758 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 47.09697    0.67893   69.37 2.08e-12 ***
## x            3.76970    0.09554   39.46 1.87e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8678 on 8 degrees of freedom
## Multiple R-squared:  0.9949, Adjusted R-squared:  0.9942 
## F-statistic:  1557 on 1 and 8 DF,  p-value: 1.871e-10

3.1.2 Exercício

  1. Pesquisadores querem saber se existe relação entre temperatura ambiente (°C) e vendas de sorvete por dia. Espera-se uma relação forte e positiva: quanto maior a temperatura, maior a venda.
# Base de dados
set.seed(1)
temperatura <- seq(20, 34, by = 1)
vendas <- 3.5 * temperatura + 10 + rnorm(length(temperatura), 0, 3)

dados1 <- data.frame(temperatura, vendas)
dados1

O que pode concluir com sobre essa relação?

  1. Deseja-se analisar se existe relação entre horas de prática de violão por semana e nível de habilidade medido por um teste.
# Base de dados
set.seed(2)
horas <- seq(1, 15, by = 1)
habilidade <- 2.8 * horas + 20 + rnorm(length(horas), 0, 8)

dados2 <- data.frame(horas, habilidade)
dados2

O que pode concluir com sobre essa relação?

  1. Pesquisadores estudam se há relação entre tempo gasto em um aplicativo educativo por semana e nota final do aluno.
# Base de dados
set.seed(3)
tempo_app <- seq(0, 10, by = 1)
nota <- 1.2 * tempo_app + 60 + rnorm(length(tempo_app), 0, 12)

dados3 <- data.frame(tempo_app, nota)
dados3

O que pode concluir com sobre essa relação?

  1. Um pesquisador quer analisar se há relação entre idade de um equipamento industrial (anos) e sua eficiência (%).
# Base de dados
set.seed(4)
idade <- seq(1, 20, by = 1)
eficiencia <- 90 - 2.1 * idade + rnorm(length(idade), 0, 7)

dados4 <- data.frame(idade, eficiencia)
dados4

O que pode concluir com sobre essa relação?

  1. Pesquisadores analisam se existe relação entre quantidade de café consumido por dia e produtividade medida em tarefas concluídas.
# Base de dados
set.seed(5)
cafe <- seq(0, 10, by = 1)
produtividade <- 50 + rnorm(length(cafe), 0, 15)

dados5 <- data.frame(cafe, produtividade)
dados5

O que pode concluir com sobre essa relação?

3.2 Regressão Linear Múltipla

A regressão linear múltipla é uma extensão da regressão linear simples que permite a análise simultânea do efeito de duas ou mais variáveis independentes (\(X_1, X_2, ..., X_p\)) na variável dependente (\(Y\)). A formulação do modelo é dada por:

\[\begin{equation} Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + ... + \beta_pX_p + \epsilon \end{equation}\]

onde:

  • \(Y\) é a variável dependente,
  • \(X_1, X_2, ..., X_p\) são as variáveis independentes,
  • \(\beta_0\) é a interceptação,
  • \(\beta_1, \beta_2, ..., \beta_p\) são os coeficientes parciais associados a cada variável independente,
  • \(\epsilon\) é o termo de erro.

Os coeficientes parciais (\(\beta_1, \beta_2, ..., \beta_p\)) representam a mudança média esperada na variável dependente para uma unidade de mudança na variável correspondente, mantendo todas as outras variáveis constantes. Por exemplo, \(\beta_1\) indica a mudança média esperada em \(Y\) para uma unidade adicional em \(X_1\), mantendo \(X_2, X_3, ..., X_p\) constantes.

Exemplo Prático:

Suponha que queremos prever o rendimento acadêmico (\(Y\)) com base no número de horas de estudo semanal (\(X_1\)), o número de horas de sono por noite (\(X_2\)), e o consumo médio de café diário (\(X_3\)). A equação do modelo seria:

\[ Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + \beta_3X_3 + \epsilon \]

Neste contexto, \(\beta_1\) representa a mudança média esperada no rendimento acadêmico para uma hora adicional de estudo, mantendo o sono e o consumo de café constantes. Similarmente, \(\beta_2\) e \(\beta_3\) representam as mudanças médias esperadas mantendo as outras variáveis constantes.

Vamos criar um exemplo prático simples em R para ilustrar a regressão linear múltipla. Suponhamos que temos dados fictícios de rendimento acadêmico (\(Y\)), horas de estudo semanal (\(X_1\)), horas de sono por noite (\(X_2\)), e consumo médio de café diário (\(X_3\)).

library(ggplot2)

# Dados de exemplo
set.seed(123)  # Define uma semente para a reproducibilidade dos
#resultados
dados <- data.frame(
  Y = rnorm(100, mean = 70, sd = 10),
  X1 = rnorm(100, mean = 5, sd = 2),
  X2 = rnorm(100, mean = 7, sd = 1),
  X3 = rnorm(100, mean = 3, sd = 1)
)

# Ajuste do modelo de regressão múltipla
modelo <- lm(Y ~ X1 + X2 + X3, data = dados)

# Sumário do modelo
summary(modelo)
## 
## Call:
## lm(formula = Y ~ X1 + X2 + X3, data = dados)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -23.5541  -5.8837  -0.8408   5.5592  23.1302 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  82.0312     7.8107  10.502   <2e-16 ***
## X1           -0.2051     0.4773  -0.430    0.668    
## X2           -1.2493     0.9719  -1.285    0.202    
## X3           -0.4219     0.8892  -0.474    0.636    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.172 on 96 degrees of freedom
## Multiple R-squared:  0.02106,    Adjusted R-squared:  -0.00953 
## F-statistic: 0.6885 on 3 and 96 DF,  p-value: 0.5613

Neste exemplo, estamos gerando dados fictícios usando a função rnorm para representar o rendimento acadêmico, horas de estudo, horas de sono, e consumo de café. Em seguida, ajustamos um modelo de regressão linear múltipla usando a função lm. O summary(modelo) fornece uma visão geral dos resultados.

3.2.1 Exercícios

  1. Pesquisadores querem prever o salário anual (Y) de profissionais da área de tecnologia com base em:
  • X1 = anos de experiência
  • X2 = número de cursos técnicos concluídos
# Base de dados
set.seed(10)
exp <- seq(1, 15, by = 1)
cursos <- sample(1:6, length(exp), replace = TRUE)
salario <- 2500 + 1500*exp + 1200*cursos + rnorm(length(exp), 0, 4000)
dados_mul1 <- data.frame(exp, cursos, salario)
dados_mul1

O que pode concluir com sobre essa relação?

  1. Um pesquisador quer explicar a nota final de alunos (Y) usando:
  • X1 = horas de estudo por semana
  • X2 = horas de sono por noite
  • X3 = frequência (%) nas aulas
# Base de dados
set.seed(11)
horas_estudo <- sample(1:15, 40, replace = TRUE)
sono <- rnorm(40, 7, 1)
frequencia <- runif(40, 60, 100)

nota_final <- 40 + 2.5*horas_estudo + 3*sono + 0.4*frequencia +
              rnorm(40, 0, 10)

dados_mul2 <- data.frame(horas_estudo, sono, frequencia, nota_final)
dados_mul2

O que pode concluir com sobre essa relação?

  1. Uma empresa deseja prever o tempo de entrega de encomendas (Y) usando:
  • X1 = distância (km)
  • X2 = número de paradas do motorista
  • X3 = idade do motorista (variável irrelevante)
# Base de dados
set.seed(12)
distancia <- runif(50, 1, 30)
paradas <- rpois(50, 3)
idade_motorista <- sample(20:60, 50, replace = TRUE)

tempo_entrega <- 10 + 1.2*distancia + 0.8*paradas +
                 rnorm(50, 0, 5) +
                 0.05 * idade_motorista # efeito muito pequeno

dados_mul3 <- data.frame(distancia, paradas, idade_motorista, tempo_entrega)
dados_mul3

O que pode concluir com sobre essa relação?

  1. Analise os fatores que influenciam a eficiência energética de uma casa (Y):
  • X1 = idade da casa (anos) -> relação negativa
  • X2 = número de janelas -> relação positiva
  • X3 = horas de sol recebidas por dia -> relação positiva moderada
# Base de dados
set.seed(13)
idade_casa <- seq(1, 30, by = 1)
janelas <- sample(4:15, length(idade_casa), replace = TRUE)
sol <- rnorm(length(idade_casa), 6, 1.5)

eficiencia <- 80 - 1.3*idade_casa + 2.2*janelas + 1.5*sol +
              rnorm(length(idade_casa), 0, 8)

dados_mul4 <- data.frame(idade_casa, janelas, sol, eficiencia)
dados_mul4

O que pode concluir com sobre essa relação?

  1. A empresa quer prever o consumo mensal de energia (Y) usando:
  • X1 = temperatura média (°C)
  • X2 = número de dias de calor no mês
  • X3 = presença de ar-condicionado (0/1)
# Base de dados
set.seed(14)
temp <- rnorm(40, mean = 28, sd = 3)
dias_calor <- temp * 1.5 + rnorm(40, 0, 2)  # fortemente correlacionado
ar_cond <- sample(0:1, 40, replace = TRUE)

energia <- 200 + 5*temp + 3*dias_calor + 40*ar_cond +
           rnorm(40, 0, 20)

dados_mul5 <- data.frame(temp, dias_calor, ar_cond, energia)
dados_mul5

O que pode concluir com sobre essa relação?

3.3 Regressão Polinomial

A regressão polinomial é uma extensão da regressão linear que permite modelar relações não lineares entre variáveis. Em vez de ajustar uma linha reta, a regressão polinomial ajusta um polinômio de grau \(n\), onde \(n\) é um número inteiro positivo.

A formulação geral da regressão polinomial de grau \(n\) é dada por:

\[\begin{equation} Y = \beta_0 + \beta_1X + \beta_2X^2 + ... + \beta_nX^n + \epsilon \end{equation}\]

onde:

  • \(Y\) é a variável dependente,
  • \(X\) é a variável independente,
  • \(\beta_0, \beta_1, ..., \beta_n\) são os coeficientes do polinômio,
  • \(\epsilon\) é o termo de erro.

A escolha do grau do polinômio (\(n\)) é crucial. Graus baixos podem não capturar complexidades nos dados, enquanto graus altos podem levar a um ajuste excessivo (overfitting).

Embora a regressão polinomial seja flexível, é importante considerar algumas limitações. Graus muito altos podem levar a modelos que se ajustam demais aos dados de treinamento e não generalizam bem para novos dados. Além disso, a interpretação dos coeficientes em polinômios de grau elevado pode ser desafiadora.

Ao utilizar a regressão polinomial, é fundamental avaliar a complexidade do modelo e a capacidade de generalização para garantir que seja uma escolha adequada para o problema em questão.

Exemplo Prático:

Vamos criar um exemplo simples em R para ajustar um modelo de regressão polinomial de segundo grau:

# Dados de exemplo
set.seed(789)  
X = seq(1, 10, length.out = 100)
Y = 3*X^2 - 5*X + rnorm(100, mean = 0, sd = 5)
dados_polinomial <- data.frame(X,Y)

# Ajuste do modelo de regressão polinomial de segundo grau
modelo_polinomial <- lm(Y ~ poly(X, 2), data = dados_polinomial)

# Gráfico da curva de regressão polinomial
plot(dados_polinomial$X, dados_polinomial$Y, 
     main = "Regressão Polinomial de Segundo Grau", 
     xlab = "X", ylab = "Y", col = "blue")
lines(dados_polinomial$X, predict(modelo_polinomial), 
      col = "red", lwd = 2)

# Sumário do modelo
summary(modelo_polinomial)
## 
## Call:
## lm(formula = Y ~ poly(X, 2), data = dados_polinomial)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -16.0063  -2.7499   0.0967   3.2826  10.9870 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  83.7165     0.4833  173.20   <2e-16 ***
## poly(X, 2)1 740.8895     4.8334  153.28   <2e-16 ***
## poly(X, 2)2 177.1746     4.8334   36.66   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.833 on 97 degrees of freedom
## Multiple R-squared:  0.9961, Adjusted R-squared:  0.996 
## F-statistic: 1.242e+04 on 2 and 97 DF,  p-value: < 2.2e-16

Este exemplo gera dados quadráticos fictícios e ajusta um modelo de regressão polinomial de segundo grau usando a função poly(). O summary(modelo_polinomial) fornece informações detalhadas sobre os coeficientes e estatísticas do modelo.

A regressão polinomial é uma ferramenta útil para modelar padrões não lineares nos dados, mas sua aplicação requer cuidado na escolha do grau do polinômio.

Exemplo 2

Vamos realizar a implementação de um ajuste de modelo polinomial em R usando dados de exemplo e a biblioteca base do R.

# Dados de exemplo
set.seed(987)  
dados_polinomial <- data.frame(
  X = seq(1, 10, length.out = 100),
  Y = 2*X^2 - 3*X + rnorm(100, mean = 0, sd = 5)
)

# Ajuste do modelo polinomial de segundo grau
modelo_polinomial <- lm(Y ~ poly(X, 2), data = dados_polinomial)

# Sumário do modelo
summary(modelo_polinomial)
## 
## Call:
## lm(formula = Y ~ poly(X, 2), data = dados_polinomial)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9.5389 -3.5600  0.0924  3.0719 10.1323 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  57.8612     0.4832  119.75   <2e-16 ***
## poly(X, 2)1 495.9871     4.8319  102.65   <2e-16 ***
## poly(X, 2)2 113.9874     4.8319   23.59   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.832 on 97 degrees of freedom
## Multiple R-squared:  0.9913, Adjusted R-squared:  0.9912 
## F-statistic:  5547 on 2 and 97 DF,  p-value: < 2.2e-16

Neste exemplo, geramos dados fictícios com um padrão quadrático e ajustamos um modelo de regressão polinomial de segundo grau usando a função poly().

A avaliação de modelos polinomiais envolve a análise de métricas como o coeficiente de determinação (\(R^2\)), a análise de resíduos.

3.3.1 Exercicios

  1. Pesquisadores estudam a relação entre velocidade do vento (X) e o consumo de energia de um aerogerador (Y).
# Base de dados
set.seed(21)
vento <- seq(1, 20, by = 1)
energia <- 5*(vento - 10)^2 + rnorm(length(vento), 0, 10)

dados_poli1 <- data.frame(vento, energia)
dados_poli1

O que pode concluir com sobre essa relação?

  1. Deseja-se investigar se existe relação entre quantidade de fertilizante aplicado (X) e produção agrícola (Y).
# Base de dados
set.seed(22)
fertilizante <- seq(0, 40, by = 2)
producao <- -0.2*(fertilizante - 20)^2 + 150 + rnorm(length(fertilizante), 0, 8)

dados_poli2 <- data.frame(fertilizante, producao)
dados_poli2

O que pode concluir com sobre essa relação?

  1. Pesquisadores querem prever o nível de aprendizagem (Y) a partir do tempo de prática (X).
# Base de dados
set.seed(23)
tempo <- seq(1, 30, by = 1)
aprendizagem <- 0.05*(tempo - 15)^3 + 0.5*tempo + rnorm(length(tempo), 0, 15)

dados_poli3 <- data.frame(tempo, aprendizagem)
dados_poli3

O que pode concluir com sobre essa relação?

  1. Um pesquisador estuda a relação entre temperatura corporal (X) e resposta imunológica (Y) em um experimento.
# Base de dados
set.seed(24)
temp <- seq(35, 42, length.out = 40)
imunologia <- 2*(temp-38)^4 - 6*(temp-38)^2 + 50 +
              rnorm(length(temp), 0, 30)

dados_poli4 <- data.frame(temp, imunologia)
dados_poli4

O que pode concluir com sobre essa relação?

  1. Um engenheiro deseja modelar a vibração de uma máquina (Y) em função da rotação do motor (X).
# Base de dados
set.seed(25)
rotacao <- seq(500, 3000, length.out = 60)
vibracao <- 0.000000005*rotacao^3 - 0.00002*rotacao^2 +
            0.03*rotacao + rnorm(length(rotacao), 0, 5)

dados_poli5 <- data.frame(rotacao, vibracao)
dados_poli5

O que pode concluir com sobre essa relação?

3.4 Regressão Logística

A regressão logística é uma técnica estatística utilizada para modelar a probabilidade de um evento ocorrer, especialmente em problemas de classificação binária. Ao contrário da regressão linear, que é usada para prever valores contínuos, a regressão logística é aplicada quando a variável dependente é categórica e possui apenas dois resultados possíveis, geralmente codificados como 0 e 1.

A regressão logística utiliza a função logística para transformar uma combinação linear das variáveis independentes em um valor entre 0 e 1. A função logística é definida como:

\[\begin{equation} P(Y=1) = \frac{1}{1 + e^{-(\beta_0 + \beta_1X_1 + \beta_2X_2 + ... + \beta_pX_p)}} \end{equation}\]

onde:

  • \(P(Y=1)\) é a probabilidade de \(Y\) ser igual a 1,
  • \(e\) é a base do logaritmo natural,
  • \(\beta_0, \beta_1, ..., \beta_p\) são os coeficientes a serem estimados,
  • \(X_1, X_2, ..., X_p\) são as variáveis independentes.

Os coeficientes são estimados através de técnicas de otimização, como a máxima verossimilhança.

A regressão logística é amplamente utilizada em problemas de classificação binária, como prever se um e-mail é spam ou não, se um paciente possui uma doença ou não, entre outros. A saída da regressão logística é interpretada como a probabilidade de pertencer à classe positiva.

Ao trabalhar com a regressão logística em R, é comum utilizar a função glm() (Generalized Linear Model) com a família binomial. Esta família é apropriada para modelos de regressão logística.

Na regressão logística, a função logit é fundamental para transformar a combinação linear das variáveis independentes em uma probabilidade entre 0 e 1. A função logit é definida como:

\[\begin{equation} \text{logit}(p) = \log\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1X_1 + \beta_2X_2 + ... + \beta_pX_p \end{equation}\]

onde:

  • \(p\) é a probabilidade de \(Y\) ser igual a 1,
  • \(\beta_0, \beta_1, ..., \beta_p\) são os coeficientes a serem estimados,
  • \(X_1, X_2, ..., X_p\) são as variáveis independentes.

A função logit transforma a probabilidade linear em uma escala logarítmica, permitindo a modelagem de relações não lineares.

A interpretação dos coeficientes na regressão logística é um pouco diferente da regressão linear. Para entender a influência de uma variável independente na probabilidade de \(Y=1\), podemos examinar o aumento relativo na odds (chances).

O odds ratio (\(OR\)) para uma variável \(X_i\) é dado por \(e^{\beta_i}\). Um \(OR\) de 1 indica que a variável não tem efeito na chance, \(OR > 1\) indica aumento nas chances, e \(OR < 1\) indica redução nas chances.

Por exemplo, se o \(OR\) de \(X_1\) é 2, isso significa que, mantendo todas as outras variáveis constantes, o aumento de uma unidade em \(X_1\) está associado a um aumento de duas vezes nas chances de \(Y=1\).

Exemplo Prático:

Vamos criar um exemplo prático de regressão logística com interpretação dos coeficientes. Utilizaremos novamente o conjunto de dados mtcars para prever se um carro tem consumo acima da média com base na potência do motor (hp) e no número de cilindros (cyl).

# Carregando o conjunto de dados mtcars
data(mtcars)

# Criando uma variável binária indicando se o consumo é 
#acima da média (1) ou não (0)
mtcars$consumo_acima_media <- ifelse(mtcars$mpg > 
                                       mean(mtcars$mpg), 1, 0)

# Ajustando o modelo de regressão logística
modelo_logistico <- glm(consumo_acima_media ~ hp + cyl, 
                        data = mtcars, 
                        family = binomial)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
# Sumário do modelo
summary(modelo_logistico)
## 
## Call:
## glm(formula = consumo_acima_media ~ hp + cyl, family = binomial, 
##     data = mtcars)
## 
## Deviance Residuals: 
##      Min        1Q    Median        3Q       Max  
## -1.79740   0.00000   0.00000   0.00002   0.96086  
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)
## (Intercept)    76.8530 20252.2938   0.004    0.997
## hp             -0.1721     0.1541  -1.117    0.264
## cyl            -9.5655  3375.3813  -0.003    0.998
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 43.8601  on 31  degrees of freedom
## Residual deviance:  6.6694  on 29  degrees of freedom
## AIC: 12.669
## 
## Number of Fisher Scoring iterations: 21

Neste exemplo:

  1. Intercepto ((Intercept)):
    • Estimativa (Estimate): 76.8530
    • Interpretação: Isso representa o log-odds de sucesso (consumo acima da média) quando todas as variáveis independentes são zero. No entanto, no contexto deste exemplo, a interpretação pode não ser significativa devido ao tamanho do erro padrão.
  2. hp:
    • Estimativa (Estimate): -0.1721
    • Interpretação: Para a variável hp, a estimativa negativa indica que, mantendo o número de cilindros constante, um aumento de uma unidade em hp está associado a uma diminuição nos log-odds de sucesso (consumo acima da média). O p-valor (Pr(>|z|)) é 0.264, indicando que o coeficiente não é estatisticamente significativo a um nível de significância típico de 0.05.
  3. cyl:
    • Estimativa (Estimate): -9.5655
    • Interpretação: Para a variável cyl, a estimativa negativa indica que, mantendo a potência do motor constante, um aumento de uma unidade no número de cilindros está associado a uma diminuição nos log-odds de sucesso. O p-valor (Pr(>|z|)) é 0.998, indicando que o coeficiente não é estatisticamente significativo a um nível de significância típico de 0.05.

Para uma interpretação mais precisa, podemos calcular os odds ratios:

# Calculando os odds ratios
odds_ratios <- exp(coef(modelo_logistico))
print("Odds Ratios:")
## [1] "Odds Ratios:"
print(odds_ratios)
##  (Intercept)           hp          cyl 
## 2.381493e+33 8.419272e-01 7.010710e-05

Os odds ratios (razões de chances) são uma medida importante na regressão logística, pois ajudam a entender como as variáveis independentes influenciam as chances do evento de interesse ocorrer.

  1. Odds Ratio para (Intercept):
    • Valor: \(2.381493 \times 10^{33}\)
    • Interpretação: Este odds ratio está associado ao intercepto e representa as chances de sucesso (consumo acima da média) quando todas as variáveis independentes são zero. No entanto, o intercepto pode não ter uma interpretação significativa devido ao tamanho do erro padrão.
  2. Odds Ratio para hp:
    • Valor: \(0.8419272\)
    • Interpretação: Um aumento de uma unidade em hp está associado a uma redução de aproximadamente 15.8% nas chances de sucesso (consumo acima da média), mantendo todas as outras variáveis constantes.
  3. Odds Ratio para cyl:
    • Valor: \(7.01071 \times 10^{-5}\)
    • Interpretação: Um aumento de uma unidade em cyl está associado a uma redução substancial nas chances de sucesso (consumo acima da média), representando uma diminuição de mais de 99.99% nas chances, mantendo todas as outras variáveis constantes.

Os odds ratios para hp e cyl indicam como as chances de sucesso mudam para uma unidade de mudança em cada variável, mantendo as outras constantes. Se o odds ratio é próximo de 1, a variável tem um efeito mínimo nas chances. Se é menor que 1, a variável está associada a uma redução nas chances, e se é maior que 1, a variável está associada a um aumento nas chances.

No contexto deste exemplo, cyl tem um odds ratio muito baixo, indicando que um aumento no número de cilindros está fortemente associado a uma redução nas chances de consumo acima da média.

Exemplo 2

Pesquisadores desejam prever se um aluno passa (1) ou não passa (0) na prova final, com base em:

  • X = horas de estudo por semana
set.seed(100)

horas <- runif(100, 0, 20)
prob <- 1 / (1 + exp(-( -4 + 0.35*horas )))  # função logística
passou <- rbinom(100, 1, prob)

dados_log_exemplo <- data.frame(horas, passou)
head(dados_log_exemplo)
##       horas passou
## 1  6.155322      0
## 2  5.153450      0
## 3 11.046449      0
## 4  1.127663      0
## 5  9.370986      0
## 6  9.675415      1

Agora vamos ajustar o modelo logístico:

modelo <- glm(passou ~ horas, data = dados_log_exemplo, family = binomial)
summary(modelo)
## 
## Call:
## glm(formula = passou ~ horas, family = binomial, data = dados_log_exemplo)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.8108  -0.6384  -0.3359   0.7176   1.8703  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -4.3582     0.8482  -5.138 2.77e-07 ***
## horas         0.3143     0.0645   4.874 1.10e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 126.836  on 99  degrees of freedom
## Residual deviance:  89.429  on 98  degrees of freedom
## AIC: 93.429
## 
## Number of Fisher Scoring iterations: 5

3.4.1 Exercícios

  1. Estude se existe relação entre:
  • X1 = IMC
  • X2 = idade

e a probabilidade de ter diabetes (1) ou não ter (0).

# Base de dados
set.seed(101)

IMC <- rnorm(120, 27, 4)
idade <- rnorm(120, 45, 12)
eta <- -8 + 0.25*IMC + 0.04*idade
prob <- 1 / (1 + exp(-eta))
diabetes <- rbinom(120, 1, prob)

dados_log1 <- data.frame(IMC, idade, diabetes)
dados_log1

O que pode concluir com sobre essa relação?

  1. Analise se um cliente será aprovado (1) ou negado (0) em um pedido de crédito, usando:
  • X1 = renda mensal
  • X2 = histórico no banco (score 0–100)
  • X3 = número de filhos (variável irrelevante)
# Base de dados
set.seed(102)

renda <- rnorm(150, 3500, 900)
score <- runif(150, 40, 100)
filhos <- sample(0:4, 150, replace = TRUE)

eta <- -10 + 0.002*renda + 0.08*score + 0.02*filhos
prob <- 1 / (1 + exp(-eta))
aprovado <- rbinom(150, 1, prob)

dados_log2 <- data.frame(renda, score, filhos, aprovado)
dados_log2

O que pode concluir com sobre essa relação?

  1. Investigue a probabilidade de um cliente cancelar a assinatura de um serviço usando:
  • X1 = meses como cliente
  • X2 = número de reclamações
  • X3 = uso do serviço por dia (minutos)
# Base de dados
set.seed(103)

meses <- runif(200, 1, 36)
reclamacoes <- rpois(200, 1.2)
uso <- rnorm(200, 120, 40)

eta <- 2 - 0.09*meses + 0.8*reclamacoes - 0.004*uso
prob <- 1 / (1 + exp(-eta))
churn <- rbinom(200, 1, prob)

dados_log3 <- data.frame(meses, reclamacoes, uso, churn)
dados_log3

O que pode concluir com sobre essa relação?

  1. Determine se ocorreu acidente (1) ou não (0) com base em:
  • X1 = velocidade média
  • X2 = condições da pista (0=boa, 1=ruim)

A classe “1” é rara (~10%).

# Base de dados
set.seed(104)

vel <- rnorm(300, 80, 12)
pista_ruim <- rbinom(300, 1, 0.3)

eta <- -6 + 0.05*vel + 1.4*pista_ruim
prob <- 1 / (1 + exp(-eta))

acidente <- rbinom(300, 1, prob)
acidente[sample(1:300, 270)] <- 0  # força desbalanceamento (classe rara)

dados_log4 <- data.frame(vel, pista_ruim, acidente)
dados_log4

O que pode concluir com sobre essa relação?

  1. Investigue fatores que influenciam a probabilidade de um cliente comprar (1) ou não comprar (0) um produto após ver um anúncio:
  • X1 = tempo no site (min)
  • X2 = idade
  • X3 = número de visitas anteriores
# Base de dados
set.seed(105)

tempo <- runif(180, 1, 20)
idade <- rnorm(180, 35, 10)
visitas <- rpois(180, 2)

eta <- -5 + 0.25*tempo + 0.015*idade + 0.3*visitas
prob <- 1 / (1 + exp(-eta))
compra <- rbinom(180, 1, prob)

dados_log5 <- data.frame(tempo, idade, visitas, compra)
dados_log5

O que pode concluir com sobre essa relação?