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.
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.
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.
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:
shapiro.test(df_normal$X)
##
## Shapiro-Wilk normality test
##
## data: df_normal$X
## W = 0.99388, p-value = 0.9349
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.
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:
shapiro.test(df_2$X)
##
## Shapiro-Wilk normality test
##
## data: df_2$X
## W = 0.93986, p-value = 0.01331
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.
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.
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.
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.
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.
Compare e contraste os conceitos de correlação de Pearson e correlação de Spearman. Em que situações cada uma é mais apropriada?
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.
Apresente a fórmula matemática do coeficiente de correlação de Pearson. Explique o significado de cada termo na fórmula.
Qual é o intervalo de valores que o coeficiente de correlação de Pearson pode assumir? Explique como interpretar valores dentro desse intervalo.
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?
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?
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?
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?
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?
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?
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.
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?
Explique o conceito de correlação parcial. Em que cenários a análise de correlação parcial é valiosa?
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.
Como a correlação parcial ajuda a controlar o efeito de variáveis de confusão em uma análise de correlação?
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?
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.
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:
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:
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
# 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?
# 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?
# 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?
# 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?
# 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?
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:
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.
# 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?
# 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?
# 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?
# 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?
# 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?
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:
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.
# 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?
# 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?
# 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?
# 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?
# 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?
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:
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:
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:
(Intercept)):
hp:
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.cyl:
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.
(Intercept):
hp:
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.cyl:
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:
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
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?
# 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?
# 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?
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?
# 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?