Os modelos de regressão são uma das técnincas estatísticas mais populares usadas em modelagem preditiva e mineração de dados, contudo, em geral os profissionais que trabalham com análise de dados só conhecem cerca de 2 ou 3 tipos desse conjunto de técnicas, que são a regressão linear e a regressão logística. O fato é que existem várias técnicas de regressão, cada uma com suas peculiaridades e que deveriam ser mais utilizadas, pois o uso da técnica correta/mais apropriada melhora e muito nossas estimativas.

Oque é um modelo de regressão?

Suponha que seu gerente pediu para você prever as vendas anuais de determinado produto da empresa. Para isso ele lhe deu acesso ao banco de dados da empresa, que contém várias variáveis que podem explicar o desempenho da venda desse determinado produto. Neste caso a variável que você quer modelar é o nº de vendas desse produto, sendo assim, essa é sua variável dependente e as demais variáveis serão suas variáveis independentes ou explicativas. Resumindo, a análise de regressão é usada para modelar a relação entre uma variável dependente e uma/ou mais variáveis explicativas.

Isso nos ajuda é responder várias perguntas, tais como:

  1. Qual das variáveis tem um impacto significativo nas vendas?
  2. Qual a variável que tem o maior impacto nas vendas?
  3. Como as variáveis explicativas interagem umas com as outras?
  4. Quais seriam as vendas anuais no próximo ano?

Jargões relacionados à análise de regressão

Outliers(Pontos discrepantes)

Suponha que exista uma ou mais observações que fogem muito do padrão, ou seja, que possui valores muito altos ou muito baixos se comparados as demais observações. Quando estamos diante de um ponto desta forma o chamamos de outlier. Em análise de regressão muitas vezes esses pontos nos trazem certo incomodo, pois as vezes nos levam a estimativas erroneas ou quebra de suposições dos modelos.

Multicolinearidade

A teoria matemática dos modelos de regressão é feita à partir de álgebra linear, sendo assim, todos os algoritmos são feitos em linguagem matricial, oque nos obriga em geral a considerar algumas suposições. Por conta disto, quando variáveis independentes são bem correlacionadas umas com as outras, elas podem tornar a matriz X(matriz com os dados) em uma matriz que possui colunas linerarmente dependentes, daí o nome multicolinearidade. Já na parte prática, esse problema acarreta em dificuldades na escolha das variáveis explicativas, fazendo com que escolhamos a equação inadequada para nosso modelo.

When the independent variables are highly correlated to each other then the variables are said to be multicollinear. Many types of regression techniques assumes multicollinearity should not be present in the dataset.

Heterocedásticidade

Em modelos de regressão, existe muitas vezes a suposição de que a variabilidade dos erros deve ser constante. Contudo, os erros podem ser expressados como função de nossa variável dependente, ou seja, se nossa variável dependente não possuir variância constante, quer dizer que os erros também não irão possuir, quebrando então a suposição de homocedasticidade da variância, que por sua vez causa o problema de heterocedásticidade. Em termos práticos, um exemplo bastante trivial é dado quando estudamos o gasto com comida de determindada população. Nas parcela da população que é mais pobre, uma pessoa comsome sempre produtos mais baratos, já para as parcelas mais ricas, isso pode variar bastante pois ela pode facilmente alternar entre comer coisas mais baratas e mais caras, ou seja, quando a renda aumenta, a variabilidade com o gasto em comida aumenta.

Underfitting e Overfitting

Quando utilizamos preditores inadequados para nossa equação, podemos nos deparar com o problema de overfitting. Overfitting consiste em um modelo que para uma amostra especifica da população funciona muito bem, contudo, para outras amostras ou sub-amostras da amostra utilizada, o modelo não funciona de forma adequada. Também é conhecido como problema de alta variância, ou seja, ele não se ajusta bem a novas amostras.

Já quando temos problemas de underfitting, também temos problemas quanto a utilização de preditores inadequados, porém, agora estamos diante de um problema de falta de ajuste, ou seja, o modelo não se “encaixa” corretamente na nuvem de pontos.

No diagrama a seguir, podemos ver que ajustar uma reta(figura 1) nos levaria a grandes erros. Já usar um ajuste a partir de um polinômio(figura 2) parece não ser uma má ideia, ele se ajusta muito bem a nuvem de pontos e é quase certo que funcionará bem também para outras amostras. Na última figura, vemos que a curva se ajusta de forma muito especifica a nuvem de pontos, ou seja, os erros são muito baixos,porém, para outras amostras há grandes chances de ocorrer overfitting.

Exemplos de overfitting e underfitting

Exemplos de overfitting e underfitting

Cada modelo de regressão possui suposições a serem cumpridas. Tais técnicas diferem entre tipos de variáveis(independentes e dependentes), distribuição de probabilidade e etc. Ou seja, cada uma possui suas peculiaridades

Regressão linear

É a técnica mais conhecida e utilizada, nesta técnica a variável dependente é contínua e as variáveis independentes podem ser contínuas ou discretas. O nome linear vem da idéia de que a relação entre as variáveis é linear. Podemos notar que o gráfico a seguir mostra uma relação linear entre X e Y. Os pontos verdes são as observações e a reta preta é a reta de regressão.

Exemplo regressão linear

Exemplo regressão linear

Quando temos uma única variável explicativa, estamos diante de uma regressão linear simples. \[Y =\beta_0 +\beta_1X + \epsilon\]

Quando temnos p variáveis explicativas, temos uma regressão linear múltipla \[ Y = \beta_0 +\beta_1X_1 +\beta_2X_2 + ... +\beta_pX_p + \epsilon\]

  1. Y é a variável dependente ou resposta.

  2. X’s são as variáveis independentes ou explicativas.

3.\(\epsilon\) é o erro.

4.\(\beta_i\) são os parâmetros ou coeficientes de regressão.

Suposições do modelo de regressão linear

  1. A equação deve ser linear nos parâmatros, ou seja, não podemos ter \(Y = \beta_0 + \beta_1^{2}X + \epsilon\).

  2. \(\epsilon \sim N(0,\sigma^2)\)

2.1. \(\sigma^2\) deve ser constante (Variância constante). 2.2. \(Cov(\epsilon_i,\epsilon_j) = 0,\forall i\neq j\) (Erros não correlacionados).

  1. $Cov(X_p,X_k) = 0,pk $ (Variáveis explicativas independentes)

Estimando os parâmetros

Para obtermos as estimativas dos coeficientes de regressão utilizamos a técninca de mínimos quadrados ordinários, que consiste em minimizar a soma dos erros ao quadrado.

\[\min \sum{\epsilon^2} = \min \sum{(Y - \hat Y)^2} = \min \sum{(Y - (\beta_0 +\beta_1X_1 +\beta_2X_2 + ... +\beta_pX_p))^2}\]

Ao resolver o problema de otimização acima temos o seguinte estimador para os parâmetros: \[\hat \beta = (X'X)^{-1}X'y\]

Interpretando as estimativas dos parâmetros

Vamos considerar um exemplo em que a variável dependente são as notas obtidas por um estudante(Y) e as variáveis explicativas são o número de horas estudadas(\(X_1\)) e número de aulas frequentadas(\(X_2\)). Suponha que, ao ajustar a regressão linear, tenhamos a seguinte equação:

\[Y = 5 + 2X_1 + 0.5X_2\]

Através do cálculo podemos fazer \(\frac{\partial Y}{\partial X_k}\) para encontrar a influência individual de cada variável explicativa na variável resposta. Sendo assim, teremos:

\(\frac{\partial Y}{\partial X_1} = 2\), isto é, a cada hora estudada a nota do aluno terá um acréscimo de 2.

\(\frac{\partial Y}{\partial X_2} = 0.5\), isto é, a cada aula frequentada a nota do aluno terá um acréscimo de 0.5.

Caso \(X_1\) e \(X_2\) sejam zero a nota do aluno será 5.

Neste caso, se ele fosse escolher entre ir as aulas ou estudar sozinho, compensaria mais ele estudar sozinho.

Regressão linear no R

Considere o conjunto de dados swiss para este exemplo. Para estimar um modelo de regressão linear em R utilizamos a função lm()do pacote base do R. Vamos tentar estimar a taxa de fertilidade atraves de outras variáveis.

modelo <- lm(Fertility ~ .,data = datasets::swiss)
summary(modelo)
## 
## Call:
## lm(formula = Fertility ~ ., data = datasets::swiss)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -15.2743  -5.2617   0.5032   4.1198  15.3213 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      66.91518   10.70604   6.250 1.91e-07 ***
## Agriculture      -0.17211    0.07030  -2.448  0.01873 *  
## Examination      -0.25801    0.25388  -1.016  0.31546    
## Education        -0.87094    0.18303  -4.758 2.43e-05 ***
## Catholic          0.10412    0.03526   2.953  0.00519 ** 
## Infant.Mortality  1.07705    0.38172   2.822  0.00734 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.165 on 41 degrees of freedom
## Multiple R-squared:  0.7067, Adjusted R-squared:  0.671 
## F-statistic: 19.76 on 5 and 41 DF,  p-value: 5.594e-10

Podemos constatar que 70% da variabilidade da taxa de fertilidade pode ser explicada por esse modelo.

Regressão polinômial

É uma técnica para ajustar uma equação onde as variáveis independentes assumem uma relação polinômial com a variável resposta. A regressão polinomial é nada mais do que uma extensão da regressão linear onde a curva estimada agora não será mais uma reta, e sim um polinômio.

No gráfico abaixo podemos ver que a curva vermelha se ajusta melhor aos dados do que a curva verde. Sendo assim, nas situações que a relação entre a variável dependente e independente possuir uma forma não-linear, podemos utilizar modelos de regressão polinômial.

Assim, um polinômio de grau k pode ser escrito como: \[ Y = \beta_0 +\beta_1X_1 +\beta_2X_2^2 + ... +\beta_kX_p^k + \epsilon\]

E criando novas variáveis podemos utilizar regressão linear como antes. \[ X = X_1, X^2 = X_2, ... ,X^k = X_k\]

No caso de múltiplas variáveis explicativas podemos criar outras variáveis fazendo \(Z = X_1X_2\) por exemplo.

Nota: Ao fazer isso tenha bastante cuidado pois o acréscimo de variáveis extras desnecessárias pode levar ao problema de overfitting.

Regressão polinômial em R

Vamos utilizar o dataset poly.csv.

poly <- read.csv("poly.csv")
# Modelo sem termos polinomiais
mod1 <- lm(Price~Area, data = poly)

# Modelo polinomial de grau 2
mod2 <- lm(Price~Area+I(Area^2), data = poly)

poly %>% ggplot(aes(Area,Price)) +
  geom_point() + 
  geom_line(aes(Area, mod1$fitted.values), col = "#de2d26") +
  geom_line(aes(Area, mod2$fitted.values), col = "#9ecae1")

Regressão Logística

Na regressão logística a variável dependente é binária(1 ou 0) e as variáveis independentes podem ser contínuas ou categoricas. na regressão logística multinomial podemos ter mais de duas categorias em nossa variável resposta. Nosso modelo tem a seguinte forma:

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

Mas e porque não usar a regressão linear? 1. A suposição de homocedásticidade é violada. 2. Y não é mais normal. \(Y \sim Binomial\). 3. Os erros não são normais.

Exemplos

Análise de RH: As empresas de T.I. abrem seleção para um grande número de pessoas, mas um dos problemas que encontram é que muitos candidatos que se pronunciaram não participam da selação. Isso resulta em excesso de custos porque eles precisam repetir todo o processo novamente. Agora, se a empresa utilizar um software para captar os dados do candidato, ela poderá estimar se o candidato provavelmente participará da selação.(Resultado Binário - Participar/ Não Participar).

Eleições: Suponha que estamos interessados em encontrar os fatores que influenciam na vitória de um candidato a eleição. A variável resposta é binária(ganhar ou perder) e os preditores são a quantidade de dinheiro gasto na campanha e o tempo gasto fazendo campanha negativa contra o adversário.

Prevendo a categoria da variável dependente para um determinado vetor X de variáveis independentes

Da equação da regressão logística temos: \[P(Y = 1) = \frac{e^{\beta_0 +\beta_1X_1 +\beta_2X_2 + ... +\beta_pX_p}}{1 + e^{\beta_0 +\beta_1X_1 +\beta_2X_2 + ... +\beta_pX_p}}\]

Dessa forma podemos criar uma classificação para a variável resposta dado um ponto de corte, digamos p. Se P(Y=1)>p, Y pertence a categoria 1, caso contrário, 0.

Interpretando os coeficientes da regressão logística(conceito de odds ratio)

Tomando \(e^{\beta_i}\) temos o odds ratio do sucesso em relação ao fracasso, isto é, o quanto a probabilidade de sucesso é maior/menor que a probabilidade do fracasso. Para entender melhor suponha que o odds ratio de um coeficiente foi igual a 2, então, a chance de sucesso é 2 vezes maior que a chance de obter fracasso.

Regressão logística em R

Para estimar um modelo logístico no R use:

modelo <- glm(Y~X, data = conjunto de dados, family = binomial(link = “logit”))

As probabilidade de sucesso são dadas por

fitted(modelo) ou modelo$fitted.values

Para tentar classificar as observações de acordo com um corte de 0.5 primeiro definimos a variável que vai receber a categorização

classificacao <- integer()

Depois de criada, podemos inserir valores de acordo com as probabilidades estimadas

classificacao[fitted(modelo)>0.5] <- 1

classificacao[fitted(modelo)<=0.5] <- 0

Regressão quantílica

A regressão quantílica é a extensão da regressão linear e geralmente a usamos quando outliers, alta assimétria e/ou heterocedásticidade estão presentes no modelo.

Na regressão linear, predizemos a média da variável dependente para determinadas variáveis independentes. Como a média não descreve toda a distribuição, a modelagem da média não é uma descrição completa de uma relação entre variáveis dependentes e independentes. Assim, podemos usar a regressão quantílica, que prevê um quantil (ou percentil) para determinadas variáveis independentes.

O termo quantil é o mesmo que percentil.

Idéia básica do modelo de regressão quantílica:

Na regressão quantílica, tentamos estimar o quantil da variável dependente dados os valores observados das variáveis independentes. Observe que a variável dependente deve ser contínua.

O modelo de regressão quantílica:

Para o quantil q, temos o seguinte modelo de regressão:

\[ Y_i = X_{p_i} '\beta_p + \epsilon_i\]

Esse modelo parece bastante com o modelo de regressão linear, mas aqui a função objetiva que consideramos minimizar é:

\[q\sum |\epsilon_i| + (1-q)\sum |\epsilon_i|\]

onde q é o q-ésimo quantil.

Se q = 0,5 ou seja, se estamos interessados na mediana, então, torna-se a regressão mediana (ou menor regressão desvio absoluto) e substituindo o valor de q = 0,5 na equação acima obtemos a função objetivo como:

\[ \sum |\epsilon_i|\]

Interpretando os coeficientes em regressão quantílica:

Suponha que a equação de regressão para o 25º quantil de regressão seja:

\[ \hat Y = 5.2333 + 700.823X\]

Isso significa que, para um aumento unitário em x, o aumento estimado no 25º quantil de \(\hat Y\) é de 700.823 unidades.

Vantagens do Quantile sobre Regressão Linear:

1.Bastante benéfico quando a heteroscedasticidade está presente nos dados.

2.Robusto para outliers

3.A distribuição da variável dependente pode ser descrita através de vários quantis.

4.É mais útil do que a regressão linear quando os dados são distorcidos.

Porquê de usar a regressão quantilica:

Deve-se ter em mente que os coeficientes que obtemos na regressão quantílica para um quantil particular devem diferir significativamente daqueles que obtemos da regressão linear. Se isso não ocorrer, então nosso uso da regressão quantílica não é justificável. Isso pode ser feito observando-se os intervalos de confiança dos coeficientes de regressão das estimativas obtidas a partir de ambas as regressões.

Regressão Quantílica em R

Precisamos instalar o pacote quantreg para realizar a regressão quantílica.

install.packages(“quantreg”)

library(quantreg)

Usando a função rq , tentamos prever a estimativa do 25º quantil da Taxa de Fertilidade em dados suíços. Para isso, definimos tau = 0,25.

## Loading required package: SparseM
## 
## Attaching package: 'SparseM'
## The following object is masked from 'package:base':
## 
##     backsolve

model1 <- rq(Fertility~., data = swiss, tau = .25) summary(model1)

## 
## Call: rq(formula = Fertility ~ ., tau = 0.25, data = swiss)
## 
## tau: [1] 0.25
## 
## Coefficients:
##                  coefficients lower bd upper bd
## (Intercept)      76.63132      2.12518 93.99111
## Agriculture      -0.18242     -0.44407  0.10603
## Examination      -0.53411     -0.91580  0.63449
## Education        -0.82689     -1.25865 -0.50734
## Catholic          0.06116      0.00420  0.22848
## Infant.Mortality  0.69341     -0.10562  2.36095

Definindo tau = 0.5, faremos a regressão mediana.

model2 <- rq(Fertility~., data = swiss, tau = .5) summary(model2)

## 
## Call: rq(formula = Fertility ~ ., tau = 0.5, data = swiss)
## 
## tau: [1] 0.5
## 
## Coefficients:
##                  coefficients lower bd upper bd
## (Intercept)      63.49087     38.04597 87.66320
## Agriculture      -0.20222     -0.32091 -0.05780
## Examination      -0.45678     -1.04305  0.34613
## Education        -0.79138     -1.25182 -0.06436
## Catholic          0.10385      0.01947  0.15534
## Infant.Mortality  1.45550      0.87146  2.21101

Podemos executar a regressão quantílica para vários quantis em um único gráfico.

model3 = rq (Fertility ~., data = swiss, tau = seq (0,05,0.95, by = 0,05)) quantplot = summary(model3) quantplot

Podemos verificar se nossos resultados de regressão quantílica diferem dos resultados do MQO usando gráficos.

plot(quantplot)

Daí teremos:

Vários quantis são representados pelo eixo X. A linha central vermelha indica as estimativas dos coeficientes de MQO e as linhas vermelhas pontilhadas são os intervalos de confiança em torno desses coeficientes de MQO para vários quantis. A linha pontilhada preta são as estimativas de regressão quantílica e a área cinza é o intervalo de confiança para elas para vários quantis. Podemos ver que, para todas as variáveis, a regressão estimada coincide para a maioria dos quantis. Portanto, nosso uso de regressão quantílica não é justificável para tais quantis. Em outras palavras, queremos que as linhas vermelhas e cinzas se sobreponham o menos possível para justificar nosso uso da regressão quantílica.

Regressão de Ridge

É importante entender o conceito de regularização antes de ir para a regressão de rebordo.

1.Regularização

A regularização ajuda a resolver problemas de ajuste excessivo, o que implica que o modelo tenha um bom desempenho nos dados de treinamento, mas tenha um desempenho ruim nos dados de validação (teste). A regularização resolve esse problema adicionando um termo de penalidade à função objetivo e controla a complexidade do modelo usando esse termo de penalidade.

A regularização geralmente é útil nas seguintes situações: 1.Grande número de variáveis 2.Relação baixa de observações numéricas para número de variáveis 3.Alta Multi-Colinearidade

  1. Função L1 Loss ou Regularização L1

Na regularização de L1, tentamos minimizar a função objetivo adicionando um termo de penalidade à soma dos valores absolutos dos coeficientes. Isso também é conhecido como o método de menor desvio absoluto. Lasso Regression faz uso da regularização L1.

  1. L2 Loss function ou L2 Regularization

Na regularização de L2, tentamos minimizar a função objetivo adicionando um termo de penalidade à soma dos quadrados dos coeficientes. Regressão de Ridge ou regressão de encolhimento faz uso da regularização de L2.

Em geral, L2 tem melhor desempenho que a regularização L1. L2 é eficiente em termos de computação. Existe uma área onde L1 é considerada como uma opção preferida sobre L2. L1 possui seleção de recursos incorporados para espaços de recursos esparsos. Por exemplo, você está prevendo se uma pessoa está tendo um tumor cerebral usando mais de 20.000 marcadores genéticos (características). Sabe-se que a grande maioria dos genes tem pouco ou nenhum efeito sobre a presença ou gravidade da maioria das doenças.

Na função objetivo de regressão linear, tentamos minimizar a soma dos quadrados dos erros. Na regressão de rebordo (também conhecida como regressão de contração) adicionamos uma restrição na soma dos quadrados dos coeficientes de regressão. Assim, na regressão das cristas, nossa função objetiva é:

\[ min \sum \epsilon^2 + \lambda \sum \beta^2 = min \sum (y - (\beta_0 + \beta_1X_1 + \beta_2X_2 + ... + \beta_pX_p ))^2 + \lambda \sum \beta^2\]

\(\lambda\) é o parâmetro de regularização que é um número não negativo. Aqui não assumimos normalidade dos termos de erro.

Nota muito importante

Nós não regularizamos o termo de interceptação. A restrição é apenas a soma dos quadrados dos coeficientes de regressão dos X’s.

Podemos ver que a regressão de cumeeira faz uso da regularização de L2.

Ao resolver a função objetivo acima, podemos obter as estimativas de β como:

\[ \hat \beta = (X'X + \lambda I)^{-1}X'y \space \textrm{, em que I é a matriz identidade}\]

Como escolher o parâmetro de regularização \(\lambda\)?

Se escolhermos lambda = 0, retornamos às estimativas usuais de OLS. Se lambda é escolhido para ser muito grande, isso levará ao underfitting. Assim, é altamente importante determinar um valor desejável de lambda. Para resolver esse problema, plotamos as estimativas dos parâmetros em relação a diferentes valores de lambda e selecionamos o valor mínimo de λ após o qual os parâmetros tendem a se estabilizar.

Código R para regressão de Ridge

Considerando o conjunto de dados da Swiss, criamos dois conjuntos de dados diferentes, um contendo variável dependente e outro contendo variáveis independentes.

X = swiss[,-1]; Y = swiss[,1]

Precisamos carregar a biblioteca glmnet para realizar a regressão de Ridge.

library(glmnet)

Usando a função cv.glmnet () , podemos fazer validação cruzada. Por padrão alfa = 0, o que significa que estamos realizando regressão de MQO. lambda é uma sequência de vários valores de lambda que será usada para validação cruzada.

set.seed(123) model = cv.glmnet(as.matrix(X),y,alpha = 0,lambda = 10^seq(4,-1,-0.1))`

Usamos o melhor lambda usando lambda.min e, portanto, obtemos os coeficientes de regressão usando a função predict .

best_lambda = model$lambda.min

Os coeficientes obtidos utilizando a regressão de Ridge são:

## Loading required package: Matrix
## Loading required package: foreach
## Loaded glmnet 2.0-16
## 6 x 1 sparse Matrix of class "dgCMatrix"
##                            1
## (Intercept)      64.92994664
## Agriculture      -0.13619967
## Examination      -0.31024840
## Education        -0.75679979
## Catholic          0.08978917
## Infant.Mortality  1.09527837

Regressão Lasso

Lasso significa Least Absolute Shrinkage and Selection Operator (Mínimos absolutos reduzidos e operador de seleção). Faz uso da técnica de regularização L1 na função objetivo. Assim, a função objetivo na regressão LASSO torna-se:

\[ min \sum \epsilon^2 + \lambda \sum |\beta| = min \sum (y - (\beta_0 + \beta_1X_1 + \beta_2X_2 + ... + \beta_pX_p ))^2 + \lambda \sum |\beta| \]

\(\lambda\) é o parâmetro de regularização e o termo de interceptação não é regularizado. Não assumimos que os termos de erro sejam normalmente distribuídos. Para as estimativas, não temos nenhuma fórmula matemática específica, mas podemos obter as estimativas usando algum software estatístico.

Observe que a regressão lasso também precisa de padronização.

Vantagens da regressão Lasso em relação a regressão Ridge

A regressão de laço pode executar a seleção de variáveis incorporadas, bem como o encolhimento de parâmetros. Ao usar a regressão de Ridge, pode-se acabar obtendo todas as variáveis, mas com os Parâmetros encolhidos.

Código R para a regressão de Lasso

Considerando o conjunto de dados swiss, temos:

X = wiss[, - 1]
y = swiss[, 1]

Usando cv.glmnet no pacote glmnet nós fazemos validação cruzada. Para a regressão lasso, definimos alfa = 1. Por padrão, standardize = TRUE, portanto, não precisamos padronizar as variáveis separadamente.

set.seed(123)
model = cv.glmnet(as.matrix(X),y,alpha = 1,lambda = 10^seq(4,-1,-0.1))

Consideramos o melhor valor de lambda, filtrando lamba.min do modelo e, portanto, obtendo os coeficientes usando a função predict .

best_lambda = model$lambda.min
lasso_coeff = predict(model, s = best_lambda, type = “coefficients”)
lasso_coeff

Os coeficientes de laço que obtivemos são:

## 6 x 1 sparse Matrix of class "dgCMatrix"
##                            1
## (Intercept)      65.46374579
## Agriculture      -0.14994107
## Examination      -0.24310141
## Education        -0.83632674
## Catholic          0.09913931
## Infant.Mortality  1.07238898

Qual é melhor? Regressão Ridge ou Lasso?

Tanto a regressão da ridge como a regressão do lasso são utilizadas para lidar com a multicolinearidade. A regressão de Ridge é computacionalmente mais eficiente em relação à regressão de laço. Qualquer um deles pode ter um melhor desempenho. Portanto, a melhor abordagem é selecionar esse modelo de regressão que se ajusta bem aos dados do conjunto de testes.

Regressão Elastic Net (Rede elástica)

A regressão elastic net é utilizada como substituta tanto da regressão Ridge como a Lasso quando estamos lidando com variáveis explicativas altamente correlacionadas.

É uma combinação das regularizações L1 e L2 simultaneamente.

A função objetivo então será:

\[ min \sum \epsilon^2 + \lambda_1 \sum \beta^2 + \lambda_2 \sum |\beta| = min \sum (y - (\beta_0 + \beta_1X_1 + \beta_2X_2 + ... + \beta_pX_p ))^2 + \lambda_1 \sum \beta^2 + \lambda_2 \sum |\beta| \] Tal como a regressão Ridge e Lasso, Elastic Net não supõe normalidade.

Código R para regressão elastic net

Definindo algum valor diferente de alfa entre 0 e 1, podemos realizar uma regressão líquida elástica.

set.seed(123)
model = cv.glmnet(as.matrix(X),y,alpha = 0.5,lambda = 10^seq(4,-1,-0.1))
best_lambda = model$lambda.min
en_coeff = predict(model,s = best_lambda,type = “coefficients”)
en_coeff

## 6 x 1 sparse Matrix of class "dgCMatrix"
##                           1
## (Intercept)      65.9826227
## Agriculture      -0.1570948
## Examination      -0.2581747
## Education        -0.8400929
## Catholic          0.0998702
## Infant.Mortality  1.0775714

Regressão componentes principais (PCR - Principal Components Regression)

PCR é uma técnica de regressão que é amplamente utilizada quando você tem muitas variáveis independentes ou multicolinearidades. Está dividido em 2 etapas:

1.Obter os componentes principais.
2.Executar análise de regressão nos componentes principais.

As características mais comuns da PCR são:

(a).Redução de dimensionalidade
(b).Remoção de multicolinearidade

Obtendo os componentes principais:

A análise de componentes principais é um método estatístico para extrair novos recursos quando os recursos originais são altamente correlacionados. Criamos novos recursos com a ajuda de recursos originais, de modo que os novos recursos não sejam correlacionados.

Vamos considerar o primeiro componente principal:

\[ U_1 = \beta_1X_1 + \beta_2X_2 + ... + \beta_pX_p \] \[ \textrm{Tal que } \sum \beta^2 = 1\]

O primeiro PC (principal component - componente principal) está tendo a variação máxima.
Da mesma forma, podemos encontrar o segundo PC U2 de tal modo que ele não seja correlacionado com U1 e tenha a segunda maior variância. De maneira similar para recursos ‘p’, podemos ter um máximo de PCs ‘p’ de tal forma que todos os PCs não sejam correlacionados entre si e o primeiro PC tenha a variância máxima, então o segundo PC tem a variância máxima e assim por diante.

Desvantagens

Deve ser mencionado que o PCR não é uma técnica de seleção de recursos, mas sim uma técnica de extração de características. Cada componente principal que obtemos é uma função de todos os recursos. Portanto, ao se usar componentes principais, seria impossível explicar qual fator está afetando a variável dependente em qual extensão.

Código R para PCR

Usamos o conjunto de dados longley disponível em R, que é usado para alta multicolinearidade. Nós excpluimos a coluna Ano.

data1 = longley[,colnames(longley) != “Year”]

É assim que algumas das observações no nosso conjunto de dados serão semelhantes:

GNP.deflator GNP Unemployed Armed.Forces Population Year Employed
1947 83.0 234.289 235.6 159.0 107.608 1947 60.323
1948 88.5 259.426 232.5 145.6 108.632 1948 61.122
1949 88.2 258.054 368.2 161.6 109.773 1949 60.171
1950 89.5 284.599 335.1 165.0 110.929 1950 61.187
1951 96.2 328.975 209.9 309.9 112.075 1951 63.221
1952 98.1 346.999 193.2 359.4 113.270 1952 63.639
1953 99.0 365.385 187.0 354.7 115.094 1953 64.989
1954 100.0 363.112 357.8 335.0 116.219 1954 63.761
1955 101.2 397.469 290.4 304.8 117.388 1955 66.019
1956 104.6 419.180 282.2 285.7 118.734 1956 67.857
1957 108.4 442.769 293.6 279.8 120.445 1957 68.169
1958 110.8 444.546 468.1 263.7 121.950 1958 66.513
1959 112.6 482.704 381.3 255.2 123.366 1959 68.655
1960 114.2 502.601 393.1 251.4 125.368 1960 69.564
1961 115.7 518.173 480.6 257.2 127.852 1961 69.331
1962 116.9 554.894 400.7 282.7 130.081 1962 70.551

Para executar a PCR utilizaremos o pacote pls.

Na PCR estamos tentando estimar o número de pessoas empregadas; scale = T denota que estamos padronizando as variáveis; validação = “CV” denota a aplicabilidade da validação cruzada.

pcr_model <- pcr(Employed~., data = data1, scale = TRUE, validation = “CV”)
summary(pcr_model)

o summary do modelo é:

## 
## Attaching package: 'pls'
## The following object is masked from 'package:stats':
## 
##     loadings
## Data:    X dimension: 16 5 
##  Y dimension: 16 1
## Fit method: svdpc
## Number of components considered: 5
## 
## VALIDATION: RMSEP
## Cross-validated using 10 random segments.
##        (Intercept)  1 comps  2 comps  3 comps  4 comps  5 comps
## CV           3.627    1.200    1.213   0.6029   0.6941   0.5975
## adjCV        3.627    1.191    1.195   0.5927   0.6777   0.5836
## 
## TRAINING: % variance explained
##           1 comps  2 comps  3 comps  4 comps  5 comps
## X           72.19    95.70    99.68    99.98   100.00
## Employed    90.42    91.89    98.32    98.33    98.74

Aqui no RMSEP, os erros de raiz quadrada média estão sendo denotados. Enquanto em ‘Treinamento:% de variância explicada’ o% cumulativo de variância explicado pelos componentes principais está sendo representado. Podemos ver que, com 3 PCs, mais de 99% da variação pode ser atribuída. Também podemos criar um gráfico representando o erro de quadrados médios para o número de vários PCs.

validationplot(pcr_model,val.type = “MSEP”)

Escrevendo val.type = “R2” podemos traçar o quadrado R para vários não. de PCs.

validationplot(pcr_model,val.type = “R2”)

Se quisermos ajustar o pcr para 3 componentes principais e, portanto, obter os valores previstos, podemos escrever:

pred = predict(pcr_model,data1,ncomp = 3)

Regressão de Mínimos Quadrados Parciais (Partial least square - PLS)

É uma técnica alternativa de regressão de componentes principais quando você tem variáveis independentes altamente correlacionadas. Também é útil quando há um grande número de variáveis independentes.

Diferença entre PLS e PCR:

Ambas as técnicas criam novas variáveis independentes chamadas componentes que são combinações lineares das variáveis preditoras originais, mas a PCR cria componentes para explicar a variabilidade observada nas variáveis preditoras, sem considerar a variável resposta. Enquanto o PLS considera a variável dependente e, portanto, muitas vezes leva a modelos que são capazes de ajustar a variável dependente com menos componentes.

Código R para regressão PLS

library(plsdepot)
data(vehicles)
pls.model = plsreg1(vehicles[, c(1:12,14:16)], vehicles[, 13], comps = 3)
# R-Square
pls.model$R2

Regressão de suporte vetorial (SVR - Support Vector Regression)

A regressão de suporte vetorial pode resolver modelos lineares e não lineares. O SVR usa funções de kernel não lineares (como polinômios) para encontrar a solução ideal para modelos não lineares.

A ideia principal do SVR é minimizar o erro, individualizando o hiperplano que maximiza a margem.

library(e1071)
svr.model <- svm(Y ~ X , data)
pred <- predict(svr.model, data)
points(data$X, pred, col = “red”, pch=4)

Regressão ordinal (OR - Ordinal regression)

Regressão Ordinal é usada para prever valores ordenados. Em palavras simples, esse tipo de regressão é adequado quando a variável dependente é ordinal por natureza. Exemplo de variáveis ordinais - Respostas da pesquisa (escala de 1 a 6), reação do paciente à dose da droga (nenhuma, leve, grave).

Por que não podemos usar a regressão linear ao lidar com a variável alvo ordinal?

Na regressão linear, a variável dependente assume que as mudanças no nível da variável dependente são equivalentes em todo o intervalo da variável. Por exemplo, a diferença de peso entre uma pessoa com 100 kg e uma pessoa com 120 kg é de 20 kg, o que tem o mesmo significado que a diferença de peso entre uma pessoa que tem 150 kg e uma pessoa com 170 kg. Essas relações não são necessariamente válidas para variáveis ordinais.

Código R para OR

library(ordinal)
o.model <- clm(rating ~ ., data = wine)
summary(o.model)

Regressão de Poisson

A regressão de Poisson é usada quando a variável dependente possui dados de contagem .

Aplicação da Regressão de Poisson:

1.Prever o número de chamadas no atendimento ao cliente relacionadas a um produto específico.

2.Estimando o número de chamadas de serviço de emergência durante um evento.

A variável dependente deve atender às seguintes condições

1.A variável dependente possui uma distribuição de Poisson.

2.Contagens não podem ser negativas.

3.Este método não é adequado em números não inteiros.

No código abaixo, estamos usando conjuntos de dados chamados warpbreaks, que mostram o número de quebras no Yarn durante a tecelagem. Neste caso, o modelo inclui termos para o tipo de lã, a tensão da lã e a interação entre os dois.

Código R para regressão Poisson

pos.model<-glm(breaks~wool*tension, data = warpbreaks, family=poisson)
summary(pos.model)

Regressão Binômial Negativa

Como a Regressão de Poisson, também lida com dados de contagem. A questão surge “como é diferente da regressão de poisson”. A resposta é negativa. Regressão binomial não assume distribuição de contagem tendo variância igual à sua média. Enquanto a regressão de poisson assume a variância igual à sua média.

Quando a variância dos dados de contagem é maior que a contagem média, é um caso de superdispersão . O oposto da afirmação anterior é um caso de sub-dispersão.

Código R para regressão Binomial negativa

library(MASS)
nb.model <- glm.nb(Days ~ Sex/(Age + Eth*Lrn), data = quine)
summary(nb.model)

Regressão quasipoisson

É uma alternativa à regressão binomial negativa. Também pode ser usado para dados de contagem superdispersos. Ambos os algoritmos dão resultados semelhantes, existem diferenças na estimativa dos efeitos das covariáveis. A variância de um modelo quase-Poisson é uma função linear da média, enquanto a variância de um modelo binomial negativo é uma função quadrática da média.

Código R para regressão quasipoisson

qs.pos.model <- glm(Days ~ Sex/(Age + Eth*Lrn), data = quine, family = “quasipoisson”)

A regressão quasi-Poisson pode lidar com superdispersão e sub-dispersão.

Regressão de Cox (Distribuição Geométrica)

A regressão Cox é adequada para dados de tempo até o evento. Veja os exemplos abaixo:

1.O tempo do cliente abriu a conta até o atrito.

2.Tempo após o tratamento do câncer até a morte.

3.Tempo do primeiro ataque cardíaco ao segundo.

A regressão logística usa uma variável dependente binária, mas ignora o tempo dos eventos.

Além de estimar o tempo necessário para alcançar um determinado evento, a análise de sobrevivência também pode ser usada para comparar o tempo até o evento para vários grupos.

Alvos duplos são definidos para o modelo de sobrevivência 1. Uma variável contínua representando o tempo para o evento.

  1. Uma variável binária que representa o status se um evento ocorreu ou não.

Código R para regressão de Cox

library(survival)
lung$SurvObj <- with(lung, Surv(time, status == 2))
cox.reg <- coxph(SurvObj ~ age + sex + ph.karno + wt.loss, data = lung)
cox.reg

Como escolher o modelo de regressão correto?

1.Se a variável dependente é contínua e o modelo sofre de colinearidade ou existem muitas variáveis independentes, você pode tentar regressões de PCR, PLS, cume, laço e rede elástica. Você pode selecionar o modelo final com base em R-quadrado ajustado, RMSE, AIC e BIC.

2.Se você está trabalhando em dados de contagem, você deve tentar poisson, quase-poisson e regressão binomial negativa.

3.Para evitar overfitting, podemos usar o método de validação cruzada para avaliar os modelos usados para previsão. Também podemos usar técnicas de regressão de rede elástica, laço e elástico para corrigir o problema de ajuste excessivo.

4.Tente a regressão vetorial de suporte quando você tiver um modelo não linear.