0% acharam este documento útil (0 voto)
9 visualizações236 páginas

Guia Prático de Regressão e Classificação em R

O documento é um guia prático sobre métodos de aprendizado de máquina, cobrindo análise de regressão, técnicas de classificação e métodos avançados de aprendizado. Ele inclui fundamentos da regressão linear e não linear, validação de modelos, seleção de variáveis e diagnósticos. O objetivo é fornecer uma compreensão sólida e exemplos práticos em R para estudantes e pesquisadores.

Traduzido por

ScribdTranslations
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
9 visualizações236 páginas

Guia Prático de Regressão e Classificação em R

O documento é um guia prático sobre métodos de aprendizado de máquina, cobrindo análise de regressão, técnicas de classificação e métodos avançados de aprendizado. Ele inclui fundamentos da regressão linear e não linear, validação de modelos, seleção de variáveis e diagnósticos. O objetivo é fornecer uma compreensão sólida e exemplos práticos em R para estudantes e pesquisadores.

Traduzido por

ScribdTranslations
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

1

PARTE I – REGRESIÓN LINEAL.............................................................................................................. 6


I.1._ Análise de Regressão.........................................................................................................................7
I.2. Fundamentos da Regressão Linear em R......................................................................................................11
I.3._ EmtEfeito de Eractontem Regressão Múltipla: Essenciais......................................................................21
I.4._Regressão with CatVariáveis Categóricas: Fundamentos da Codificação Dummy em R..........................................25
I.5._Essenciais de Regressão Não Linear em R: Modelos de Regressão Polinomial e Spline..........................30
I.6._ Regressão Linear Simples em R...............................................................................................37
I.7._ Regressão Linear Múltipla em R......................................................................................................46
I.8._Predictem R: Previsões de Modelo e Confiança emtervais...............................................................51
I.9._ Diagnósticos do Modelo de Regressão........................................................................................................54
I.10._ Linear Suposições e Diagnósticos de Regressão em R: Essenciais................................................55
I.11._ Multicolinearidadety Essentais e VIF em R.......................................................................................67

I.12._ Diagnósticos do Modelo de Regressão. Essenciais da Variável Confusora................................................70


I.13._ Validação do Modelo de Regressão........................................................................................................71
I.14._ Precisão do Modelo de Regressão Metrics: R-quadrado, AIC, BIC, Cp e mais.......................................72

I.15._ Essenciais de Validação Cruzada em R....................................................................................................76


I.16._ BootstEssenciais de Reamostragem em R...........................................................................................82
I.17._ Seleção de Modelo Essencial em R.....................................................................................................86
I.18._ BestSubsets Essenciais de Regressão em R........................................................................................87
I.19._ StEssenciais de Regressão Epwise em R..............................................................................................91
I.20._ Essenciais da Regressão Penalizada: Ridge, Lasso e Elastc Net........................................................96
I.21._Componente Principalte Partal LeastEssenciais da Regressão Quadrática......................................104

PARTE II – Classificaton Methods..................................................................................................... 109


II.1._ Classificaton MeutEssenciais do hods................................................................................................110
II.2._ Essenciais da Regressão Logística em R
II.3._ StEssenciais de Regressão Logística Epwise em R...............................................................................120
II.4._ Fundamentos da Regressão Logística Penalizada em R: Ridge, Lasso e Elastic Nett...............................123
II.5._ Assunções e Diagnósticos da Regressão Logística em R...............................................................128
II.6._ Essenciais da Regressão Logística Multinomial em R..........................................................................134
II.7._ DiscriminantAnálise Essencial em R...........................................................................................136
II.8._ Essenciais do Classificador Naive Bayes.................................................................................................143
II.19_Modelo SVM: SuportetVectou Essenciais de Máquina........................................................................145
II.10._ Evaluaton of Classificaton Model Accuracy: Essentals...........................................................149

PARTE III– Stmáquina atstcal APRENDIZAGEM.159

III.1._ StFundamentos de Machine Learning.160


III.2._ KNN: K-Vizinhos PróximostEssenciais dos Vizinhos.........................................................................................161
III.4._Modelo CART: Essenciais da Árvore de Decisão.........................................................................................165
III.5._Bagging e Florestas AleatóriastEssenciais......................................................................................176

2
III.6._ GradientetEssenciais de Boostng em R Usando XGBOOST....................................................................182

PARTE IV: Principal ComponentEuthods........................................................................................186


IV.1. PCA no R Usando Ade4: Scripts Rápidos.......................................................................................221

3
[Link]
Uma grande quantidade de dados é registrada todos os dias em diferentes áreas, incluindo marketing,
bio-médico e segurança. Para descobrir conhecimento a partir desses dados, você precisa de máquina
técnicas de aprendizagem, que são classificadas em duas categorias:

1.Métodos de aprendizado de máquina não supervisionados:

Isso inclui principalmente métodos de agrupamento e análise de componentes principais. O objetivo de


agrupamento é identificar padrões ou grupos de objetos semelhantes dentro de um conjunto de dados de interesse.
Os métodos de componentes principais consistem em resumir e visualizar o mais
informações importantes contidas em um conjunto de dados multivariados.

Esses métodos são "não supervisionados" porque não somos guiados por ideias a priori de quais
variáveis ou amostras pertencem a quais grupos ou clusters. O algoritmo de máquina
aprende

2.Métodos de aprendizado de máquina supervisionado:

O aprendizado supervisionado consiste em construir modelos matemáticos para prever o


resultado de futuras observações. Modelos preditivos podem ser classificados em duas principais
groups:

análise de regressão para prever uma variável contínua. Por exemplo, você poderia
quero prever a expectativa de vida com base em indicadores socioeconômicos.
Classificação para prever a classe (ou grupo) de indivíduos. Por exemplo,
você pode querer prever a probabilidade de ser positivo para diabetes com base no
concentração de glicose no plasma de pacientes.

Estes métodos são supervisionados porque construímos o modelo com base em resultados conhecidos
valores. Ou seja, a máquina aprende com os resultados de observação conhecidos para prever
o resultado de futuros casos.

Aqui, apresentamos um guia prático para métodos de aprendizado de máquina para explorar conjuntos de dados,
bem como, para construir modelos preditivos.

Você aprenderá as ideias básicas de cada método e códigos R reproduzíveis para fácil
computando uma grande quantidade de técnicas de aprendizado de máquina.

Nosso objetivo era escrever um guia prático de aprendizado de máquina para todos.

As principais partes do livro incluem:

Métodos de aprendizado não supervisionado, para explorar e descobrir conhecimento de um


grande conjunto de dados multivariados usando métodos de clustering e componentes principais.
Você aprenderá sobre agrupamento hierárquico, k-means, análise de componentes principais
e métodos de análise de correspondência.

4
Análise de regressão, para prever um valor de resultado quantitativo usando linear
estratégias de regressão e regressão não linear.

Técnicas de classificação, para prever um valor de resultado qualitativo usando logística


regressão, análise discriminante, classificador naïve bayes e vetor de suporte
máquinas.

Métodos avançados de aprendizado de máquina para construir regressão robusta e


modelos de classificação usando métodos de k-vizinhos mais próximos, modelos de árvore de decisão,
métodos de conjunto (bagging, floresta aleatória e boosting)

Métodos de seleção de modelos, para selecionar automaticamente a melhor combinação de


variáveis preditoras para construir um modelo preditivo ideal. Estes incluem, o melhor
métodos de seleção de subconjuntos, regressão passo a passo e regressão penalizada (ridge,
modelos de regressão lasso e elastic net). Também apresentamos a análise de componentes principais-
métodos de regressão baseados, que são úteis quando os dados contêm múltiplos
variáveis preditoras correlacionadas.

Técnicas de validação e avaliação de modelos para medir o desempenho de


um modelo preditivo.

Diagnósticos de modelo para detectar e corrigir problemas potenciais em uma predição


modelo.

O livro apresenta os princípios básicos dessas tarefas e fornece muitos exemplos em R.


Este livro oferece uma orientação sólida em mineração de dados para estudantes e pesquisadores.

Recursos principais:

Cobre algoritmo de aprendizado de máquina e implementação


Conceitos matemáticos chave são apresentados

Capítulos curtos e autossuficientes com exemplos práticos. Isso significa que você
não precisa ler os diferentes capítulos em sequência

5
PARTE I – REGRESIÓN LINEAL

6
I.1._ Análise de Regressão
A análise de regressão (ou modelo de regressão) consiste em um conjunto de aprendizado de máquina
métodos que nos permitem prever uma variável de resultado contínua (y) com base no valor
de uma ou múltiplas variáveis preditoras (x).
Em resumo, o objetivo do modelo de regressão é construir uma equação matemática que define y
como uma função das variáveis x. Em seguida, esta equação pode ser usada para prever o resultado
(y) com base em novos valores das variáveis preditoras (x).

A regressão linear é a técnica mais simples e popular para prever um contínuo


variável. Assume uma relação linear entre o resultado e o preditor
variáveis. Veja o Capítulo @ref(regressão-linear).

A equação da regressão linear pode ser escrita comoy = b0 + b*x, onde:

b0 é a interceptação,

b é o peso de regressão ou coeficiente associado à variável preditora x.


Tecnicanente, os coeficientes da regressão linear são determinados de forma que o erro em
prever o valor do resultado é minimizado. Este método de calcular o beta
os coeficientes são chamados de Método dos Mínimos Quadrados Ordinários.

Quando você tem várias variáveis preditoras, digamos x1 e x2, a equação de regressão pode
ser escrito comoy = b 0 + b 1 * x 1 + b 2 * x 2 Em algumas situações, pode haver um
efeito de interação entre alguns preditores, ou seja, por exemplo, aumentar o valor de
uma variável preditora x1 pode aumentar a eficácia do preditor x2 na explicação
a variação na variável de resultado. Veja o Capítulo @ref(efeitos-de-interação-em-múltiplos-
regressão).
Observe também que modelos de regressão linear podem incorporar tanto contínuos quanto
variáveis preditoras categóricas. Veja o Capítulo @ref(regressão-com-categórico-
variáveis).
Quando você constrói o modelo de regressão linear, precisa diagnosticar se é linear
model is suitable for your data. See Chapter @ref(regression-assumptions-and-
diagnósticos).

Em alguns casos, a relação entre o resultado e as variáveis preditoras não é


linear. Nesses casos, você precisa construir uma regressão não linear, como
regressão polinomial e spline. Veja o Capítulo @ref(regressão-polinomial-e-spline).

Quando você tem múltiplos preditores no modelo de regressão, pode querer selecionar
a melhor combinação de variáveis preditoras para construir um modelo preditivo otimizado. Isso
o processo chamado seleção de modelo, consiste em comparar vários modelos contendo
diferentes conjuntos de preditores a fim de selecionar o modelo de melhor desempenho que minimize
o erro de previsão. Abordagens de seleção de modelos lineares incluem a regressão dos melhores subconjuntos
(Capítulo @ref(best-subsets-regression)) e regressão passo a passo (Capítulo
@ref(regressão passo a passo))
Em algumas situações, como em campos genômicos, você pode ter um grande conjunto de dados multivariados.
conjunto contendo alguns preditores correlacionados. Neste caso, a informação, na original
o conjunto de dados pode ser resumido em algumas novas variáveis (chamadas de componentes principais) que
são uma combinação linear das variáveis originais. Esses poucos componentes principais podem ser
usado para construir um modelo linear, que pode ser mais performático para seus dados. Isso

7
a abordagem é conhecida como métodos baseados em componentes principais (Capítulo @ref(pcr-and-pls-
regressão)), que incluem: regressão por componentes principais e mínimos quadrados parciais
regressão de quadrados.

Um método alternativo para simplificar um grande modelo multivariado é usar penalizado


regressão (Capítulo @ref(regressão-penalizada)), que penaliza o modelo por ter
muitas variáveis. A regressão penalizada mais conhecida inclui a ridge
regressão e a regressão lasso.
Você pode aplicar todos esses diferentes modelos de regressão em seus dados, comparar os modelos.
e finalmente selecione a melhor abordagem que explique bem seus dados. Para fazer isso, você precisa
algumas métricas estatísticas para comparar o desempenho dos diferentes modelos em
explicando seus dados e na previsão do resultado de novos dados de teste.

O melhor modelo é definido como o modelo que possui o menor erro de predição. O mais
métricas populares para comparar modelos de regressão, incluem:

Erro Quadrático Médio, que mede o erro de previsão do modelo.


corresponde à diferença média entre os valores conhecidos observados de
resultado e o valor previsto pelo modelo. RMSE é calculado comoRMSE =
média((observados - previstos)^2) %>% raiz()Quanto menor o RMSE,
melhorar o modelo.
O R-quadrado ajustado, representando a proporção de variação (ou seja, informação),
em seus dados, explicado pelo modelo. Isso corresponde à qualidade geral de
o modelo. Quanto maior o R2 ajustado, melhor o modelo
Observe que as métricas mencionadas acima devem ser calculadas em um novo conjunto de dados de teste que possui
não foi usado para treinar (ou seja, construir) o modelo. Se você tiver um grande conjunto de dados, com muitos
registros, você pode dividir aleatoriamente os dados em um conjunto de treinamento (80% para construir o
modelo preditivo) e conjunto de teste ou conjunto de validação (20% para avaliar o modelo
desempenho).
Uma das abordagens mais robustas e populares para estimar o desempenho de um modelo é k-
validação cruzada em k-fold. Pode ser aplicada mesmo em um conjunto de dados pequeno. validação cruzada em k-fold
funciona da seguinte forma:

1. Divida aleatoriamente o conjunto de dados em k-subconjuntos (ou k-fold) (por exemplo, 5 subconjuntos)

2. Reserve one subset and train the model on all other subsets

3. Teste o modelo no subconjunto reservado e registre o erro de previsão


4. Repita este processo até que cada um dos k subconjuntos tenha servido como o conjunto de teste.

Calcule a média dos k erros registrados. Isso é chamado de erro de validação cruzada.
servindo como a métrica de desempenho para o modelo.

Juntas, o melhor modelo é o modelo que tem o menor erro de validação cruzada,
RMSE.

Nesta parte, você aprenderá diferentes métodos para análise de regressão e forneceremos
exemplo prático em R. As seguintes técnicas são descritas:

Mínimos quadrados ordinários (Capítulo @ref(regressão-linear))


oRegressão linear simples

8
oRegressão linear múltipla

Métodos de seleção de modelos:

oRegressão de melhores subconjuntos (Capítulo @ref(best-subsets-regression))

oRegressão passo a passo (Capítulo @ref(regressao-passo-a-passo))

Métodos baseados em componentes principais (Capítulo @ref(pcr-and-pls-regression)):

oRegressão de componentes principais (PCR)

oRegressão de mínimos quadrados parciais (PLS)

Regressão penalizada (Capítulo @ref(regressao-penalizada)):

oRegressão de Ridge

oRegressão Lasso

Contents:

conjunto
odados de marketing

odados suíços

oDados de Boston

Usaremos três conjuntos de dados diferentes:marketing[pacote datarium], o R incorporadosuiço


conjunto de dados, e oBostonconjunto de dados disponível noMASSAPacote R.

dados de marketing

Omarketingo conjunto de dados [pacote datarium] contém o impacto de três anúncios


mídias (youtube, facebook e jornal) sobre vendas. Isso será usado para prever vendas
unidades com base na quantidade de dinheiro gasto nas três mídias de publicidade.

Data are the advertising budget in thousands of dollars along with the sales. The
o experimento de publicidade foi repetido 200 vezes com orçamentos diferentes e o
as vendas observadas foram registradas.

Primeiro instale odatariumpackage:

if(!require(devtools)) [Link]("devtools")
devtools::install_github("kassambara/datarium")

Então, carreguemarketingdata set as follow:

dados("marketing", pacote = "datarium")


cabeça(marketing, 3)
vendas de youtube facebook jornal
## 1 276.1 45.4 83.0 26.5

9
## 2 53.4 47.2 54.1 12.5
## 3 20.6 55.1 83.2 11.2

swiss data

Osuiçodescreve 5 indicadores socioeconômicos observados em 1888 usados para prever


o índice de fertilidade de 47 províncias de língua francesa da Suíça.

Carregue e inspecione os dados:

data("suíço")
cabeça(suiça, 3)
Agricultura de Fertilidade Exame Educação Católica
## Courtelary 80.2 17.0 15 12 9.96
## Delemont 83.1 45.1 6 9 84.84
## Franches-Mnt 92.5 39.7 5 5 93.40
## [Link]
## Courtelary 22.2
## Delemont 22.2
## Franches-Mnt 20.2

Os dados contêm as seguintes variáveis:

Ig de Fertilidade: medida de fertilidade padronizada comum


Agriculture: % of males involved in agriculture as occupation

Exame: % de convocados recebendo a maior nota no exame do exército

Education: % education beyond primary school for draftees.

Católico: % ‘católico’ (em oposição a ‘protestante’).

[Link]: live births who live less than 1 year.

Dados de Boston

Boston[emMASSAo pacote] será usado para prever o valor mediano das casas (mdev), em
Subúrbios de Boston, usando diferentes variáveis preditoras:

crimetaxa de criminalidade per capita por cidade


zn, proporção de terreno residencial zoneado para lotes acima de 25.000 pés quadrados

indusproporção de acres de negócios não varejistas por cidade

chasvariável dummy do Charles River (= 1 se o setor faz limite com o rio; 0 caso contrário)

noxconcentração de óxidos nítricos (partes por 10 milhões)

rmnúmero médio de quartos por habitação

idadeproporção de unidades ocupadas por proprietários construídas antes de 1940

dis, distâncias ponderadas para cinco centros de emprego em Boston

radíndice de acessibilidade às rodovias radiais

10
imposto, taxa de imposto sobre propriedade a valor total por USD 10.000

ptratiorelação aluno-professor por cidade

preto, 1000(B - 0,63)^2 onde B é a proporção de negros por cidade

lstatpercentagem de status mais baixo da população

medvvalor mediano das casas ocupadas pelos proprietários em mil dólares

Carregue e inspecione os dados:

data("Boston", package = "MASS")


cabeça(Boston, 3)
## crim zn indus chas nox rm age dis rad tax ptratio black
lstat
## 1 0.00632 18 2.31 0 0.538 6.58 65.2 4.09 1 296 15.3 397
4.98
## 2 0.02731 0 7.07 0 0.469 6.42 78.9 4.97 2 242 17.8 397
9.14
## 3 0.02729 0 7.07 0 0.469 7.18 61.1 4.97 2 242 17.8 393
4.03
medv
## 1 24.0
## 2 21,6
## 3 34,7

11
I.2. Essenciais de Regressão Linear em R
A regressão linear (ou modelo linear) é usada para prever uma variável de resultado quantitativa.
(y) com base em uma ou múltiplas variáveis preditoras (x) (James et al. 2014, P. Bruce
e Bruce (2017)).

O objetivo é construir uma fórmula matemática que defina y como uma função de x
variável. Uma vez que construímos um modelo estatisticamente significante, é possível usá-lo para
prevendo resultados futuros com base em novos valores de x.

Quando você constrói um modelo de regressão, precisa avaliar o desempenho do


modelo preditivo. Em outras palavras, você precisa avaliar quão bem o modelo está em
prever o resultado de um novo conjunto de dados de teste que não foi utilizado para construir o modelo.

Duas métricas importantes são comumente usadas para avaliar o desempenho do preditivo
modelo de regressão

Erro Quadrático Médio, que mede o erro de previsão do modelo. Ele


corresponde à diferença média entre os valores conhecidos observados do
resultado e o valor previsto pelo modelo. RMSE é calculado comoRMSE =
média((observados - preditos)^2) %>% raiz()Quanto menor o RMSE, melhor.
melhorar o modelo.
R-quadrado, representando a correlação ao quadrado entre o conhecido observado
valores de resultado e os valores previstos pelo modelo. Quanto maior o R2, mais
melhorar o modelo.

Um fluxo de trabalho simples para construir um modelo de regressão preditiva é o seguinte:

1. Divida aleatoriamente seus dados em conjunto de treinamento (80%) e conjunto de teste (20%)
2. Construa o modelo de regressão usando o conjunto de treinamento

3. Faça previsões usando o conjunto de teste e calcule as métricas de precisão do modelo

Neste capítulo, você aprenderá:

os fundamentos e a fórmula da regressão linear,


como calcular modelos de regressão simples e múltipla em R,

como fazer previsões do resultado de novos dados,

como avaliar o desempenho do modelo

A fórmula matemática da regressão linear pode ser escrita da seguinte forma:

y = b0 + b1*x + e

Lemos isso como "y é modelado como beta1 (b1) vezesx, mais uma constante beta0 (b0), mais um
termo de erroe.”

12
Quando você tem múltiplas variáveis preditoras, a equação pode ser escrita comoy = b0 +
b1*x1 + b2*x2 + ... + bn*xn, onde:

b0 é o intercepto,
b1, b2, …, bn são os pesos ou coeficientes de regressão associados ao
preditores x1, x2, …, xn.

eé o termo de erro (também conhecido como os erros residuais), a parte de y que pode ser
explicado pelo modelo de regressão

Note que b0, b1, b2, … e bn são conhecidos como os coeficientes beta da regressão ou
parâmetros.

A figura abaixo ilustra um modelo de regressão linear simples, onde:

a linha de regressão que melhor se ajusta está em azul


o intercepto (b0) e a inclinação (b1) estão mostrados em verde

os termos de erro (e) são representados por linhas vermelhas verticais

No gráfico de dispersão acima, pode-se ver que nem todos os pontos de dados caem exatamente na
linha de regressão ajustada. Alguns dos pontos estão acima da curva azul e alguns estão abaixo
no geral, os erros residuais (e) têm aproximadamente média zero.

A soma dos quadrados dos erros residuais é chamada de Soma dos Quadrados Residuais
ouRSS.

A variação média dos pontos em torno da linha de regressão ajustada é chamada de Resíduo.
Erro Padrão (RSE). Esta é uma das métricas usadas para avaliar a qualidade geral de
o modelo de regressão ajustado. Quanto menor o RSE, melhor é.

Como o termo de erro médio é zero, a variável de resultado y pode ser aproximadamente
estimado da seguinte forma:

y ~ b0 + b1*x

13
Matematicamente, os coeficientes beta (b0 e b1) são determinados de forma que o RSS seja o mais
mínimo possível. Este método de determinação dos coeficientes beta é tecnicamente
chamada regressão de mínimos quadrados ou regressão ordinária de mínimos quadrados (OLS).

Uma vez que os coeficientes beta são calculados, um teste t é realizado para verificar se ou não
esses coeficientes são significativamente diferentes de zero. Um coeficiente beta não zero
significa que há uma relação significativa entre os preditores (x) e o resultado
variável (y).

tidyversepara fácil manipulação e visualização de dados


cuidadopara um fluxo de trabalho de aprendizado de máquina fácil

biblioteca(tidyverse)
biblioteca(caret)
theme_set(theme_bw())

Preparando os dados

Usaremos omarketingconjunto de dados, introduzido no Capítulo @ref(análise-de-regressão),


para prever as unidades de vendas com base na quantia de dinheiro gasto nos três
mídias de publicidade (youtube, facebook e jornal)

Vamos dividir os dados aleatoriamente em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados
dados("marketing", pacote = "datarium")
# Inspecionar os dados
amostra_n(marketing, 3)
## youtube facebook newspaper sales
## 58 163.4 23.0 19.9 15.8
## 157 112.7 52.2 60.6 18.4
## 81 91.7 32.0 26.8 14.2
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- marketing$vendas %>%
createDataPartition(p = 0.8, list = FALSE)
[Link] <- marketing[[Link], ]
[Link] <- marketing[-[Link], ]

Computando regressão linear

A função Rlm()é usado para calcular o modelo de regressão linear.

Código R para começar rapidamente

# Build the model


modelo <- lm(vendas ~., dados = [Link])
Resuma o modelo
resumo(modelo)
Fazer previsões
predictions <- model %>% predict([Link])
# Model performance
Erro de previsão, RMSE

14
RMSE(predictions, [Link]$sales)
# (b) R-square
R2(previsões, [Link]$vendas)

Regressão linear simples

A regressão linear simples é usada para prever uma variável de resultado contínua (y)
baseado em uma única variável preditora (x).

No seguinte exemplo, construiremos um modelo linear simples para prever as unidades de vendas com base
sobre o orçamento publicitário gasto no youtube. A equação de regressão pode ser escrita como
sales = b0 + b1*youtube.

A função Rlm()pode ser usado para determinar os coeficientes beta do modelo linear,
como segue:

modelo <- lm(vendas ~ youtube, dados = [Link])


resumo(modelo)$coef
## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercept) 8.3839 0.62442 13.4 5.22e-28
## youtube 0.0468 0.00301 15.6 7.84e-34

A saída acima mostra a estimativa dos coeficientes beta da regressão (coluna


Estimar) e seus níveis de significância (colunaPr(>|t|)O intercepto (b0) é 8,38
e o coeficiente da variável youtube é 0,046.

A equação de regressão estimada pode ser escrita da seguinte forma:sales = 8.38 +


0,046*youtubeUsando esta fórmula, para cada novo orçamento de publicidade do youtube, você pode
prever o número de unidades vendidas.

Por exemplo:

Para um orçamento de publicidade no YouTube igual a zero, podemos esperar uma venda de 8,38 unidades.
Para um orçamento de publicidade no YouTube igual a 1000, podemos esperar uma venda de 8,38 +
0,046*1000 = 55 unidades.

Previsões podem ser facilmente feitas usando a função Rprever(). No seguinte


exemplo, prevemos unidades de vendas para dois orçamentos de publicidade no youtube: 0 e 1000.

newdata <- [Link](youtube = c(0, 1000))


modelo %>% prever(novosdados)
## 1 2
## 8.38 55.19

Regressão linear múltipla

A regressão linear múltipla é uma extensão da regressão linear simples para prever um
variável resultado (y) com base em múltiplas variáveis preditoras distintas (x).

Por exemplo, com três variáveis preditoras (x), a previsão de y é expressa por
seguinte equação:y = b0 + b1*x1 + b2*x2 + b3*x3

15
Os coeficientes beta da regressão medem a associação entre cada preditor.
variável e o resultado. "b_j" pode ser interpretado como o efeito médio em y de um
aumento unitário em 'x_j', mantendo todos os outros preditores fixos.

Nesta seção, construiremos um modelo de regressão múltipla para prever vendas com base em
budget invested in three advertising medias: youtube, facebook and newspaper. The
a fórmula é a seguinte:sales = b0 + b1*youtube + b2*facebook + b3*newspaper

Você pode calcular os coeficientes do modelo de regressão múltipla no R da seguinte forma:

model <- lm(sales ~ youtube + facebook + newspaper,


data = [Link])
resumo(modelo)$coef

Note que, se você tiver muitas variáveis preditoras em seus dados, pode simplesmente incluir todas.
as variáveis disponíveis no modelo usando~.:

modelo <- lm(vendas ~., dados = [Link])


resumo(modelo)$coef
## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercept) 3.39188 0.44062 7.698 1.41e-12
## youtube 0.04557 0.00159 28.630 2.03e-64
## facebook 0.18694 0.00989 18.905 2.07e-42
## newspaper 0.00179 0.00677 0.264 7.92e-01

A partir da saída acima, a tabela de coeficientes mostra as estimativas dos coeficientes beta e
seus níveis de significância. As colunas são:

Estimaro intercepto (b0) e as estimativas do coeficiente beta associadas a


cada variável preditora
Erro Padrão: the standard error of the coefficient estimates. This represents the
a precisão dos coeficientes. Quanto maior o erro padrão, menos confiantes nós estamos.
estão sobre a estimativa.

valor to t-estatístico, que é a estimativa do coeficiente (coluna 2) dividida por


o erro padrão da estimativa (coluna 3)

Pr(>|t|)O valor-p correspondente ao estatístico t. Quanto menor o valor-p,


quanto mais significativa for a estimativa.

Como descrito anteriormente, você pode facilmente fazer previsões usando a função R
prever():

Novos orçamentos de publicidade


novosdados <- [Link](
youtube = 2000, facebook = 1000,
newspaper = 1000
)
Prever valores de vendas
modelo %>% prever(novos dados)
## 1
## 283

Interpretação

16
Antes de usar um modelo para previsões, você precisa avaliar a significância estatística de
o modelo. Isso pode ser facilmente verificado exibindo o resumo estatístico do
modelo.

Resumo do modelo

Display the statistical summary of the model as follow:

resumo(modelo)
##
## Chamada:
## lm(fórmula = vendas ~ ., dados = [Link])
##
Resíduos:
## Min 1Q Median 3Q Max
## -10.412 -1.110 0.348 1.422 3.499
##
## Coeficientes:
## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercept) 3.39188 0.44062 7.70 1.4e-12 ***
## youtube 0.04557 0.00159 28.63 < 2e-16 ***
## facebook 0.18694 0.00989 18.90 < 2e-16 ***
## newspaper 0.00179 0.00677 0.26 0.79
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
Erro padrão residual: 2,12 em 158 graus de liberdade
## Multiple R-squared: 0.89, Adjusted R-squared: 0.888
## F-statistic: 427 on 3 and 158 DF, p-value: <2e-16

O resumo mostra 6 componentes, incluindo:

Chamada. Mostra a chamada de função usada para calcular o modelo de regressão.


Residuais. Forneça uma visão rápida da distribuição dos resíduos, que por
definição tem média zero. Portanto, a mediana não deve estar longe de zero,
e o mínimo e o máximo devem ser aproximadamente iguais em valor absoluto.

Coeficientes. Mostra os coeficientes beta da regressão e sua estatística


significância. Variáveis preditoras, que estão significativamente associadas ao resultado
variável, são marcadas por estrelas.

Erro padrão residual (EPR), R-quadrado (R2) e o F-estatístico são


métricas que são usadas para verificar quão bem o modelo se ajusta aos nossos dados.

O primeiro passo na interpretação da análise de regressão múltipla é examinar a estatística F.


e o valor-p associado, na parte inferior do resumo do modelo.

No nosso exemplo, pode-se ver que o valor p da estatística F é < 2.2e-16, o que é altamente
significativo. Isso significa que, pelo menos, uma das variáveis preditoras é significativamente
relacionado à variável de resultado.

Significado dos coeficientes

17
Para ver quais variáveis preditoras são significativas, você pode examinar a tabela de coeficientes,
que mostra a estimativa dos coeficientes beta da regressão e o p-statístico t associado -
valores.

resumo(modelo)$coef
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.39188 0.44062 7.698 1.41e-12
## youtube 0.04557 0.00159 28.630 2.03e-64
## facebook 0.18694 0.00989 18.905 2.07e-42
## newspaper 0.00179 0.00677 0.264 7.92e-01

Para um determinado preditor, a estatística t avalia se há ou não uma significância.


associação entre o preditor e a variável de resultado, ou seja, se o beta
o coeficiente do preditor é significativamente diferente de zero.

Pode-se ver que, as mudanças no orçamento de publicidade do Youtube e do Facebook são


significativamente associado a mudanças nas vendas enquanto mudanças no orçamento de jornais não estão
significativamente associado às vendas.

Para uma dada variável preditora, o coeficiente (b) pode ser interpretado como o efeito médio
em y de um aumento de uma unidade no preditor, mantendo todos os outros preditores fixos.

Por exemplo, para um orçamento fixo de publicidade no YouTube e em jornais,


gastar um adicional de 1.000 dólares em publicidade no facebook leva a um aumento em
vendas em aproximadamente 0,1885*1000 = 189 unidades de venda, em média.

O coeficiente do youtube sugere que para cada aumento de 1 000 dólares no youtube
orçamento de publicidade, mantendo todos os outros preditores constantes, podemos esperar um aumento de
0,045*1000 = 45 unidades de venda, em média.

Descobrimos que o jornal não é significativo no modelo de regressão múltipla. Isso


significa que, para um valor fixo de orçamento para publicidade no youtube e em jornais, mudanças em
o orçamento de publicidade do jornal não afetará significativamente as unidades de vendas.

Como a variável do jornal não é significativa, é possível removê-la do modelo:

modelo <- lm(vendas ~ youtube + facebook, dados = [Link])


resumo(modelo)
##
## Chamada:
## lm(fórmula = vendas ~ youtube + facebook, dados = [Link])
##
Resíduos:
## Min 1Q Median 3Q Max
-10,481 -1,104 0,349 1,423 3,486
##
## Coefficients:
## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercept) 3.43446 0.40877 8.4 2.3e-14 ***
## youtube 0.04558 0.00159 28.7 < 2e-16 ***
## facebook 0.18788 0.00920 20.4 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
Erro padrão residual: 2,11 em 159 graus de liberdade

18
## Multiple R-squared: 0.89, Adjusted R-squared: 0.889
## F-statistic: 644 on 2 and 159 DF, p-value: <2e-16

Finalmente, nossa equação modelo pode ser escrita da seguinte forma:sales = 3.43+ 0.045youtube +
0.187facebook.

Precisão do modelo

Uma vez que você identificou que, pelo menos, uma variável preditora está significativamente associada ao
resultado, você deve continuar o diagnóstico verificando quão bem o modelo se ajusta ao
dados. Este processo também é conhecido como a adequação do ajuste

A qualidade geral do ajuste da regressão linear pode ser avaliada usando os seguintes três
quantidades, exibidas no resumo do modelo:

1. Erro Padrão Residual (EPR),


2. R-quadrado (R2) e R-quadrado ajustado,

3. Estatística F, que já foi descrita na seção anterior

## rse [Link] [Link] [Link]


## 1 2.11 0.89 644 5.64e-77

[Link] padrão residual (EPR).

O RSE (ou modelosigma), correspondente ao erro de previsão, representa aproximadamente o


diferença média entre os valores de resultado observados e os valores previstos por
O modelo. Quanto menor o RSE, melhor o modelo se ajusta aos nossos dados.

Dividir o RSE pelo valor médio da variável de resultado lhe dará o


taxa de erro de previsão, que deve ser o menor possível.

Em nosso exemplo, usando apenas as variáveis preditoras do youtube e do facebook, o RSE = 2,11,
o que significa que os valores de vendas observados se desviam dos valores previstos em
aproximadamente 2,11 unidades em média.

Isto corresponde a uma taxa de erro de 2,11/média([Link]$sales) = 2,11/16,77 = 13%,


o que é baixo.

2. R-quadrado e R-quadrado ajustado:

O R-quadrado (R2) varia de 0 a 1 e representa a proporção de variação em


variável de resultado que pode ser explicada pelas variáveis preditoras do modelo.

Para uma regressão linear simples, R2 é o quadrado do coeficiente de correlação de Pearson.


entre o resultado e as variáveis preditoras. Na regressão linear múltipla, o R2
representa o coeficiente de correlação entre os valores de resultado observados e o
valores previstos.

O R2 mede quão bem o modelo se ajusta aos dados. Quanto maior o R2, melhor o
modelo. No entanto, um problema com o R2 é que ele sempre aumentará quando mais

19
variáveis são adicionadas ao modelo, mesmo que essas variáveis sejam apenas fracas em associação
com o resultado (James et al. 2014). Uma solução é ajustar o R2 tomando em
contar o número de variáveis preditoras.

A correção no valor do "R Quadrado Ajustado" na saída do resumo é uma correção


pelo número de variáveis x incluídas no modelo preditivo.

Portanto, você deve considerar principalmente o R-quadrado ajustado, que é um R2 penalizado para um
maior número de preditores.

Um R2 (ajustado) que está próximo de 1 indica que uma grande proporção do


a variabilidade no resultado foi explicada pelo modelo de regressão.
Um número próximo de 0 indica que o modelo de regressão não explicou muito do
variabilidade no resultado.

No nosso exemplo, o R2 ajustado é 0,88, o que é bom.

3.F-Statistic:

Lembre-se de que a estatística F fornece a significância geral do modelo. Ela avalia se


pelo menos uma variável preditora tem um coeficiente diferente de zero.

Em uma regressão linear simples, este teste não é realmente interessante, pois apenas duplica o
informação dada pelo teste t, disponível na tabela de coeficientes.

A estatística F torna-se mais importante assim que começamos a usar múltiplos preditores, como em
regressão linear múltipla.

Um grande F-estatística corresponderá a um valor p estatisticamente significativo (p < 0,05). Em


nosso exemplo, a estatística F igual a 644 produzindo um valor p de 1,46e-42, que é altamente
significativo.

Fazendo previsões

Faremos previsões usando os dados de teste para avaliar o desempenho do nosso


modelo de regressão.

O procedimento é o seguinte:

1. Prever os valores de vendas com base em novos orçamentos de publicidade nos dados de teste
2. Avalie o desempenho do modelo calculando:

oO erro de previsão RMSE (Erro Quadrático Médio), representando a


diferença média entre os valores de resultado conhecidos observados na
dados de teste e os valores de resultado previstos pelo modelo. Quanto mais baixo o
RMSE, melhor o modelo.

oO R-quadrado (R2), representando a correlação entre os observados


valores de resultado e os valores de resultado previstos. Quanto maior o R2, o
melhorar o modelo.

20
Fazer previsões
predictions <- model %>% predict([Link])
# Desempenho do modelo
Calcule o erro de previsão, RMSE
RMSE(predições, [Link]$vendas)
## [1] 1.58
# (b) Calcule R-quadrado
R2(previsões, [Link]$s vendas)
## [1] 0.938

A partir da saída acima, o R2 é 0,93, o que significa que os observados e os previstos


os valores de resultado estão altamente correlacionados, o que é muito bom.

O erro de previsão RMSE é 1,58, representando uma taxa de erro de


1,58/ média([Link]$sales) = 1,58/17 = 9,2%, o que é bom.

Este capítulo descreve os princípios básicos da regressão linear e fornece exemplos práticos em
R para computar modelos de regressão linear simples e múltipla. Também descrevemos como
para avaliar o desempenho do modelo para previsões.

Observe que a regressão linear assume uma relação linear entre o resultado e o
variáveis preditoras. Isso pode ser facilmente verificado criando um gráfico de dispersão do resultado
variável vs a variável preditora.

Por exemplo, o seguinte código R exibe unidades de vendas versus publicidade no YouTube
orçamento. Também vamos adicionar uma linha suavizada:

ggplot(marketing, aes(x = youtube, y = vendas)) +


geom_point() +
stat_smooth()

O gráfico acima mostra uma relação linearmente crescente entre ovendase o


youtubevariáveis, o que é algo bom.

21
Além das suposições de linearidade, o método de regressão linear faz muitas outras
suposições sobre seus dados (veja o Capítulo @ref(suposições-de-regressão-e-
diagnósticos)). Você deve garantir que essas suposições sejam verdadeiras para os seus dados.

Problemas potenciais incluem: a) a presença de observações influentes nos dados


(Capítulo @ref(suposições-e-diagnósticos-da-regressão)), não-linearidade entre o
resultado e algumas variáveis preditoras (@ref(regressão-polinomial-e-spline)) e
a presença de forte correlação entre as variáveis preditoras (Capítulo
@ref(multicollinearidade)).

22
I.3._ Efeito de Interação na Regressão Múltipla: Essenciais

Este capítulo descreve como calcular a regressão linear múltipla com interação
efeitos.

Anteriormente, descrevemos como construir um modelo de regressão linear múltipla (Capítulo


@ref(regressão-linear)) para prever uma variável de resultado contínuo (y) com base em
múltiplas variáveis preditoras (x).

Por exemplo, para prever vendas, com base nos orçamentos de publicidade gastos no youtube e
facebook, a equação do modelo évendas = b0 + b1*youtube + b2*facebook, onde,
b0 é a interseção; b1 e b2 são os coeficientes de regressão associados, respectivamente, com
as variáveis preditoras youtube e facebook.

A equação acima, também conhecida como modelo aditivo, investiga apenas os efeitos principais de
preditores. Assume que a relação entre uma determinada variável preditora e o
o resultado é independente das outras variáveis preditoras (James et al. 2014, P. Bruce e
Bruce (2017)).

Considerando nosso exemplo, o modelo aditivo assume que o efeito nas vendas de
a publicidade do youtube é independente do efeito da publicidade do facebook.

Essa suposição pode não ser verdadeira. Por exemplo, gastar dinheiro no facebook
A publicidade pode aumentar a eficácia da publicidade no YouTube nas vendas. Em
marketing, isso é conhecido como um efeito de sinergia, e em estatísticas é referido como um
efeito de interação (James et al. 2014).

Neste capítulo, você aprenderá:

a equação da regressão linear múltipla com interação


Códigos R para calcular os coeficientes de regressão associados ao principal
efeitos e os efeitos de interação

como interpretar o efeito de interação

Equação

A equação de regressão linear múltipla, com efeitos de interação entre dois preditores
(x1 e x2), podem ser escritos da seguinte forma:

y = b0 + b1*x1 + b2*x2 + b3*(x1*x2)

Considerando nosso exemplo, torna-se:

sales = b0 + b1*youtube + b2*facebook + b3*(youtube*facebook)

Isso também pode ser escrito como:

vendas = b0 + (b1 + b3*facebook)*youtube + b2*facebook

23
ou como:

vendas = b0 + b1*youtube + (b2 + b3*youtube)*facebook

b3pode ser interpretado como o aumento da eficácia da publicidade no youtube para um


um aumento de uma unidade na publicidade do Facebook (ou vice-versa).

Nas seções a seguir, você aprenderá como calcular os coeficientes de regressão em


R.

tidyversepara fácil manipulação e visualização de dados


caretpara um fluxo de trabalho de aprendizado de máquina fácil

biblioteca(tidyverse)
biblioteca(caret)

Preparando os dados

Usaremos omarketingconjunto de dados, introduzido no Capítulo @ref(análise de regressão),


para prever as unidades de vendas com base na quantidade de dinheiro gasto nos três
mídias de publicidade (youtube, facebook e jornal)

Vamos dividir aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo).

# Carregar os dados
dados("marketing", pacote = "datarium")
# Inspecionar os dados
amostra_n(marketing, 3)
youtube facebook vendas de jornais
## 58 163.4 23.0 19.9 15.8
## 157 112.7 52.2 60.6 18.4
## 81 91.7 32.0 26.8 14.2
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- marketing$vendas %>%
createDataPartition(p = 0.8, list = FALSO)
[Link] <- marketing[[Link], ]
[Link] <- marketing[-[Link], ]

Cálculo

Modelo aditivo

O modelo de regressão linear padrão pode ser calculado da seguinte forma:

Construa o modelo
modelo1 <- lm(vendas ~ youtube + facebook, dados = [Link])
Resuma o modelo
resumo(model1)
##
## Chamada:
## lm(fórmula = vendas ~ youtube + facebook, dados = [Link])
##

24
## Resíduos:
## Min 1Q Median 3Q Max
-10.481 -1.104 0.349 1.423 3.486
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.43446 0.40877 8.4 2.3e-14 ***
## youtube 0.04558 0.00159 28.7 < 2e-16 ***
## facebook 0.18788 0.00920 20.4 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
Erro padrão residual: 2.11 com 159 graus de liberdade
Múltiplo R-quadrado: 0,89, R-quadrado Ajustado: 0,889
## F-statistic: 644 on 2 and 159 DF, p-value: <2e-16
# Fazer previsões
predictions <- model1 %>% predict([Link])
# Desempenho do modelo
# (a) Erro de previsão, RMSE
RMSE(predictions, [Link]$sales)
## [1] 1,58
(b) R-quadrado
R2(previsões, [Link]$vendas)
## [1] 0.938

Efeitos de interação

No R, você inclui interações entre variáveis usando o* operator:

Construa o modelo
# Use isso:
model2 <- lm(vendas ~ youtube + facebook + youtube:facebook,
data = marketing)
# Ou simplesmente, use isto:
modelo2 <- lm(vendas ~ youtube*facebook, dados = [Link])
Resumir o modelo
summary(model2)
##
## Chamada:
## lm(fórmula = vendas ~ youtube * facebook, dados = [Link])
##
## Residuais:
## Min 1Q Median 3Q Max
-7.438 -0.482 0.231 0.748 1.860
##
## Coeficientes:
## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercept) 7.90e+00 3.28e-01 24.06 <2e-16 ***
## youtube 1.95e-02 1.64e-03 11.90 <2e-16 ***
## facebook 2.96e-02 9.83e-03 3.01 0.003 **
## youtube:facebook 9.12e-04 4.84e-05 18.86 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
Erro padrão residual: 1,18 em 158 graus de liberdade
## Multiple R-squared: 0.966, Adjusted R-squared: 0.966
## F-statistic: 1.51e+03 on 3 and 158 DF, p-value: <2e-16
# Fazer previsões
predictions <- model2 %>% predict([Link])
Desempenho do modelo
# (a) Erro de previsão, RMSE

25
RMSE(predições, [Link]$sales)
## [1] 0.963
(b) R-quadrado
R2(previsões, [Link]$vendas)
## [1] 0.982

Interpretação

Pode-se ver que todos os coeficientes, incluindo o coeficiente do termo de interação, são
estatisticamente significativo, sugerindo que há uma relação de interação entre o
duas variáveis preditoras (publicidade no youtube e facebook).

Nossa equação modelo se parece com isto:

sales = 7.89 + 0.019*youtube + 0.029*facebook +


0,0009*youtube*facebook

Podemos interpretar isso como um aumento na publicidade do youtube de 1000 dólares associado
com aumento nas vendas de(b1 + b3*facebook)*1000 = 19 + 0.9*facebook units.
E um aumento na publicidade do Facebook de 1000 dólares estará associado a um
aumento nas vendas de(b2 + b3*youtube)*1000 = 28 + 0.9*youtube unidades.

Observe que, às vezes, o termo de interação é significativo, mas não o é


efeitos principais. O princípio hierárquico afirma que, se incluirmos uma interação em um
modelo, também devemos incluir os efeitos principais, mesmo que os valores de p associados a
seus coeficientes não são significativos (James et al. 2014).

Comparando os modelos aditivos e de interação

O erro de previsão RMSE do modelo de interação é 0,963, que é menor que o


erro de previsão do modelo aditivo (1,58).

Além disso, o valor do R-quadrado (R2) do modelo de interação é de 98% em comparação com apenas
93% para o modelo aditivo.

Estes resultados sugerem que o modelo com o termo de interação é melhor do que o modelo
que contém apenas efeitos principais. Então, para esses dados específicos, devemos optar pelo modelo
com o modelo de interação.

Este capítulo descreve como calcular a regressão linear múltipla com interação
Os efeitos. Termos de interação devem ser incluídos no modelo se forem significativamente

26
I.4._Regressão com Variáveis Categóricas: Essenciais para Codificação Dummy
em R

Este capítulo descreve como calcular regressão com variáveis categóricas.

Variáveis categóricas (também conhecidas como variáveis fatoriais ou qualitativas) são variáveis que
classificar observações em grupos. Eles têm um número limitado de valores diferentes, chamados de
níveis. Por exemplo, o gênero dos indivíduos é uma variável categórica que pode ter dois
levels: Male or Female.

A análise de regressão requer variáveis numéricas. Assim, quando um pesquisador deseja


incluir uma variável categórica em um modelo de regressão, passos suplementares são necessários para
tornar os resultados interpretáveis.

Nesses passos, as variáveis categóricas são recodificadas em um conjunto de binários separados.


variáveis. Essa recodificação é chamada de "codificação fictícia" e leva à criação de uma tabela
matriz de contraste chamada. Isso é feito automaticamente por softwares estatísticos, como o R.

Aqui, você aprenderá como construir e interpretar um modelo de regressão linear com variáveis categóricas.
variáveis preditoras. Também forneceremos exemplos práticos em R.

Conteúdos:

conjunto

Variáveis categóricas com dois níveis

Variáveis categóricas com mais de dois níveis

tidyversepara uma manipulação e visualização de dados fáceis

biblioteca(tidyverse)

conjunto

Nós usaremos oSaláriosconjunto de dados [car pacote], que contém 2008-09 nove meses
academic salary for Assistant Professors, Associate Professors and Professors in a
faculdade nos EUA

Os dados foram coletados como parte do esforço contínuo da administração da faculdade para
monitorar as diferenças salariais entre membros do corpo docente masculinos e femininos.

# Carregar os dados
dados("Salários", pacote = "car")
# Inspecionar os dados
amostra_n(Salários, 3)

27
## rank discipline [Link] [Link] sex salary
## 115 Prof A 12 0 Feminino 105000
## 313 Prof A 29 19 Male 94350
## 162 Prof B 26 19 Male 176500

Variáveis categóricas com dois níveis

Lembre-se que a equação de regressão, para prever uma variável de resultado (y) com base em
de uma variável preditora (x), pode ser simplesmente escrito comoy = b0 + b1*x. b0e `b1 são os
coeficientes beta de regressão, representando o intercepto e a inclinação, respectivamente.

Suponha que desejamos investigar as diferenças nos salários entre homens e mulheres.

Com base na variável de gênero, podemos criar uma nova variável dummy que assume o valor:

1se uma pessoa é do sexo masculino


0se uma pessoa é do sexo feminino

e use esta variável como um preditor na equação de regressão, levando ao seguinte


o modelo:

b0 + b1se a pessoa é do sexo masculino


bose a pessoa for do sexo feminino

Os coeficientes podem ser interpretados da seguinte forma:

1.b0é o salário médio entre as mulheres,


2.b0 + b1é o salário médio entre os homens,

3. eb1é a diferença média de salário entre homens e mulheres.

Para fins de demonstração simples, o seguinte exemplo modela a diferença salarial


entre homens e mulheres através do cálculo de um modelo de regressão linear simples sobre o
Saláriosdata set [carroO R cria variáveis dummy automaticamente:

Calcule o modelo
modelo <- lm(salário ~ sexo, dados = Salários)
resumo(modelo)$coef
## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercepto) 101002 4809 21.00 2.68e-66
## sexMale 14088 5065 2.78 5.67e-03

A partir da saída acima, o salário médio para mulheres é estimado em 101002, enquanto
os homens são estimados em um total de 101002 + 14088 = 115090. O valor p para o dummy
variávelsexMale é muito significativo, sugerindo que há uma evidência estatística de um
diferença na média salarial entre os gêneros.

Ocontrastes()a função retorna o código que R usou para criar o dummy


variables:

contrastes(Salários$sexo)
Masculino
## Female 0

28
## Masculino 1

R criou uma variável dummy sexMale que assume o valor de 1 se o sexo for Masculino,
e 0 caso contrário. A decisão de codificar os homens como 1 e as mulheres como 0 (linha de base) é
arbitrário e não tem efeito na computação da regressão, mas altera o
interpretação dos coeficientes.

Você pode usar a funçãorelevel()definir a categoria de referência para homens da seguinte maneira:

Salários <- Salários %>%


mutar(sex = reordenar(sex, ref = "Masculino"))

A saída do ajuste da regressão torna-se:

modelo <- lm(salário ~ sexo, dados = Salários)


resumo(modelo)$coef
## Estimativa Erro Padrão valor t Pr(>|t|)
(Intercept) 115090 1587 72.50 2.46e-230
## sexFemale -14088 5065 -2.78 5.67e-03

O fato de que o coeficiente parasexFemale na saída da regressão é negativo indica


ser mulher está associado a uma diminuição no salário (em relação aos homens).

Agora as estimativas paraboeb1são 115090 e -14088, respectivamente, levando uma vez


novamente para uma previsão de salário médio de 115090 para homens e uma previsão de 115090 -
14088 = 101002 para mulheres.

Alternativamente, em vez de um esquema de codificação 0/1, poderíamos criar uma variável dummy -1
(masculino) / 1 (feminino). Isso resulta no modelo:

b0 - b1se a pessoa é do sexo masculino


b0 + b1se a pessoa for mulher

Portanto, se a variável categórica for codificada como -1 e 1, então, se o coeficiente de regressão for
positivo, é subtraído do grupo codificado como -1 e adicionado ao grupo codificado como 1.
Se o coeficiente de regressão for negativo, então a adição e subtração são revertidas.

Variáveis categóricas com mais de dois níveis

Geralmente, uma variável categórica com n níveis será transformada em n-1 variáveis
cada um com dois níveis. Essas n-1 novas variáveis contêm as mesmas informações que a
variável única. Essa recodificação cria uma tabela chamada matriz de contraste.

Por exemploclassificaçãonoSaláriosos dados têm três níveis: "ProfAssistente", "ProfAssociado" e


"Prof". Esta variável pode ser codificada de forma dummy em duas variáveis, uma chamada AssocProf
e um Prof:

Se a classificação = AssocProf, então a coluna AssocProf seria codificada com um 1 e


Prof com 0.
Se o cargo = Prof, então a coluna AssocProf seria codificada com um 0 e Prof
seria codificado com um 1.

29
Se o cargo = AsstProf, então ambas as colunas "AssocProf" e "Prof" seriam codificadas
com um 0.

Essa codificação fictícia é realizada automaticamente pelo R. Para fins de demonstração, você
pode usar a funçã[Link]()para criar uma matriz de contrastes para uma variável fator:

res <- [Link](~rank, data = Salaries)


cabeça(res[, -1])
## rankAssocProf rankProf
## 1 0 1
## 2 0 1
## 3 0 0
## 4 0 1
## 5 0 1
## 6 1 0

Ao construir um modelo linear, há diferentes maneiras de codificar variáveis categóricas.


conhecidos como sistemas de codificação de contraste. A opção padrão em R é usar o primeiro nível do
fator como referência e interprete os níveis restantes em relação a este nível.

Note que a ANOVA (análise de variância) é apenas um caso especial de modelo linear onde o
os preditores são variáveis categóricas. E, porque o R entende que a ANOVA
e a regressão são ambos exemplos de modelos lineares, permite que você extraia o clássico
ANOVA table from your regression model using the R base anova()função ou o
Anova()função [emcarropacote]. Geralmente recomendamos oAnova()função
porque cuida automaticamente de designs desequilibrados.

Os resultados da previsão de salário usando um procedimento de regressão múltipla são


apresentado abaixo.

biblioteca(car)
modelo2 <- lm(salário ~ [Link]ço + classificação + disciplina + sexo,
data = Salaries)
Anova(modelo2)
## Anova Table (Type II tests)
##
## Response: salary
## Soma dos Quadrados Df Valor F Pr(>F)
## [Link] 3.24e+08 1 0.63 0.43
## rank 1.03e+11 2 100.26 < 2e-16 ***
## discipline 1.74e+10 1 33.86 1.2e-08 ***
## sex 7.77e+08 1 1.51 0.22
## Residuals 2.01e+11 391
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Levando em consideração outras variáveis (anos de serviço, patente e disciplina), pode-se ver que
a variável categórica sexo não está mais significativamente associada com a variação em
salário entre indivíduos. Variáveis significativas são classificação e disciplina.

Se você quiser interpretar os contrastes da variável categórica, digite isso:

resumo(model2)
##
## Chamada:

30
## lm(fórmula = salário ~ [Link]ço + cargo + disciplina + sexo,
## data = Salaries)
##
## Residuals:
## Min 1Q Median 3Q Max
## -64202 -14255 -1533 10571 99163
##
## Coeficientes:
## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercept) 73122.9 3245.3 22.53 < 2e-16 ***
## [Link] -88.8 111.6 -0.80 0.42696
## rankAssocProf 14560.4 4098.3 3.55 0.00043 ***
## rankProf 49159.6 3834.5 12.82 < 2e-16 ***
## disciplineB 13473.4 2315.5 5.82 1.2e-08 ***
## sexFemale -4771.2 3878.0 -1.23 0.21931
## ---
## Códigos de significância: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 22700 on 391 degrees of freedom
## R-quadrado múltiplo: 0,448, R-quadrado ajustado: 0,441
Estatística F: 63.4 em 5 e 391 GL, valor-p: <2e-16

Por exemplo, pode-se ver que ser da disciplina B (departamentos aplicados) é


associado significativamente a um aumento médio de 13473,38 no salário em comparação a
disciplina A (departamentos teóricos).

Neste capítulo, descrevemos como as variáveis categóricas são incluídas na regressão linear.
modelo. Como a regressão requer entradas numéricas, variáveis categóricas precisam ser recodificadas
em um conjunto de variáveis binárias.

Fornecemos exemplos práticos para as situações em que você tem variáveis categóricas
contendo dois ou mais níveis.

Note que, para variáveis categóricas com um grande número de níveis, pode ser útil
junte alguns dos níveis.

Algumas variáveis categóricas têm níveis que são ordenados. Elas podem ser convertidas em
valores numéricos e usados como estão. Por exemplo, se o professor classifica (“AsstProf”,
“AssocProf” e “Prof”) têm um significado especial, você pode convertê-los em numéricos
valores, ordenados do menor para o maior, correspondendo a professores de grau mais alto.

31
I.5._Essenciais de Regressão Não Linear em R: Polinômio e Spline
Modelos de Regressão

Em alguns casos, a verdadeira relação entre o resultado e uma variável preditora pode ser
não ser linear.

Existem diferentes soluções que ampliam o modelo de regressão linear (Capítulo


@ref(regressão-linear)) para capturar esses efeitos não lineares, incluindo:

Regressão polinomial. Esta é a abordagem simples para modelar não linearidades.


relações. Adiciona termos polinomiais ou termos quadráticos (quadrados, cubos, etc.) a um
regressão.
Regressão spline. Ajusta uma curva suave com uma série de segmentos polinomiais.
Os valores que delimitam os segmentos da splina são chamados de Nós.

Modelos aditivos generalizados (GAM). Ajusta modelos de spline com automatização


seleção de nós.

Neste capítulo, você aprenderá como calcular modelos de regressão não linear e como
compare os diferentes modelos para escolher o que melhor se adapta aos seus dados.

As métricas RMSE e R2 serão usadas para comparar os diferentes modelos (veja


Capítulo @ref(regressão linear)).

Lembre-se de que o RMSE representa o erro de previsão do modelo, ou seja, a média


diferença entre os valores de resultado observados e os valores de resultado previstos. O R2
representa a correlação ao quadrado entre os valores de resultado observados e previstos.
O melhor modelo é o modelo com o menor RMSE e o maior R2.

Contents:

Preparando os dados

regressão linear {linear-reg}

Regressão polinomial

Transformação logarítmica

Regressão spline

Modelos aditivos generalizados

Comparando os modelos

Referências

32
tidyversepara fácil manipulação e visualização de dados
cuidadorpara um fluxo de trabalho de aprendizado de máquina fácil

biblioteca(tidyverse)
biblioteca(caret)
defina_tema(theme_classic())

Preparando os dados

Nós usaremos oBostonconjunto de dados [emMASSApacote], apresentado no Capítulo


@ref(análise de regressão), para prever o valor mediano das casas (mdev), em Boston
Subúrbios, com base na variável preditoralstat(porcentagem de status inferior do)
população).

Vamos dividir aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

Carregar os dados
dados("Boston", pacote = "MASS")
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- Boston$medv %>%
createDataPartition(p = 0.8, lista = FALSE)
[Link] <- Boston[[Link], ]
[Link] <- Boston[-[Link], ]

Primeiro, visualize o gráfico de dispersão domedvvslstatvariáveis como segue:

ggplot([Link], aes(lstat, medv) ) +


geom_point() +
stat_smooth()

O gráfico de dispersão acima sugere uma relação não linear entre as duas variáveis.

Nas seções seguintes, começamos calculando a regressão linear e não linear.


modelos. Em seguida, vamos comparar os diferentes modelos para escolher o melhor para o nosso
dados.

33
Regressão linear {linear-reg}

A equação do modelo de regressão linear padrão pode ser escrita comomedv = b0 +


b1*lstat.

Compute linear regression model:

Construir o modelo
modelo <- lm(medv ~ lstat, dados = [Link])
Faça previsões
predictions <- model %>% predict([Link])
# Desempenho do modelo
[Link](
RMSE = RMSE(previsões, [Link]$medv),
R2 = R2(previsões, [Link]$medv)
)
## RMSE R2
## 1 6.07 0.535

Visualize os dados:

ggplot([Link], aes(lstat, medv)) +


geom_point() +
stat_smooth(method = lm, formula = y ~ x)

Regressão polinomial

A regressão polinomial adiciona termos polinomiais ou quadráticos à regressão


equação como segue:

medv=b0+b1*lstat+b2*lstat2

Em R, para criar um preditor x^2 você deve usar a funçãoEu(), como segue:I(x^2). Isso
elevar x à potência 2.

A regressão polinomial pode ser calculada em R da seguinte forma:

lm(medv ~ lstat + I(lstat^2), data = [Link])

Uma solução alternativa simples é usar isto:

34
lm(medv ~ poly(lstat, 2, raw = TRUE), data = [Link])
##
## Call:
## lm(fórmula = medv ~ poly(lstat, 2, raw = TRUE), dados = [Link])
##
## Coefficients:
(Intercept) poly(lstat, 2, raw = TRUE)1
## 43.351 -2.340
## poli(lstat, 2, bruto = VERDADEIRO)2
0.043

A saída contém dois coeficientes associados ao lstat: um para o termo linear


(lstat^1) e um para o termo quadrático (lstat^2).

O seguinte exemplo calcula um ajuste polinomial de sexta ordem:

lm(medv ~ poly(lstat, 6, raw = TRUE), data = [Link]) %>%


resumo()
##
## Chamada:
## lm(formula = medv ~ poly(lstat, 6, raw = TRUE), data = [Link])
##
## Residuals:
## Min 1Q Median 3Q Max
-14,23 -3,24 -0,74 2,02 26,50
##
## Coeficientes:
## Estimativa Erro Padrão valor t Pr(>|t|)
(Intercept) 7.14e+01 6.00e+00 11.90 < 2e-16
***
## poly(lstat, 6, raw = TRUE)1 -1,45e+01 3,22e+00 -4,48 9,6e-06
***
## poly(lstat, 6, raw = TRUE)2 1.87e+00 6.26e-01 2.98 0.003
**
## poly(lstat, 6, raw = TRUE)3 -1.32e-01 5.73e-02 -2.30 0.022 *
## poly(lstat, 6, raw = TRUE)4 4.98e-03 2.66e-03 1.87 0.062 .
## poly(lstat, 6, raw = TRUE)5 -9.56e-05 6.03e-05 -1.58 0.114
## poly(lstat, 6, raw = TRUE)6 7.29e-07 5.30e-07 1.38 0.170
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Erro padrão residual: 5.28 em 400 graus de liberdade
## Múltiplo R-quadrado: 0,684, R-quadrado Ajustado: 0,679
## F-statistic: 144 on 6 and 400 DF, p-value: <2e-16

A partir da saída acima, pode-se ver que os termos polinomiais além da quinta ordem são
não significativo. Então, apenas crie um modelo de regressão polinomial de quinto grau conforme segue:

Construir o modelo
modelo <- lm(medv ~ poly(lstat, 5, raw = TRUE), dados = [Link])
# Make predictions
predictions <- model %>% predict([Link])
# Desempenho do modelo
[Link](
RMSE = RMSE(predictions, [Link]$medv),
R2 = R2(previsões, [Link]$medv)
)
## RMSE R2
## 1 4.96 0.689

35
Visualize a linha de regressão polinomial de quinto grau da seguinte maneira:

ggplot([Link], aes(lstat, medv) ) +


geom_point() +
stat_smooth(método = lm, fórmula = y ~ poly(x, 5, raw = TRUE))

Transformação logarítmica

Quando você tem uma relação não linear, também pode tentar uma transformação logarítmica de
as variáveis preditoras:

Construa o modelo
modelo <- lm(medv ~ log(lstat), dados = [Link])
Fazer previsões
predictions <- model %>% predict([Link])
# Model performance
[Link](
RMSE = RMSE(predictions, [Link]$medv),
R2 = R2(previsões, [Link]$medv)
)
## RMSE R2
## 1 5.24 0.657

Visualize os dados:

ggplot([Link], aes(lstat, medv)) +


geom_point() +
stat_smooth(método = lm, fórmula = y ~ log(x))

36
Regressão spline

A regressão polinomial captura apenas uma certa quantidade de curvatura em um não linear
relação. Uma abordagem alternativa, e frequentemente superior, para modelar não linear
relacionamentos é usar splines (P. Bruce e Bruce 2017).

Splines fornecem uma maneira de interpolar suavemente entre pontos fixos, chamados de nós.
A regressão polinomial é calculada entre nós. Em outras palavras, splines são séries de
segmentos polinomiais unidos, conectando-se em nós (P. Bruce e Bruce 2017).

O pacote Rsplinesinclui a funçãobspara criar um termo b-spline em um


modelo de regressão.

Você precisa especificar dois parâmetros: o grau do polinômio e a localização de


os nós. Em nosso exemplo, colocaremos os nós no quartil inferior, na mediana
quartil, e o quartil superior:

knots <- quantile([Link]$lstat, p = c(0.25, 0.5, 0.75))

Vamos criar um modelo usando um spline cúbico (grau = 3):

biblioteca(splines)
Construir o modelo
nós <- quantile([Link]$lstat, p = c(0.25, 0.5, 0.75))
modelo <- lm(medv ~ bs(lstat, nós = nós), dados = [Link])
Fazer previsões
predictions <- model %>% predict([Link])
# Desempenho do modelo
[Link](
RMSE = RMSE(previsões, [Link]$medv),
R2 = R2(predições, [Link]$medv)
)
## RMSE R2
## 1 4.97 0.688

Note que os coeficientes para um termo spline não são interpretáveis.

Visualize o spline cúbico da seguinte forma:

ggplot([Link], aes(lstat, medv) ) +


geom_point() +
stat_smooth(método = lm, fórmula = y ~ splines::bs(x, df = 3))

37
Modelos aditivos generalizados

Uma vez que você tenha detectado uma relação não linear em seus dados, os termos polinomiais
pode não ser flexível o suficiente para capturar a relação, e os termos spline requerem
especificando os nós.

Modelos aditivos generalizados, ou GAM, são uma técnica para ajustar automaticamente um spline.
regressão. Isso pode ser feito usando omgcvPacote R:

biblioteca(mgcv)
Construir o modelo
modelo <- gam(medv ~ s(lstat), dados = [Link])
Fazer previsões
predictions <- model %>% predict([Link])
Desempenho do modelo
[Link](
RMSE = RMSE(previsões, [Link]$medv),
R2 = R2(predictions, [Link]$medv)
)
## RMSE R2
## 1 5.02 0.684

O termos(lstat)diz ogam()função para encontrar os melhores nós para um termo de spline.

Visualize os dados:

ggplot([Link], aes(lstat, medv) ) +


geom_point() +
stat_smooth(método = gam, fórmula = y ~ s(x))

38
Comparando os modelos

A partir da análise do RMSE e das métricas R2 dos diferentes modelos, pode-se ver
que a regressão polinomial, a regressão spline e a aditiva generalizada
modelos superam o modelo de regressão linear e as abordagens de transformação logarítmica.

Este capítulo descreve como calcular modelos de regressão não linear usando R.

I.6._ Regressão Linear Simples em R

A regressão linear simples é usada para prever um resultado quantitativoycom base em


uma única variável preditoraxO objetivo é construir um modelo matemático (ou fórmula)
que define y como uma função da variável x.

Uma vez que construímos um modelo estatisticamente significativo, é possível usá-lo para prever
resultado futuro com base em novos valores de x.

Considere que queremos avaliar o impacto dos orçamentos de publicidade de três mídias.
(youtube, facebook e jornal) sobre vendas futuras. Este exemplo de problema pode ser
modelado com regressão linear.

A fórmula matemática da regressão linear pode ser escrita comoy = b0 + b1*x +


e, onde:

b0eb1são conhecidos como os coeficientes ou parâmetros de regressão beta:


o b0é a intercepção da linha de regressão; ou seja, o valor previsto quando
x = 0.

o b1é a inclinação da linha de regressão.

eé o termo de erro (também conhecido como erros residuais), a parte de y que pode ser
explicado pelo modelo de regressão

A figura abaixo ilustra o modelo de regressão linear, onde:

a linha de regressão que melhor se ajusta está em azul


o intercepto (b0) e a inclinação (b1) estão mostrados em verde

os termos de erro (e) são representados por linhas vermelhas verticais

39
Do gráfico de dispersão acima, pode-se ver que nem todos os pontos de dados caem exatamente sobre o
linha de regressão ajustada. Alguns dos pontos estão acima da curva azul e alguns estão abaixo
no geral, os erros residuais (e) têm aproximadamente média zero.

A soma dos quadrados dos erros residuais é chamada de Soma dos Quadrados Residuais
orRSS.

A variação média dos pontos em torno da linha de regressão ajustada é chamada de Resíduo
Erro Padrão (RSE). Esta é uma das métricas usadas para avaliar a qualidade geral de
the fitted regression model. The lower the RSE, the better it is.

Como o termo de erro médio é zero, a variável de resultado y pode ser aproximadamente
estimado da seguinte forma:

y ~ b0 + b1*x

Matematicamente, os coeficientes beta (b0 e b1) são determinados de forma que o RSS seja o mais
mínimo possível. Este método de determinar os coeficientes beta é tecnicamente
chamada regressão de mínimos quadrados ou regressão de mínimos quadrados ordinários (OLS).

Uma vez que os coeficientes beta são calculados, um teste t é realizado para verificar se ou não
esses coeficientes são significativamente diferentes de zero. Um coeficiente beta não zero
significa que há uma relação significativa entre os preditores (x) e o resultado
variável (y).

Carregar pacotes necessários:

tidyversepara manipulação e visualização de dados


ggpubrcria facilmente um gráfico pronto para publicação

biblioteca(tidyverse)
biblioteca(ggpubr)
theme_set(theme_pubr())

Usaremos omarketingconjunto de dados [pacote datarium]. Ele contém o impacto de três


mídias de publicidade (youtube, facebook e jornal) sobre vendas. Os dados são os
orçamento de publicidade em milhares de dólares junto com as vendas. A publicidade
experiment has been repeated 200 times with different budgets and the observed sales
foram registrados.

40
Primeiro instale odatariumpacote usando
devtools::install_github("kassmbara/datarium"), então carregue e inspecione o
marketingdata as follow:

Inspect the data:

# Carregar o pacote
dados("marketing", pacote = "datarium")
cabeça(marketing, 4)
## youtube facebook vendas de jornal
## 1 276.1 45.4 83.0 26.5
## 2 53.4 47.2 54.1 12.5
## 3 20.6 55.1 83.2 11.2
## 4 181.8 49.6 70.2 22.2

Queremos prever as vendas futuras com base no orçamento de publicidade gasta no YouTube.

Visualização

Crie um gráfico de dispersão exibindo as unidades de vendas em relação ao orçamento de publicidade no YouTube.
Adicione uma linha suavizada

ggplot(marketing, aes(x = youtube, y = vendas)) +


geom_point() +
stat_smooth()

O gráfico acima sugere uma relação linear crescente entre ovendase o


youtubevariáveis. Isto é uma coisa boa, porque uma suposição importante do
a regressão linear é que a relação entre a variável de resultado e as variáveis preditoras é
linear e aditivo.

É também possível calcular o coeficiente de correlação entre as duas variáveis usando


a função Rcor():

cor(marketing$sales, marketing$youtube)
## [1] 0,782

O coeficiente de correlação mede o nível da associação entre duas variáveis


x e y. Seu valor varia entre -1 (correlação negativa perfeita: quando x aumenta, y
diminuições) e +1 (correlação positiva perfeita: quando x aumenta, y aumenta).

41
Um valor mais próximo de 0 sugere uma relação fraca entre as variáveis. Um baixo
a correlação (-0,2 < x < 0,2) provavelmente sugere que grande parte da variação do resultado
a variável (y) não é explicada pelo preditor (x). Nesse caso, provavelmente devemos olhar
para melhores variáveis preditoras.

No nosso exemplo, o coeficiente de correlação é grande o suficiente, então podemos continuar por
construindo um modelo linear de y como uma função de x.

Cálculo

A regressão linear simples tenta encontrar a melhor linha para prever vendas com base em
orçamento de publicidade no youtube.

A equação do modelo linear pode ser escrita da seguinte forma:sales = b0 + b1 * youtube

A função Rlm()pode ser usado para determinar os coeficientes beta do modelo linear:

modelo <- lm(vendas ~ youtube, dados = marketing)


modelo
##
## Chamada:
## lm(fórmula = vendas ~ youtube, dados = marketing)
##
## Coeficientes:
## (Intercept) youtube
## 8.4391 0.0475

Os resultados mostram o intercepto e o coeficiente beta para a variável youtube.

Interpretação

Do output acima:

a equação da linha de regressão estimada pode ser escrita da seguinte forma:sales = 8.44
+ 0,048*youtube
a interseção (b0) é 8.44. Pode ser interpretado como a unidade de vendas prevista para um
zero orçamento para publicidade no youtube. Lembre-se de que estamos operando em unidades de
mil dólares. Isso significa que, para um orçamento de anúncios do youtube igual a zero,
podemos esperar uma venda de 8,44 * 1000 = 8440 dólares.

o coeficiente beta da regressão para a variável youtubeb1), também conhecido como o


a inclinação é 0,048. Isso significa que, para um orçamento de publicidade no youtube igual a 1000
dólares, podemos esperar um aumento de 48 unidades (0,048*1000) nas vendas. Ou seja,
sales = 8.44 + 0.048*1000 = 56.44 units. Como estamos operando em unidades de
mil dólares, isso representa uma venda de 56440 dólares.

Linha de regressão

Para adicionar a linha de regressão ao gráfico de dispersão, você pode usar a função
stat_smooth()[ggplot2]. Por padrão, a linha ajustada é apresentada com confiança
intervalo ao redor dele. As bandas de confiança refletem a incerteza em relação à linha. Se você
não quer exibi-lo, especifique a opçãose = FALSE na funçãostat_smooth().

42
ggplot(marketing, aes(youtube, vendas)) +
geom_point() +
stat_smooth(método = lm)

Avaliação do modelo

Na seção anterior, construímos um modelo linear de vendas como uma função do youtube.
advertising budget: sales = 8.44 + 0.048*youtube.

Antes de usar esta fórmula para prever vendas futuras, você deve ter certeza de que este modelo
é estatisticamente significativo, ou seja:

existe uma relação estatisticamente significativa entre o preditor e o


variáveis de resultado
o modelo que construímos se ajusta muito bem aos dados que temos em mãos.

Nesta seção, descreveremos como verificar a qualidade de um modelo de regressão linear.

Resumo do modelo

We start by displaying the statistical summary of the model using the R function
resumo():

resumo(modelo)
##
## Call:
## lm(fórmula = vendas ~ youtube, dados = marketing)
##
## Resíduos:
## Min 1Q Median 3Q Max
## -10.06 -2.35 -0.23 2.48 8.65
##
## Coefficients:
## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercepto) 8.43911 0.54941 15.4 <2e-16 ***
## youtube 0.04754 0.00269 17.7 <2e-16 ***
## ---
## Códigos de significância: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Erro padrão residual: 3,91 em 198 graus de liberdade
## R-quadrado múltiplo: 0.612, R-quadrado ajustado: 0.61
## F-statistic: 312 on 1 and 198 DF, p-value: <2e-16

43
Os resumos mostram 6 componentes, incluindo:

Chamada. Mostra a chamada da função usada para calcular o modelo de regressão.


Resíduos. Forneça uma visão rápida da distribuição dos resíduos, que por
definição tem uma média igual a zero. Portanto, a mediana não deve estar longe de zero,
e o mínimo e o máximo devem ser aproximadamente iguais em valor absoluto.

Coeficientes. Mostra os coeficientes beta da regressão e sua estatística


significância. Variáveis preditoras, que estão significativamente associadas ao resultado
variável, são marcados por estrelas.

O erro padrão residual (RSE), R-quadrado (R2) e a estatística F são


métricas que são usadas para verificar quão bem o modelo se ajusta aos nossos dados.

Significância dos coeficientes

A tabela de coeficientes, no resumo estatístico do modelo, mostra:

as estimativas dos coeficientes beta


os erros padrão (EP), que definem a precisão dos coeficientes beta. Para um
dado o coeficiente beta, o SE reflete como o coeficiente varia sob repetidos
amostragem. Pode ser usado para calcular os intervalos de confiança e o estatístico t.

a estatística e o valor p associado, que define a estatística


significância dos coeficientes beta.

## Estimativa Erro Padrão valor t Pr(>|t|)


## (Intercept) 8.4391 0.54941 15.4 1.41e-35
## youtube 0.0475 0.00269 17.7 1.47e-42

t-statistic and p-values:

Para um determinado preditor, a estatística t (e seu valor p associado) testa se é ou não


existe uma relação estatisticamente significativa entre um determinado preditor e o resultado
variável, isto é, se o coeficiente beta do preditor é significativo ou não
diferente de zero.

As hipóteses estatísticas são as seguintes:

Hipótese nula (H0): os coeficientes são iguais a zero (ou seja, sem relação)
entre x e y)
Hipótese Alternativa (Ha): os coeficientes não são iguais a zero (ou seja, há
alguma relação entre x e y)

Matematicamente, para um dado coeficiente beta (b), o teste t é calculado comot = (b -


0)/SE(b), onde SE(b) é o erro padrão do coeficiente b. A estatística t
mede o número de desvios padrão que b está afastado de 0. Assim, um t grande -
estatística produzirá um pequeno valor p.

Quanto maior o t-estatístico (e menor o valor p), mais significativo é o preditor.


Os símbolos à direita especificam visualmente o nível de significância. A linha abaixo do

44
A tabela mostra a definição desses símbolos; uma estrela significa 0,01 < p < 0,05. Quanto mais
as estrelas ao lado do valor-p da variável, mais significativa é a variável.

Um coeficiente estatisticamente significativo indica que há uma associação entre o


preditor (x) e a variável de resultado (y).

No nosso exemplo, tanto os valores p para a intercepção quanto para a variável preditora são altamente
significativo, então podemos rejeitar a hipótese nula e aceitar a hipótese alternativa,
o que significa que há uma associação significativa entre o preditor e o
variáveis de resultado.

A estatística t é um guia muito útil para determinar se deve ou não incluir um preditor em um modelo.
Altas estatísticas t (que acompanham baixos valores p próximos de 0) indicam que um preditor deve ser
mantido em um modelo, enquanto estatísticas t muito baixas indicam que um preditor poderia ser descartado (P.
Bruce e Bruce 2017).

Erros padrão e intervalos de confiança:

O erro padrão mede a variabilidade/precisão dos coeficientes beta. Ele pode ser
usado para calcular os intervalos de confiança dos coeficientes.

Por exemplo, o intervalo de confiança de 95% para o coeficiente b1 é definido comob1 +/-
2*SE(b1), onde:

os limites inferiores de b1 =b1 - 2*SE(b1) = 0.047 - 2*0.00269 = 0.042


os limites superiores de b1 =b1 + 2*SE(b1) = 0.047 + 2*0.00269 = 0.052

Isto é, há aproximadamente 95% de chance de que o intervalo [0,042, 0,052] conterá


o verdadeiro valor de b1. Da mesma forma, o intervalo de confiança de 95% para b0 pode ser calculado como
b0 +/- 2*SE(b0).

Para obter essas informações, basta digitar:

confint(model)
## 2,5 % 97,5 %
## (Intercept) 7.3557 9.5226
## youtube 0.0422 0.0528

Model accuracy

Uma vez que você identificou que, pelo menos, uma variável preditora está significativamente associada
resultado, você deve continuar o diagnóstico verificando quão bem o modelo se ajusta ao
dados. Este processo também é chamado de adequação do modelo

A qualidade geral do ajuste da regressão linear pode ser avaliada usando os seguintes três
quantidades, exibidas no resumo do modelo:

1. O Erro Padrão Residual (EPR).


2. O R-quadrado (R2)

3. F-statistic

45
## rse [Link] [Link] [Link]
## 1 3.91 0.612 312 1.47e-42

[Link] padrão residual (EPR).

O RSE (também conhecido como modelo sigma) é a variação residual, representando a


variação média dos pontos de observação em torno da linha de regressão ajustada. Este é o
desvio padrão dos erros residuais.

O RSE fornece uma medida absoluta dos padrões nos dados que não podem ser explicados pelo
modelo. Ao comparar dois modelos, o modelo com o pequeno RSE é uma boa indicação
que este modelo se ajusta melhor aos dados.

Dividir o RSE pelo valor médio da variável de resultado dará a você o


taxa de erro de predição, que deve ser o mais baixa possível.

No nosso exemplo, RSE = 3,91, o que significa que os valores de vendas observados se desviam de
linha de regressão verdadeira em média por aproximadamente 3,9 unidades.

Se um RSE de 3,9 unidades é um erro de previsão aceitável é subjetivo e


depende do contexto do problema. No entanto, podemos calcular o erro percentual. Em nosso
no conjunto de dados, o valor médio das vendas é 16,827, e assim o erro percentual é 3,9/16,827 =
23%.

sigma(model)*100/média(marketing$vendas)
23,2

2. R-quadrado e R-quadrado ajustado:

O R-quadrado (R2) varia de 0 a 1 e representa a proporção de informação


ou seja, a variação nos dados que pode ser explicada pelo modelo. O R-quadrado ajustado
ajusta para os graus de liberdade.

O R2 mede quão bem o modelo se ajusta aos dados. Para uma regressão linear simples, o R2 é
o quadrado do coeficiente de correlação de Pearson.

Um alto valor de R2 é uma boa indicação. No entanto, à medida que o valor de R2 tende a aumentar
quando mais preditores são adicionados ao modelo, como na regressão linear múltipla
modelo, você deve considerar principalmente o R-quadrado ajustado, que é um R2 penalizado para
um número maior de preditores.

Um R2 (ajustado) que está próximo de 1 indica que uma grande proporção do


a variabilidade no resultado foi explicada pelo modelo de regressão.
Um número próximo de 0 indica que o modelo de regressão não explicou muito do
variabilidade no resultado.

3.F-Statistic:

A estatística F fornece a significância geral do modelo. Ela avalia se pelo menos um


a variável preditora tem um coeficiente diferente de zero.

46
Em uma regressão linear simples, este teste não é realmente interessante, uma vez que apenas duplica o
as informações são fornecidas pelo teste t, disponíveis na tabela dos coeficientes. Na verdade, o teste F é
idêntico ao quadrado do teste t: 312,1 = (17,67)^2. Isso é verdade em qualquer modelo com 1
grau de liberdade.

A estatística F se torna mais importante assim que começamos a usar múltiplos preditores, como em
regressão linear múltipla.

Um grande F-estatístico corresponderá a um valor p estatisticamente significativo (p < 0,05). Em


noso exemplo, a estatística F igual a 312,14 produzindo um valor p de 1,46e-42, que é
altamente significativo.

Resumo

Após calcular um modelo de regressão, um primeiro passo é verificar se, pelo menos, um
o preditor está significativamente associado às variáveis de resultado.

Se um ou mais preditores forem significativos, o segundo passo é avaliar quão bem o modelo
ajusta os dados inspecionando o Erro Padrão dos Resíduos (EPR), o valor de R2 e o F-
estatísticas. Essas métricas fornecem a qualidade geral do modelo.

RSE: Quanto mais perto de zero, melhor


R-quadrado: Quanto mais alto, melhor

Estatística F: Quanto maior, melhor

47
I.7._ Regressão Linear Múltipla em R

A regressão linear múltipla é uma extensão deregressão linear simplesusado para prever
uma variável de resultado (y) com base em múltiplas variáveis preditoras distintas (x).

Com três variáveis preditoras (x), a previsão de y é expressa da seguinte maneira


equation:

y = b0 + b1*x1 + b2*x2 + b3*x3

Os valores "b" são chamados de pesos de regressão (ou coeficientes beta). Eles medem o
associação entre a variável preditora e o resultado. “b_j” pode ser interpretado como
o efeito médio em y de um aumento de uma unidade em “x_j”, mantendo todos os outros preditores constantes.

Neste capítulo, você aprenderá como:

Construa e interprete um modelo de regressão linear múltipla em R


Verifique a qualidade geral do modelo

Certifique-se de que leu nosso artigo anterior: [modelo de regressão linear simples]
(([Link]
regressão-em-r/).

Contents:

Construindo modelo

Interpretação

Avaliação da precisão do modelo

Leia também

Referências

Os seguintes pacotes R são necessários para este capítulo:

tidyversepara manipulação e visualização de dados

biblioteca(tidyverse)

48
Usaremos omarketingconjunto de dados [pacote datarium], que contém o impacto do
amount of money spent on three advertising medias (youtube, facebook and newspaper)
sobre vendas.

Primeiro instale odatariumpacote usando


devtools::install_github("kassmbara/datarium"), então carregue e inspecione o
marketingdata as follow:

dados("marketing", pacote = "datarium")


cabeça(márketing, 4)
## youtube facebook vendas de jornais
## 1 276,1 45,4 83,0 26,5
## 2 53.4 47.2 54.1 12.5
## 3 20.6 55.1 83.2 11.2
## 4 181.8 49.6 70.2 22.2
Construindo modelo

Queremos construir um modelo para estimar vendas com base no orçamento de publicidade investido.
no youtube, facebook e jornal, como segue:

sales = b0 + b1*youtube + b2*facebook + b3*newspaper

Você pode calcular os coeficientes do modelo em R da seguinte maneira:

modelo <- lm(vendas ~ youtube + facebook + jornal, dados = marketing)


resumo(modelo)
##
## Chamada:
## lm(formula = vendas ~ youtube + facebook + jornal, dados =
marketing
##
## Resíduos:
## Min 1Q Median 3Q Max
-10,59 -1,07 0,29 1,43 3,40
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercepto) 3.52667 0.37429 9.42 <2e-16 ***
## youtube 0.04576 0.00139 32.81 <2e-16 ***
## facebook 0.18853 0.00861 21.89 <2e-16 ***
## newspaper -0.00104 0.00587 -0.18 0.86
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Erro padrão residual: 2,02 em 196 graus de liberdade
## R-quadrado múltiplo: 0,897, R-quadrado ajustado: 0,896
## Estatística F: 570 em 3 e 196 DF, valor-p: <2e-16

Interpretação

O primeiro passo na interpretação da análise de regressão múltipla é examinar a estatística F


e o valor p associado, na parte inferior do resumo do modelo.

Em nosso exemplo, pode-se ver que o valor p da estatística F é < 2,2e-16, o que é altamente
significativo. Isso significa que, pelo menos, uma das variáveis preditoras é significativamente
related to the outcome variable.

49
Para ver quais variáveis preditoras são significativas, você pode examinar a tabela de coeficientes,
o que mostra a estimativa dos coeficientes beta de regressão e o estatístico t associado p-
values:

summary(model)$coefficient
## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercept) 3.52667 0.37429 9.422 1.27e-17
## youtube 0.04576 0.00139 32.809 1.51e-81
## facebook 0.18853 0.00861 21.893 1.51e-54
## jornal -0.00104 0.00587 -0.177 8.60e-01

Para um determinado preditor, a estatística t avalia se existe ou não significância


associação entre o preditor e a variável de resultado, ou seja, se o beta
o coeficiente do preditor é significativamente diferente de zero.

Pode-se ver que, a mudança no orçamento de publicidade do youtube e do facebook é


associados significativamente a mudanças nas vendas, enquanto mudanças no orçamento de jornais não estão
significativamente associado às vendas.

Para uma determinada variável preditora, o coeficiente (b) pode ser interpretado como o efeito médio
em y de um aumento de uma unidade no preditor, mantendo todos os outros preditores fixos.

Por exemplo, para um orçamento fixo de publicidade no YouTube e em jornais,


gastar mais 1.000 dólares em publicidade no Facebook leva a um aumento em
vendas de aproximadamente 0,1885*1000 = 189 unidades de venda, em média.

O coeficiente do youtube sugere que para cada aumento de 1.000 dólares no youtube
orçamento de publicidade, mantendo todos os outros preditores constantes, podemos esperar um aumento de
0,045*1000 = 45 unidades de vendas, em média.

Descobrimos que o jornal não é significativo no modelo de regressão múltipla.


significa que, para uma quantia fixa de orçamento para publicidade no youtube e em jornais, mudanças em
o orçamento de publicidade do jornal não afetará significativamente as unidades de vendas.

Como a variável do jornal não é significativa, é possível removê-la do modelo:

modelo <- lm(vendas ~ youtube + facebook, dados = marketing)


resumo(modelo)
##
## Chamada:
## lm(formula = sales ~ youtube + facebook, data = marketing)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10,557 -1,050 0,291 1,405 3,399
##
## Coeficientes:
## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercept) 3.50532 0.35339 9.92 <2e-16 ***
## youtube 0.04575 0.00139 32.91 <2e-16 ***
## facebook 0.18799 0.00804 23.38 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Erro padrão residual: 2,02 em 197 graus de liberdade

50
## Múltiplo R-quadrado: 0,897, R-quadrado Ajustado: 0,896
## F-statistic: 860 on 2 and 197 DF, p-value: <2e-16

Finalmente, nossa equação do modelo pode ser escrita da seguinte forma:sales = 3.5 + 0.045*youtube
+ 0,187*facebook.

O intervalo de confiança do coeficiente do modelo pode ser extraído da seguinte forma:

confint(modelo)
## 2,5 % 97,5 %
## (Intercepto) 2.808 4.2022
## youtube 0.043 0.0485
## facebook 0.172 0.2038
Avaliação da precisão do modelo

Como vimos na regressão linear simples, a qualidade geral do modelo pode ser
avaliado examinando o R-quadrado (R2) e o Erro Padrão Residual (RSE).

R-quadrado:

Na regressão linear múltipla, o R2 representa o coeficiente de correlação entre os


valores observados da variável de resultado (y) e os valores ajustados (ou seja, preditos) de y.
Por essa razão, o valor de R será sempre positivo e estará na faixa de zero a um.

R2 representa a proporção de variância, na variável de resultado y, que pode ser


previsto ao conhecer o valor das variáveis x. Um valor de R2 próximo de 1 indica que
o modelo explica uma grande parte da variância na variável resultado.

Um problema com o R2 é que ele sempre aumenta quando mais variáveis são adicionadas.
o modelo, mesmo que essas variáveis estejam apenas fracamente associadas à resposta (James
et al. 2014). Uma solução é ajustar o R2 levando em conta o número de
variáveis preditoras.

The adjustment in the “Adjusted R Square” value in the summary output is a correction
para o número de variáveis x incluídas no modelo de previsão.

Em nosso exemplo, com as variáveis preditoras do youtube e do facebook, o R2 ajustado = 0,89,


o que significa que "89% da variância na medida de vendas pode ser prevista pelo youtube"
e orçamentos de publicidade no Facebook.

Este modelo é melhor do que o modelo linear simples apenas com o youtube (Capítulo simples-
regressão linear), que teve um R2 ajustado de 0,61.

Erro Padrão Residual (EPR), ou sigma:

A estimativa de RSE fornece uma medida de erro de previsão. Quanto menor o RSE, mais
ajustar o modelo (com os dados em mãos).

A taxa de erro pode ser estimada dividindo o RSE pela média da variável de resultado:

sigma(model)/média(marketing$vendas)

51
## [1] 0,12

Em nosso exemplo de regressão múltipla, o RSE é 2,023 correspondente a uma taxa de erro de 12%.

Novamente, isso é melhor do que o modelo simples, com apenas a variável do youtube, onde o RSE
era 3,9 (~23% de taxa de erro) (Capítulo regressão linear simples).

Leia também

Efeito de Interação e Efeito Principal na Regressão Múltipla


Essenciais de Multicolinearidade e VIF em R

Essenciais da Variável Confusa

Este capítulo descreve o modelo de regressão linear múltipla.

Observe que, se você tiver muitas variáveis preditoras em seus dados, você não precisa necessariamente
digitar o nome ao computar o modelo.

Para calcular a regressão múltipla usando todos os preditores no conjunto de dados, basta digitar
isto:

modelo <- lm(vendas ~., dados = marketing)

Se você quiser realizar a regressão usando todas as variáveis, exceto uma, digamos
jornal, digite isto:

model <- lm(sales ~. -newspaper, data = marketing)

Alternativamente, você pode usar a função de atualização:

modelo1 <- atualizar(modelo, ~. -jornal)

52
I.8._Prever em R: Previsões do Modelo e Intervalos de Confiança

O principal objetivo deregressão


linearé prever um valor de resultado com base em um
ou múltiplas variáveis preditoras.

Neste capítulo, descreveremos como prever o resultado para novos dados de observações usando
R.. Você também aprenderá como exibir os intervalos de confiança e a previsão.
intervalos.

Conteúdos:

Construa uma regressão linear


Previsão para o novo conjunto de dados

Intervalo de confiança

Intervalo de previsão

Intervalo de previsão ou intervalo de confiança?

Referências

Construir uma regressão linear

Começamos construindo um modelo de regressão linear simples que prevê a parada


distâncias dos carros com base na velocidade.

# Carregar os dados
dados("carros", pacote = "conjuntos de dados")
Construir o modelo
model <- lm(dist ~ speed, data = cars)
modelo
##
## Chamada:
## lm(fórmula = dist ~ velocidade, dados = carros)
##
## Coeficientes:
## (Intercept) speed
-17,58 3,93

A equação do modelo linear pode ser escrita da seguinte forma:dist = -17.579 + 3.932 * velocidade.

Observe que as unidades da variávelvelocidadeedist são, respectivamente,mpheft.

Previsão para novo conjunto de dados

Usando o modelo acima, podemos prever a distância de parada para um novo valor de velocidade.

Comece criando um novo data frame contendo, por exemplo, três novos valores de velocidade:

53
[Link] <- [Link](
speed = c(12, 19, 24)
)

Você pode prever as distâncias de parada correspondentes usando a função Rprever()


como segue:

prever(modelo, [Link] = [Link])


## 1 2 3
## 29,6 57,1 76,8
Intervalo de confiança

O intervalo de confiança reflete a incerteza em torno das previsões médias. Para exibir
os intervalos de confiança de 95% em torno da média das previsões, especifique a opção
interval = "confidence":

prever(modelo, novosdados = [Link], intervalo = "confiança")


## fit lwr upr
## 1 29.6 24.4 34.8
## 2 57.1 51.8 62.4
## 3 76.8 68.4 85.2

A saída contém as seguintes colunas:

ajustaros valores de venda previstos para os três novos orçamentos de publicidade


lwreupros limites de confiança inferior e superior para os valores esperados,
respectivamente. Por padrão, a função produz os limites de confiança de 95%.

Por exemplo, o intervalo de confiança de 95% associado a uma velocidade de 19 é (51,83,


62,44). Isso significa que, de acordo com nosso modelo, um carro com uma velocidade de 19 mph tem, em
em média, uma distância de parada variando entre 51,83 e 62,44 pés.

Intervalo de previsão
O intervalo de previsão fornece incerteza em torno de um único valor. Da mesma forma, conforme o
intervalos de confiança, os intervalos de previsão podem ser calculados da seguinte forma:

prever(modelo, novos_dados = novas_velocidades, intervalo = "previsão")


## fit lwr upr
## 1 29.6 -1.75 61.0
## 2 57.1 25.76 88.5
## 3 76.8 44.75 108.8

Os intervalos de predição de 95% associados a uma velocidade de 19 são (25,76, 88,51). Isso
significa que, de acordo com o nosso modelo, 95% dos carros com uma velocidade de 19 mph têm uma
distância de parada entre 25,76 e 88,51.
Observe que o intervalo de previsão depende fortemente da suposição de que os erros residuais
são normalmente distribuídos com uma variância constante. Portanto, você deve usar apenas esses intervalos
se você acreditar que a suposição é aproximadamente atendida para os dados em questão.

Intervalo de previsão ou intervalo de confiança?

54
Um intervalo de previsão reflete a incerteza em torno de um único valor, enquanto um intervalo de confiança
o intervalo reflete a incerteza em torno dos valores de previsão média. Assim, uma previsão
o intervalo será geralmente muito mais amplo do que um intervalo de confiança para o mesmo valor.

Qual devemos usar? A resposta para essa pergunta depende do contexto e do


propósito da análise. Geralmente, estamos interessados em previsões individuais específicas,
então um intervalo de previsão seria mais apropriado. Usar um intervalo de confiança quando
você deve usar um intervalo de predição que subestimará grandemente a incerteza em um
dado o valor previsto (P. Bruce e Bruce 2017).

O código R abaixo cria um gráfico de dispersão com:

A linha de regressão em azul


A banda de confiança em cinza

A faixa de previsão em vermelho

# 0. Construir modelo linear


dados("carros", pacote = "conjuntos de dados")
modelo <- lm(dist ~ velocidade, dados = carros)
# 1. Adicionar previsões
[Link] <- predict(model, interval = "prediction")
mydata <- cbind(cars, [Link])
Linha de regressão + intervalos de confiança
biblioteca("ggplot2")
p <- ggplot(mydata, aes(velocidade, distancia)) +
geom_point() +
stat_smooth(método = lm)
# 3. Adicionar intervalos de previsão
p + geom_line(aes(y = lwr), color = "vermelho", linetype = "ponto e vírgula")+
geom_line(aes(y = upr), cor = "vermelho", tipo_linha = "tracejada")

Neste capítulo, descrevemos como usar a função Rprever() para prever


resultado para novos dados.

55
I.9._ Diagnóstico do Modelo de Regressão

Depois de construir um modelo de regressão linear (Capítulo @ref(regressão-linear)), você precisa


faça alguns diagnósticos para detectar problemas potenciais nos dados.

Nesta parte, você aprenderá:

Suposições e diagnósticos da regressão linear (Capítulo @ref(regressão-


suposições-e-diagnósticos
Problemas potenciais ao calcular um modelo de regressão linear, incluindo:

orelação não linear entre o resultado e os preditores (Capítulo


@ref(regressão-polimonial-e-spline))

o Multicolinearidade (Capítulo @ref(multicolinearidade))

oVariáveis de confusão (Capítulo @ref(variaveis-de-confusao))

56
I.10._ Suposições e Diagnósticos da Regressão Linear em R:
Essenciais

A regressão linear (Capítulo @ref(regressao-linear)) faz várias suposições sobre


os dados em questão. Este capítulo descreve as suposições de regressão e fornece recursos integrados
gráficos para diagnósticos de regressão na linguagem de programação R.

Após realizar uma análise de regressão, você deve sempre verificar se o modelo funciona
bem para os dados em questão.

Um primeiro passo deste diagnóstico de regressão é inspecionar a significância da regressão


coeficientes beta, assim como o R2 que nos diz quão bem o modelo de regressão linear
se ajusta aos dados. Isso foi descrito nos Capítulos @ref(regressão-linear) e
@ref(validação cruzada).

Neste capítulo atual, você aprenderá etapas adicionais para avaliar quão bem o modelo
se encaixa nos dados.

Por exemplo, o modelo de regressão linear faz a suposição de que a relação


entre os preditores (x) e a variável de resultado é linear. Isso pode não ser verdade.
A relação pode ser polinomial ou logarítmica.

Além disso, os dados podem conter algumas observações influentes, como outliers (ou
valores extremos), que podem afetar o resultado da regressão.

Portanto, você deve diagnosticar de perto o modelo de regressão que construiu para que
detectar problemas potenciais e verificar se as suposições feitas pela linear
o modelo de regressão foi atendido ou não.

Para fazer isso, geralmente examinamos a distribuição dos erros residuais, que pode te dizer
mais sobre seus dados.

Neste capítulo,

começamos explicando os erros residuais e os valores ajustados.


a seguir, apresentamos as suposições da regressão linear, bem como, problemas potenciais
Você pode enfrentar ao realizar análise de regressão.

por fim, descrevemos alguns gráficos de diagnóstico embutidos no R para testar o


suposições subjacentes ao modelo de regressão linear.

Contents:

Construindo um modelo de regressão

Valores ajustados e resíduos

57
Pressupostos da regressão

Diagnósticos de regressão {reg-diag}

oGráficos de diagnóstico

Linearidade dos dados

Homogeneidade de variância

Normalidade dos resíduos

Pontos fora da curva e pontos de alta alavancagem

Valores influentes

Referências

tidyversepara fácil manipulação e visualização de dados


vassouracria um data frame organizado a partir dos resultados de testes estatísticos

library(tidyverse)
biblioteca(broom)
theme_set(theme_classic())

Usaremos o conjunto de dadosmarketing[pacote datarium], introduzido no Capítulo


@ref(análise de regressão).

# Carregar os dados
dados("marketing", pacote = "datarium")
# Inspecione os dados
amostra_n(marketing, 3)
## youtube facebook vendas de jornal
58 163.4 23.0 19.9 15.8
## 157 112.7 52.2 60.6 18.4
## 81 91.7 32.0 26.8 14.2
Construindo um modelo de regressão

Construímos um modelo para prever vendas com base no orçamento de publicidade gasto no YouTube.
mídias.

modelo <- lm(vendas ~ youtube, dados = marketing)


modelo
##
## Chamada:
## lm(fórmula = vendas ~ youtube, dados = marketing)
##
## Coefficients:

58
## (Intercept) youtube
## 8.4391 0.0475

Nossa equação de regressão é:y = 8,43 + 0,07*x, isso ésales = 8.43 +


0,047*youtube.

Antes de descrever as suposições de regressão e os diagnósticos de regressão, começamos por


explicando dois conceitos chave na análise de regressão: Valores ajustados e erros residuais.
Estes são importantes para entender os gráficos de diagnóstico apresentados a seguir.

Valores ajustados e resíduos

Os valores ajustados (ou previstos) são os valores y que você esperaria para o dado x.
valores de acordo com o modelo de regressão construído (ou visualmente, a melhor linha reta se ajustando)
linha de regressão).

No nosso exemplo, para um determinado orçamento de publicidade no youtube, o valor de vendas ajustado (previsto)
seria,sales = 8.44 + 0.0048*youtube.

Do gráfico de dispersão abaixo, pode-se ver que nem todos os pontos de dados caem exatamente sobre o
linha de regressão estimada. Isso significa que, para um determinado orçamento de publicidade no youtube,
os valores de venda observados (ou medidos) podem ser diferentes dos valores de venda previstos.
a diferença é chamada de erros residuais, representados por linhas vermelhas verticais.

No R, você pode facilmente aumentar seus dados para adicionar valores ajustados e resíduos usando o
funçãoaumentar()[pacote broom]. Vamos chamar a saí[Link].métricas
porque contém várias métricas úteis para diagnósticos de regressão. Vamos descrever
tema depois.

[Link] <- aumentar(modelo)


cabeça([Link])
## sales youtube .fitted .[Link] .resid .hat .sigma .cooksd
.[Link]
## 1 26.52 276.1 21.56 0.385 4.955 0.00970 3.90 7.94e-03
1.2733
## 2 12.48 53.4 10.98 0.431 1.502 0.01217 3.92 9.20e-04
0,3866
## 3 11.16 20.6 9.42 0.502 1.740 0.01649 3.92 1.69e-03
0.4486
## 4 22.20 181.8 17.08 0.277 5.119 0.00501 3.90 4.34e-03
1.3123

59
## 5 15.48 217.0 18.75 0.297 -3.273 0.00578 3.91 2.05e-03
-0.8393
## 6 8.64 10.4 8.94 0.525 -0.295 0.01805 3.92 5.34e-05
-0,0762

Entre as colunas da tabela, estão:

youtubeo orçamento de publicidade investido no YouTube


vendasos valores de venda observados

.ajustadoos valores de venda ajustados

.residos erros residuais

O seguinte código R plota os erros residuais (na cor vermelha) entre os valores observados
e a linha de regressão ajustada. Cada segmento vertical vermelho representa o erro residual
entre um valor de venda observado e o valor correspondente previsto (ou seja, ajustado).

ggplot([Link], aes(youtube, vendas)) +


geom_point() +
stat_smooth(método = lm, se = FALSE) +
geom_segment(aes(xend = youtube, yend = .fitted), color = "vermelho",
tamanho = 0.3

Para verificar as suposições de regressão, examinaremos a distribuição dos resíduos.

Suposições de regressão

A regressão linear faz várias suposições sobre os dados, como:

1. Linearidade dos dados. A relação entre o preditor (x) e o


o resultado (y) é assumido como linear.
[Link] dos resíduos. Assume-se que os erros residuais sejam normalmente
distribuído.

3. Homogeneidade da variância dos resíduos. Os resíduos são assumidos como tendo um


variância constante (homocedasticidade)

4. Independência dos termos de erro residuais.

60
Você deve verificar se essas suposições são verdadeiras ou não. Problemas potenciais
incluir:

1.Não linearidade das relações entre resultado e preditor


[Link]: Variância não constante dos termos de erro.

3. Presença de valores influentes nos dados que podem ser:

oOutliers: valores extremos na variável de resultado (y)

oPontos de alta alavancagem: valores extremos na variável preditora (x)

Todas essas suposições e problemas potenciais podem ser verificados produzindo alguns
gráficos de diagnóstico visualizando os erros residuais.

Diagnósticos de regressão {reg-diag}

Gráficos de diagnóstico

Gráficos de diagnóstico de regressão podem ser criados usando a função base do Rplot()ou o
autoplot()função [pacote ggfortify], que cria gráficos baseados em ggplot2.

Crie os gráficos de diagnóstico com a função base do R:

par(mfrow = c(2, 2))


gráfico(modelo)

61
Crie os gráficos de diagnóstico usando ggfortify:

biblioteca(ggfortify)
autoplot(model)

Os gráficos de diagnóstico mostram os resíduos de quatro maneiras diferentes:

[Link]íduos vs Ajustados. Usado para verificar as suposições da relação linear. A


uma linha horizontal, sem padrões distintos, é uma indicação de uma relação linear,
o que é bom.
2. Q-Q Normal. Usado para examinar se os resíduos estão distribuídos normalmente.
É bom se os pontos residuais seguirem a linha reta pontilhada.
[Link]-Localização (ou Distribuição-Localização). Usado para verificar a homogeneidade de
variância dos resíduos (homocedasticidade). Linha horizontal com distribuição uniforme
os pontos são uma boa indicação de homocedasticidade. Este não é o caso em nosso
exemplo, onde temos um problema de heterocedasticidade.

4. Resíduos vs Alavancagem. Usado para identificar casos influentes, ou seja, valores extremos
isso pode influenciar os resultados da regressão quando incluído ou excluído do
análise. Este gráfico será descrito mais adiante nas próximas seções.

62
The four plots show the top 3 most extreme data points labeled with with the row
números dos dados no conjunto de dados. Eles podem ser potencialmente problemáticos. Você pode
quero dar uma olhada de perto neles individualmente para verificar se há algo especial para
o assunto ou se poderia ser simplesmente erros de entrada de dados. Vamos discutir isso no
seções seguintes.

As métricas usadas para criar os gráficos acima estão disponíveis [Link].métricas


dados, descritos na seção anterior.

Adicionar índices de observações e


# excluir algumas colunas (.[Link], .sigma) para simplificação
[Link] <- [Link] %>%
mutar(indice = 1:nrow([Link])) %>%
selecionar(index, tudo(), -.[Link], -.sigma)
# Inspecione os dados
cabeça([Link], 4)
## index sales youtube .fitted .resid .hat .cooksd .[Link]
## 1 1 26.5 276.1 21.56 4.96 0.00970 0.00794 1.273
## 2 2 12.5 53.4 10.98 1.50 0.01217 0.00092 0.387
## 3 3 11.2 20.6 9.42 1.74 0.01649 0.00169 0.449
## 4 4 22.2 181.8 17.08 5.12 0.00501 0.00434 1.312

Usaremos principalmente as seguintes colunas:

.fittedvalores ajustados
.residerros residuais

.chapéuvalores hat, usados para detectar pontos de alta alavancagem (ou valores extremos em
previsores x variáveis

.[Link]íduos padronizados, que são os resíduos divididos por seu


erros padrão. Usado para detectar outliers (ou valores extremos no resultado y
variável)

.cooksdA distância de Cook, usada para detectar valores influentes, que pode ser uma
outlier ou um ponto de alta alavancagem

Na seção seguinte, descreveremos, em detalhes, como usar esses gráficos e métricas


para verificar as suposições de regressão e diagnosticar problemas potenciais no modelo.

Linearidade dos dados

A suposição de linearidade pode ser verificada inspecionando o gráfico Resíduos vs Ajustados (1ª
gráfico):

plot(model, 1)

63
Idealmente, o gráfico residual não deve mostrar nenhum padrão ajustado. Ou seja, a linha vermelha deve ser
aproximadamente horizontal em zero. A presença de um padrão pode indicar um problema com
algum aspecto do modelo linear.

Em nosso exemplo, não há padrão no gráfico residual. Isso sugere que podemos assumir
relação linear entre os preditores e as variáveis de resultado.

Observe que, se o gráfico dos resíduos indicar uma relação não linear nos dados, então um
uma abordagem simples é usar transformações não lineares dos preditores, como log(x),
sqrt(x) e x^2, no modelo de regressão.

Homogeneidade de variância

Essa suposição pode ser verificada examinando o gráfico de escala-localização, também conhecido como
o gráfico de localização da dispersão.

plot(model, 3)

Este gráfico mostra se os resíduos estão espalhados igualmente ao longo das faixas de preditores. É bom
se você ver uma linha horizontal com pontos igualmente espaçados. No nosso exemplo, isso não é o
caso.

Pode-se observar que a variabilidade (variâncias) dos pontos residuais aumenta com o
valor da variável de resultado ajustada, sugerindo variâncias não constantes nos resíduos
erros (ou heterocedasticidade).

Uma possível solução para reduzir o problema de heterocedasticidade é usar um logaritmo ou quadrado
transformação raiz da variável de resultado (y).

64
model2 <- lm(log(sales) ~ youtube, data = marketing)
plot(modelo2, 3)

Normalidade dos resíduos

O gráfico QQ dos resíduos pode ser usado para verificar visualmente a suposição de normalidade.
o gráfico de probabilidade normal dos resíduos deve seguir aproximadamente uma linha reta.

No nosso exemplo, todos os pontos caem aproximadamente ao longo desta linha de referência, então podemos
assuma a normalidade.

plot(model, 2)

Outliers e pontos de alta alavancagem

Outliers:

Um outlier é um ponto que tem um valor de variável de resultado extremo. A presença de


Os outliers podem afetar a interpretação do modelo, pois aumentam o RSE.

Os valores atípicos podem ser identificados examinando o resíduo padronizado (ou studentizado)
residual), que é o residual dividido pelo seu erro padrão estimado. Padronizado
os resíduos podem ser interpretados como o número de erros padrão afastados da regressão
linha.

Observações cujos resíduos padronizados são superiores a 3 em valor absoluto são


possíveis valores atípicos (James et al. 2014).

65
Pontos de alta alavancagem:

Um ponto de dados tem alta alavancagem, se tiver valores extremos de preditores x. Isso pode ser detectado
ao examinar a estatística de alavancagem ou o valor hat. Um valor dessa estatística acima de2(p
+ 1)/nindica uma observação com alta alavancagem (P. Bruce e Bruce 2017); onde,
pé o número de preditores ené o número de observações.

Outliers e pontos de alta alavancagem podem ser identificados inspecionando os Residuais vs


Leverageplot:

plot(model, 5)

O gráfico acima destaca os 3 pontos mais extremos (#26, #36 e #179), com um
resíduos padronizados abaixo de -2. No entanto, não há outliers que excedam 3 desvios padrão
desvios, o que é bom.

Além disso, não há nenhum ponto de alta alavancagem nos dados. Ou seja, todos os pontos de dados têm uma
leverage estatístico abaixo de 2(p + 1)/n = 4/200 = 0,02.

Valores influentes

Um valor influente é um valor cuja inclusão ou exclusão pode alterar os resultados do


análise de regressão. Tal valor está associado a um grande resíduo.

Nem todos os outliers (ou pontos de dados extremos) são influentes na análise de regressão linear.

Os estatísticos desenvolveram uma métrica chamada distância de Cook para determinar a influência
de um valor. Esta métrica define influência como uma combinação de alavancagem e tamanho residual.

Uma regra prática é que uma observação tem alta influência se a distância de Cook exceder4/
(n - p - 1)(P. Bruce e Bruce 2017), ondené o número de observações ep
o número de variáveis preditoras.

O gráfico de Resíduos vs Leverage pode nos ajudar a encontrar observações influentes, se houver.
neste gráfico, valores atípicos estão geralmente localizados no canto superior direito ou no canto inferior
canto direito. Esses pontos são os locais onde os pontos de dados podem ser influentes contra um
linha de regressão.

Os gráficos a seguir ilustram a distância de Cook e a alavancagem do nosso modelo:

66
Distância de Cook
plote(modelo, 4)
Resíduos vs Alavancagem
plot(model, 5)

Por padrão, os 3 valores mais extremos são rotulados no gráfico da distância de Cook. Se
você quer rotular os 5 principais valores extremos, especifique a opçã[Link] seguinte forma:

plot(model, 4, id.n = 5)

Se você quiser olhar para essas 3 principais observações com a maior distância de Cook em caso
você quer avaliá-los mais, digite este código R:

[Link] %>%
top_n(3, wt = .cooksd)
## índice vendas youtube .ajustado .resíduo .chapéu .cooksd .resí[Link]
## 1 26 14.4 315 23.4 -9.04 0.0142 0.0389 -2.33
## 2 36 15.4 349 25.0 -9.66 0.0191 0.0605 -2.49
## 3 179 14.2 332 24.2 -10.06 0.0165 0.0563 -2.59

Quando os pontos de dados têm altas pontuações de distância de Cook e estão na parte superior ou inferior direita
do gráfico de alavancagem, eles têm alavancagem, o que significa que são influentes na regressão
os resultados. Os resultados da regressão serão alterados se excluirmos esses casos.

No nosso exemplo, os dados não apresentam nenhum ponto influente. As linhas da distância de Cook (um
a linha vermelha tracejada) não é mostrada no gráfico Resíduos vs Alavancagem porque todos os pontos estão
bem dentro das linhas de distância de Cook.

Vamos mostrar agora outro exemplo, onde os dados contêm dois valores extremos com
influência potencial nos resultados da regressão:

df2 <- [Link](


x = c(marketing$youtube, 500, 600)
y = c(marketing$sales, 80, 100)
)
modelo2 <- lm(y ~ x, df2)

67
Create theResiduals vs Leverageplot of the two models:

Distância de Cook
plot(model2, 4)
Resíduos vs Alavancagem
plot(model2, 5)

No gráfico de Resíduos vs Alavancagem, procure por um ponto de dados fora de uma linha tracejada.
Distância de Cook. Quando os pontos estão fora da distância de Cook, isso significa que
eles têm altos pontos de distância de Cook. Neste caso, os valores são influentes para o
resultados da regressão. Os resultados da regressão serão alterados se excluirmos esses casos.

No exemplo acima 2, dois pontos de dados estão muito além das linhas da distância de Cook. O
outros resíduos aparecem agrupados à esquerda. O gráfico identificou os influentes
observação como #201 e #202. Se você excluir esses pontos da análise, a inclinação
o coeficiente muda de 0,06 para 0,04 e o R2 de 0,5 para 0,6. Um impacto bastante grande!

Este capítulo descreve as suposições da regressão linear e mostra como diagnosticar.


problemas potenciais no modelo.

O diagnóstico é essencialmente realizado visualizando os resíduos. Ter padrões em


resíduos não são um sinal de parada. Seu modelo de regressão atual pode não ser a melhor forma
para entender seus dados.

Os problemas potenciais podem ser:

Uma relação não linear entre o resultado e as variáveis preditoras.


Ao enfrentar esse problema, uma solução é incluir um termo quadrático, como
termos polinomiais ou transformação logarítmica. Veja o Capítulo @ref(polinomial-e-
regressão spline).

68
Existência de variáveis importantes que você deixou de fora do seu modelo. Outros
variáveis que você não incluiu (por exemplo, idade ou gênero) podem desempenhar um papel importante em
seu modelo e dados. Veja o Capítulo @ref(variáveis de confusão).

Presença de outliers. Se você acredita que um outlier ocorreu devido a um erro em


coleta e inserção de dados, então uma solução é simplesmente remover o envolvido
observação.

69
I.11._ Noções Essenciais de Multicolinearidade e VIF em R

Na regressão múltipla (Capítulo @ref(linear-regression)), dois ou mais preditores


variáveis podem estar correlacionadas entre si. Essa situação é chamada de colinearidade.

Existe uma situação extrema, chamada multicolinearidade, onde a colinearidade existe.


entre três ou mais variáveis, mesmo que nenhum par de variáveis tenha um especialmente alto
correlação. Isso significa que há redundância entre as variáveis preditoras.

Na presença de multicolinearidade, a solução do modelo de regressão torna-se


instável.

Para um dado preditor (p), a multicolinearidade pode ser avaliada calculando uma pontuação chamada de
fator de inflação da variância (ou VIF), que mede o quanto a variância de um
o coeficiente de regressão está inflacionado devido à multicolinearidade no modelo.

O menor valor possível de VIF é um (ausência de multicolinearidade). Como regra geral de


thumb, um valor VIF que excede 5 ou 10 indica uma quantidade problemática de colinearidade
(James et al. 2014)

Quando confrontados com multicolinearidade, as variáveis envolvidas devem ser removidas, uma vez que a
a presença de multicolinearidade implica que a informação que esta variável fornece
sobre a resposta é redundante na presença das outras variáveis (James et al.
2014, P. Bruce e Bruce (2017)).

Este capítulo descreve como detectar multicolinearidade em um modelo de regressão usando R.

Contents:

Preparando os dados

Construindo um modelo de regressão

Detectando multicolinearidade

Lidando com multicolinearidade

Referências

tidyversepara fácil manipulação e visualização de dados


caretpara um fluxo de trabalho de aprendizado de máquina fácil

70
library(tidyverse)
biblioteca(caret)

Preparando os dados

Usaremos oBostonconjunto de dados [emMASSApacote], introduzido no Capítulo


@ref(análise de regressão), para prever o valor médio da casa (mdev), em Boston
Subúrbios, com base em múltiplas variáveis preditoras.

Vamos dividir os dados aleatoriamente em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados
dados("Boston", pacote = "MASS")
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- Boston$medv %>%
createDataPartition(p = 0.8, list = FALSE)
[Link] <- Boston[[Link], ]
[Link] <- Boston[-[Link], ]
Construindo um modelo de regressão

O seguinte modelo de regressão inclui todas as variáveis preditoras:

Construir o modelo
model1 <- lm(medv ~., data = [Link])
Faça previsões
predictions <- model1 %>% predict([Link])
# Desempenho do modelo
[Link](
RMSE = RMSE(predições, [Link]$medv),
R2 = R2(predições, [Link]$medv)
)
## RMSE R2
## 1 4.99 0.67

Detectando multicolinearidade

A função Rvif()[pacote de carro] pode ser usado para detectar multicolinearidade em um


regression model:

car::vif(modelo1)
## crim zn indus chas nox rm age dis
rad
## 1.87 2.36 3.90 1.06 4.47 2.01 3.02 3.96
7.80
## tax ptratio black lstat
## 9.16 1.91 1.31 2.97

No nosso exemplo, o escore VIF para a variável preditoraimpostoé muito alto (VIF = 9,16).
Isso pode ser problemático.

Dealing with multicollinearity

Nesta seção, atualizaremos nosso modelo removendo as variáveis preditoras com


valor alto de VIF:

71
Construa um modelo excluindo a variável de imposto
model2 <- lm(medv ~. -tax, data = [Link])
Faça previsões
predictions <- model2 %>% predict([Link])
# Desempenho do modelo
[Link](
RMSE = RMSE(previsões, [Link]$medv),
R2 = R2(predições, [Link]$medv)
)
## RMSE R2
## 1 5.01 0.671

Pode-se ver que remover otaxaa variável não afeta muito o modelo
métricas de desempenho.

Este capítulo descreve como detectar e lidar com multicolinearidade na regressão.


modelos. Problemas de multicolinearidade consistem em incluir, no modelo, diferentes
variáveis que têm uma relação preditiva semelhante com o resultado. Isso pode ser
avaliado para cada preditor calculando o valor do VIF.

Qualquer variável com um alto valor de VIF (acima de 5 ou 10) deve ser removida do modelo.
Isso leva a um modelo mais simples sem comprometer a precisão do modelo, que é
bom.

Observe que, em um grande conjunto de dados apresentando múltiplas variáveis preditoras correlacionadas, você pode
realizar estratégias de regressão de componentes principais e regressão por mínimos quadrados parciais.
Veja o Capítulo @ref(pcr-and-pls-regression).

72
I.12._ Diagnósticos do Modelo de Regressão. Essenciais da Variável de Confusão

Uma variável de confusão é uma variável importante que deve ser incluída no
modelo preditivo, mas você o omite. A interpretação ingênua de tais modelos pode levar a resultados inválidos
conclusões.

Por exemplo, considere que queremos modelar a expectativa de vida em diferentes países
com base no PIB per capita, usando ogapminderdata set:

biblioteca(gapminder)
lm(lifeExp ~ gdpPercap, data = gapminder)

Neste exemplo, é claro que o continente é uma variável importante: os países em


A Europa é estimada ter uma expectativa de vida mais alta em comparação com os países da África.
Portanto, o continente é uma variável confundidora que deve ser incluída no modelo:

lm(lifeExp ~ gdpPercap + continente, data = gapminder)

73
I.13._ Validação do Modelo de Regressão

Ao construir um modelo de regressão (Capítulo @ref(linear-regression)), você precisa


avalie a qualidade do modelo, ou seja, quão bem o modelo se ajusta aos dados de treinamento
usado para construir o modelo e quão preciso é o modelo em prever o resultado para
novas observações de teste não vistas.

Nesta parte, você aprenderá técnicas para avaliar a precisão do modelo de regressão e para
validando o desempenho do modelo. Também forneceremos exemplos práticos em R.

Os seguintes capítulos são abordados:

Métricas de Precisão do Modelo de Regressão (Capítulo @ref(regression-model-accuracy-


métricas)) para medir o desempenho de um modelo de regressão.
Validação cruzada (Capítulo @ref(validação-cruzada)) e reamostragem bootstrap
(Capítulo @ref(bootstrap-resampling)) para validar o modelo em um conjunto de dados de teste.

74
I.14._ Métricas de Precisão do Modelo de Regressão: R-quadrado, AIC, BIC, Cp
e mais

Neste capítulo, descreveremos diferentes métricas de regressão estatística para medir a


desempenho de um modelo de regressão (Capítulo @ref(regressão-linear)).

Em seguida, forneceremos exemplos práticos em R para comparar o desempenho de dois


modelos a fim de selecionar o melhor para os nossos dados.

Métricas de desempenho do modelo

No modelo de regressão, as métricas de avaliação mais comumente conhecidas incluem:

1. R-quadrado (R2), que é a proporção da variação no resultado que é


explicados pelas variáveis preditoras. Em modelos de regressão múltipla, R2
corresponde ao quadrado da correlação entre os valores de resultado observados e
os valores previstos pelo modelo. Quanto maior o R-quadrado, melhor o
modelo.
2. Raiz do Erro Quadrático Médio (RMSE), que mede o erro médio
realizado pelo modelo na previsão do resultado de uma observação.
Matematicamente, o RMSE é a raiz quadrada do erro quadrático médio (MSE),
qual é a média das diferenças ao quadrado entre o resultado observado real
valores e os valores previstos pelo modelo. Então,MSE = média((observados -
previstos)^2)eRMSE = sqrt(MSEQuanto menor o RMSE, melhor o
modelo.

3. O Erro Padrão Residual (EPR), também conhecido como sigma do modelo, é uma variante de
o RMSE ajustado para o número de preditores no modelo. Quanto menor o
RSE, quanto melhor o modelo. Na prática, a diferença entre RMSE e RSE é
muito pequeno, particularmente para grandes dados multivariados.

4. Erro Absoluto Médio (MAE), assim como o RMSE, o MAE mede o


erro de previsão. Matematicamente, é a média da diferença absoluta entre
resultados observados e previstosMAE = média(abs(observados -
previstos))O MAE é menos sensível a outliers em comparação com o RMSE.

O problema com as métricas acima é que elas são sensíveis à inclusão de


variáveis adicionais no modelo, mesmo que essas variáveis não tenham significância
contribuição na explicação do resultado. Colocando de outras palavras, incluindo adicional
variáveis no modelo sempre aumentarão o R2 e reduzirão o RMSE. Então, precisamos de um
métrica mais robusta para guiar a escolha do modelo.

Em relação ao R2, há uma versão ajustada, chamada de R-quadrado ajustado, que ajusta
o R2 por ter muitas variáveis no modelo.

Além disso, existem quatro outras métricas importantes - AIC, AICc, BIC e Cp de Mallows
- que são comumente usados para avaliação e seleção de modelos. Estes são imparciais

75
estimativa do erro de predição do modelo MSE. Quanto menores esses métricas, melhor o
modelo.

1. AIC significa (Critérios de Informação de Akaike), uma métrica desenvolvida pelo


O estatístico japonês, Hirotugu Akaike, 1970. A ideia básica do AIC é
penaliza a inclusão de variáveis adicionais a um modelo. Adiciona uma penalidade que
aumenta o erro ao incluir termos adicionais. Quanto menor o AIC, o
melhor o modelo.
AICc é uma versão do AIC corrigida para tamanhos de amostra pequenos.

3. BIC (ou critério de informação bayesiano) é uma variante do AIC com uma força maior
penalização por incluir variáveis adicionais no modelo.

4. Cp de Mallows: Uma variante do AIC desenvolvida por Colin Mallows.

Geralmente, as métricas mais comumente usadas para medir a qualidade do modelo de regressão.
e para comparar modelos, são: R2 ajustado, AIC, BIC e Cp.

Nas seções seguintes, vamos mostrar como calcular estes mencionados acima
métricas.

tidyversepara manipulação e visualização de dados


modelofornece funções auxiliares para calcular o desempenho do modelo de regressão
métricas

vassouracria facilmente um data frame organizado contendo as métricas estatísticas do modelo

biblioteca(tidyverse)
biblioteca(modelr)
biblioteca(broom)

Usaremos o R embutidosuíçodados, apresentados no Capítulo @ref(regrissão-


análise), para prever o índice de fertilidade com base em indicadores socioeconômicos.

# Carregar os dados
dados("suiços")
# Inspecionar os dados
amostra_n(suíço, 3)
Construindo modelos de regressão

Começamos criando dois modelos:

Modelo 1, incluindo todos os preditores


2. Modelo 2, incluindo todos os preditores, exceto a variável Exame

modelo1 <- lm(Fertilidade ~., dados = suíço)


modelo2 <- lm(Fertilidade ~. -Exame, dados = suíço)
Avaliando a qualidade do modelo

76
Existem muitas funções e pacotes em R para avaliar a qualidade do modelo, incluindo:

resumo()[pacote stats], retorna o R-quadrado, R-quadrado ajustado e o


RSE
AIC()eBIC()[pacote stats], calcula o AIC e o BIC, respectivamente

summary(model1)
AIC(modelo1)
BIC(modelo1)

rsquare(), rmse()emãe()[pacote modelr], computa, respectivamente, o


R2, RMSE e o MAE.

biblioteca(modelr)
[Link](
R2 = rsquare(model1, dados = suíços)
RMSE = rmse(model1, data = swiss)
MAE = mae(model1, data = swiss)
)

R2(), RMSE()eMAE() [pacote caret], calcula, respectivamente, o R2, RMSE


e o MAE.

biblioteca(caret)
predictions <- model1 %>% predict(swiss)
[Link](
R2 = R2(predições, swiss$Fertilidade)
RMSE = RMSE(predictions, swiss$Fertility),
MAE = MAE(predições, swiss$Fertilidade)
)

olhar[pacote broom], calcula o R2, R2 ajustado, sigma (RSE), AIC,


BIC.

biblioteca(broom)
olhar(modelo1)

Manual computation of R2, RMSE and MAE:

Faça previsões e compute o


# R2, RMSE and MAE
suíço %>%
adicionar_previsões(modelo1) %>%
resumir(
R2 = cor(Fertility, pred)^2,
MSE = mean((Fertility - pred)^2),
RMSE = sqrt(MSE)
MAE = mean(abs(Fertility - pred))
)
Comparando o desempenho de modelos de regressão

Aqui, usaremos a funçãoolhar()para simplesmente comparar a qualidade geral dos nossos dois
models:

# Métricas para o modelo 1

77
olhar(modelo1) %>%
dplyr::select([Link], sigma, AIC, BIC, [Link])
## [Link] sigma AIC BIC [Link]
## 1 0.671 7.17 326 339 5.59e-10
Métricas para o modelo 2
olhar(modelo2) %>%
dplyr::selecionar([Link], sigma, AIC, BIC, [Link])
## [Link] sigma AIC BIC [Link]
## 1 0.671 7.17 325 336 1.72e-10

Do resultado acima, pode-se ver que:

Os dois modelos têm exatamente o mesmo R2 ajustado (0,67), o que significa que eles
são equivalentes na explicação do resultado, aqui o score de fertilidade. Além disso, eles
tem a mesma quantidade de erro padrão residual (RSE ou sigma = 7,17).
No entanto, o modelo 2 é mais simples que o modelo 1 porque incorpora menos
variáveis. Todas as coisas sendo iguais, o modelo simples é sempre melhor em estatística.
2. O AIC e o BIC do modelo 2 são inferiores aos do modelo 1. Em
estratégias de comparação de modelos, o modelo com a menor pontuação AIC e BIC é
preferido.

3. Finalmente, o valor p da estatística F do modelo 2 é inferior ao do modelo


1. Isso significa que o modelo 2 é estatisticamente mais significativo em comparação com
modelo 1, que é consistente com a conclusão acima.

Note que o RMSE e o RSE são medidos na mesma escala que o resultado
Dividir o RSE pelo valor médio da variável de resultado lhe dará
a taxa de erro de previsão, que deve ser o mais baixa possível:

sigma(model1)/mean(swiss$Fertility)
## [1] 0.102

No nosso exemplo, a taxa média de erro de previsão é de 10%.

Este capítulo descreve várias métricas para avaliar o desempenho geral de um


modelo de regressão.

As métricas mais importantes são o R-quadrado ajustado, RMSE, AIC e o BIC. Estes
As métricas também são usadas como base para comparação de modelos e seleção do modelo ideal.

Observe que, essas métricas de regressão são todas medidas internas, ou seja, elas foram
computados com os mesmos dados que foram usados para construir o modelo de regressão. Eles te dizem
quão bem o modelo se ajusta aos dados disponíveis, chamados de conjunto de dados de treinamento.

Em geral, não nos importamos muito com quão bem o método funciona nos dados de treinamento.
Na verdade, estamos interessados na precisão das previsões que obtemos quando fazemos
aplique nosso método a dados de teste previamente não vistos.

No entanto, os dados de teste nem sempre estão disponíveis, tornando o erro de teste muito difícil de
estimativa. Nesta situação, métodos como a validação cruzada (Capítulo @ref(cross-

78
validação)) e bootstrap (Capítulo @ref(bootstrap-resampling)) são aplicados para
estimando o erro de teste (ou a taxa de erro de previsão) usando dados de treinamento.

79
I.15._ Essenciais de Validação Cruzada em R

A validação cruzada refere-se a um conjunto de métodos para medir o desempenho de um dado


modelo preditivo em novos conjuntos de dados de teste.

A ideia básica por trás das técnicas de validação cruzada consiste em dividir os dados em dois
sets:

1. O conjunto de treinamento, usado para treinar (ou seja, construir) o modelo;


2. e o conjunto de teste (ou conjunto de validação), usado para testar (ou seja, validar) o modelo por
estimando o erro de previsão.

A validação cruzada também é conhecida como um método de reamostragem porque envolve ajustar o
mesma metodologia estatística várias vezes usando diferentes subconjuntos dos dados.

Neste capítulo, você aprenderá:

1. as métricas estatísticas mais comumente usadas (Capítulo @ref(regression-model-


métricas de precisão)) para medir o desempenho de um modelo de regressão em
prever o resultado de novos dados de teste.
2. Os diferentes métodos de validação cruzada para avaliar o desempenho do modelo. Nós
cobrir as seguintes abordagens:
oAbordagem de conjunto de validação (ou divisão de dados)

oValidação Cruzada Leave One Out

ok-fold Cross Validation

oValidação Cruzada K-Fold Repetida

Cada um desses métodos tem suas vantagens e desvantagens. Use o método que melhor
se adapta ao seu problema. Em geral, a validação cruzada k-fold (repetida) é recomendada.

3. Practical examples of R codes for computing cross-validation methods.

tidyversepara fácil manipulação e visualização de dados


caretpara calcular facilmente métodos de validação cruzada

biblioteca(tidyverse)
biblioteca(caret)

Usaremos o R integradosuíçodados, introduzidos no Capítulo @ref(regressão-


análise), para prever a pontuação de fertilidade com base em indicadores socioeconômicos.

80
# Carregar os dados
dados("suíço")
# Inspecione os dados
amostra_n(suíço, 3)
Métricas de desempenho do modelo

Após construir um modelo, estamos interessados em determinar a precisão deste modelo em


prever o resultado para novas observações não vistas que não foram usadas para construir o modelo. Colocar em
outras palavras, queremos estimar o erro de previsão.

Para fazer isso, a estratégia básica é:

1. Construa o modelo em um conjunto de dados de treinamento


2. Aplique o modelo em um novo conjunto de dados de teste para fazer previsões

3. Calcule os erros de previsão

No Capítulo @ref(métricas-de-acurácia-do-modelo-de-regressão), descrevemos várias estatísticas


métricas para quantificar a qualidade geral dos modelos de regressão. Isso inclui:

O R-quadrado (R2), representando a correlação ao quadrado entre os observados


valores de resultado e os valores previstos pelo modelo. Quanto maior o ajustado
R2, quanto melhor o modelo.
Erro Quadrático Médio (EQM), que mede a média das previsões
erro feito pelo modelo ao prever o resultado para uma observação. Ou seja,
a diferença média entre os valores de resultado conhecidos observados e o
valores previstos pelo modelo. Quanto menor o RMSE, melhor o modelo.

Erro Absoluto Médio (EAM), uma alternativa ao RMSE que é menos sensível
para valores discrepantes. Corresponde à diferença absoluta média entre observado
e resultados previstos. Quanto menor o MAE, melhor o modelo

In classification setting, the prediction error rate is estimated as the proportion of


observações mal classificadas.

R2, RMSE e MAE são usados para medir o desempenho do modelo de regressão durante
validação cruzada.

Na seção a seguir, explicaremos o básico da validação cruzada e forneceremos


exemplo prático usando principalmente ocaretPacote R.

Métodos de validação cruzada

Briefly, cross-validation algorithms can be summarized as follow:

1. Reserve uma pequena amostra do conjunto de dados


2. Construir (ou treinar) o modelo usando a parte restante do conjunto de dados

3. Teste a eficácia do modelo na amostra reservada do conjunto de dados. Se


o modelo funciona bem no conjunto de dados de teste, então é bom.

81
As seções a seguir descrevem as diferentes técnicas de validação cruzada.

A Abordagem do Conjunto de Validação

A abordagem do conjunto de validação consiste em dividir aleatoriamente os dados em dois conjuntos: um conjunto
é usado para treinar o modelo e o restante do conjunto é usado para testar o modelo.

O processo funciona da seguinte forma:

1. Construir (treinar) o modelo no conjunto de dados de treinamento


2. Aplique o modelo ao conjunto de dados de teste para prever o resultado de novos dados não vistos
observações

3. Quantifique o erro de previsão como a diferença média ao quadrado entre o


valores observados e os valores de resultado previstos.

O exemplo abaixo divide osuíçoconjunto de dados de forma que 80% seja usado para treinar um linear
modelo de regressão e 20% é usado para avaliar o desempenho do modelo.

# Divida os dados em conjunto de treinamento e teste


[Link](123)
[Link] <- swiss$Fertilidade %>%
createDataPartition(p = 0.8, list = FALSE)
[Link] <- swiss[[Link], ]
[Link] <- swiss[-[Link], ]
# Construir o modelo
modelo <- lm(Fertilidade ~., dados = [Link])
Faça previsões e calcule o R2, RMSE e MAE
predictions <- model %>% predict([Link])
[Link]( R2 = R2(predictions, [Link]$Fertility),
RMSE = RMSE(predições, [Link]$Fertilidade)
MAE = MAE(predictions, [Link]$Fertility))
## R2 RMSE MAE
## 1 0,39 9,11 7,48

When comparing two models, the one that produces the lowest test sample RMSE is the
modelo preferido.

o RMSE e o MAE são medidos na mesma escala que a variável de resultado.


Dividir o RMSE pelo valor médio da variável de resultado lhe dará o
taxa de erro de previsão, que deve ser o menor possível:

RMSE(predições, [Link]$Fertilidade)/média([Link]$Fertilidade)
## [1] 0,128

Observe que o método de conjunto de validação só é útil quando você tem um grande conjunto de dados que
pode ser particionado. Uma desvantagem é que construímos um modelo com uma fração do conjunto de dados
somente, possivelmente deixando de fora algumas informações interessantes sobre dados, levando a um aumento mais alto
viés. Portanto, a taxa de erro do teste pode ser altamente variável, dependendo de qual
as observações estão incluídas no conjunto de treinamento e quais observações estão incluídas em
conjunto de validação.

Validação cruzada leave one out - LOOCV

82
Este método funciona da seguinte forma:

1. Deixe de fora um ponto de dados e construa o modelo com o restante do conjunto de dados
2. Teste o modelo com o ponto de dados que foi deixado de fora na etapa 1 e registre o teste.
erro associado à previsão

3. Repita o processo para todos os pontos de dados

4. Calcule o erro de previsão geral tirando a média de todos esses erros de teste.
estimativas registradas na etapa 2.

Exemplo prático em R usando ocaretpackage:

# Definir controle de treinamento


[Link] <- trainControl(method = "LOOCV")
# Treine o modelo
modelo <- treinar(Fertilidade ~., dados = suíço, método = "lm",
trControl = [Link])
Resumir os resultados
imprimir(modelo)
Regressão Linear
##
## 47 amostras
## 5 preditor
##
## Sem pré-processamento
## Reamostragem: Validação Cruzada Leave-One-Out
## Summary of sample sizes: 46, 46, 46, 46, 46, 46, ...
## Resultados de reamostragem:
##
## RMSE Rsquared MAE
## 7.74 0.613 6.12
##
O parâmetro de ajuste 'intercepto' foi mantido constante em um valor de VERDADEIRO

A vantagem do método LOOCV é que utilizamos todos os pontos de dados, reduzindo


viés potencial.

No entanto, o processo é repetido tantas vezes quantos forem os pontos de dados, resultando em um
higher execution time when n is extremely large.

Além disso, testamos o desempenho do modelo contra um ponto de dados em cada iteração.
Isso pode resultar em maior variação no erro de previsão, se alguns pontos de dados forem
valores discrepantes. Portanto, precisamos de uma boa proporção de pontos de dados de teste, uma solução fornecida pelo k-
método de validação cruzada de k-fold.

Validação cruzada K-fold

O método de validação cruzada k-fold avalia o desempenho do modelo em diferentes subconjuntos.


dos dados de treinamento e depois calcular a taxa média de erro de previsão. O algoritmo é
como segue:

1. Divida aleatoriamente o conjunto de dados em k-subconjuntos (ou k-fold) (por exemplo, 5 subconjuntos)
2. Reserve um subconjunto e treine o modelo em todos os outros subconjuntos

83
3. Teste o modelo no subconjunto reservado e registre o erro de previsão
4. Repita esse processo até que cada um dos k subconjuntos tenha servido como o conjunto de teste.

5. Calcule a média dos k erros registrados. Isso é chamado de validação cruzada.


erro servindo como a métrica de desempenho para o modelo.

A validação cruzada K-fold (CV) é um método robusto para estimar a precisão de um modelo.

A vantagem mais óbvia da validação cruzada k-fold em comparação com a validação cruzada leave-one-out (LOOCV) é computacional.
uma vantagem menos óbvia, mas potencialmente mais importante do CV de k-fold é que ele frequentemente oferece
estimates mais precisas da taxa de erro do teste do que a LOOCV (James et al. 2014).

A pergunta típica é como escolher o valor certo de k?

Um valor mais baixo de K é mais tendencioso e, portanto, indesejável. Por outro lado, um valor mais alto
de K é menos tendencioso, mas pode sofrer de grande variabilidade. Não é difícil ver que um
um valor menor de k (digamos k = 2) sempre nos leva em direção à abordagem do conjunto de validação, enquanto
um valor mais alto de k (digamos k = número de pontos de dados) nos leva à abordagem LOOCV.

Na prática, geralmente realiza-se a validação cruzada k-fold usando k = 5 ou k = 10, uma vez que esses
valores foram mostrados empiricamente para produzir estimativas de taxa de erro de teste que não sofrem nem
nem de um viés excessivamente alto nem de uma variância muito alta.

O seguinte exemplo utiliza validação cruzada em 10 partes para estimar o erro de previsão.
Certifique-se de definir a semente para reprodutibilidade.

Definir controle de treinamento


[Link](123)
[Link] <- trainControl(method = "cv", number = 10)
Treinar o modelo
modelo <- treinar(Fertilidade ~., dados = suíço, método = "lm",
trControl = [Link]
# Resumir os resultados
imprimir(modelo)
Regressão Linear
##
## 47 amostras
5 preditor
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 43, 42, 42, 41, 43, 41, ...
## Resultados de reamostragem:
##
## RMSE Rsquared MAE
## 7.38 0.751 6.03
##
## O parâmetro de ajuste 'interceptação' foi mantido constante em um valor de VERDADEIRO

Validação cruzada K-fold repetida

O processo de dividir os dados em k-partições pode ser repetido várias vezes, isso é
chamado de validação cruzada k-fold repetida.

84
O erro do modelo final é considerado como a média dos erros a partir do número de repetições.

O seguinte exemplo usa validação cruzada de 10 vezes com 3 repetições:

# Definir controle de treinamento


[Link](123)
[Link] <- trainControl(method = "repeatedcv",
number = 10, repeats = 3)
# Treine o modelo
modelo <- treinar(Fertilidade ~., dados = suíço, método = "lm",
trControl = [Link]
# Summarize the results
imprimir(modelo)

Neste capítulo, descrevemos 4 métodos diferentes para avaliar o desempenho de um


modelo em dados de teste não vistos.

Esses métodos incluem: abordagem de conjunto de validação, cross-validation leave-one-out, k-fold


validação cruzada e validação cruzada k-fold repetida.

Geralmente recomendamos a validação cruzada k-fold (repetida) para estimar a


taxa de erro de previsão. Pode ser usado em configurações de regressão e classificação.

Outra alternativa à validação cruzada são os métodos de reamostragem bootstrap (Capítulo


@ref(bootstrap-resampling)), que consiste em selecionar repetidamente e aleatoriamente um
amostra de n observações do conjunto de dados original e para avaliar o modelo
desempenho em cada cópia.

85
I.16._ Fundamentos do Reamostragem Bootstrap em R

Semelhante às técnicas de validação cruzada (Capítulo @ref(cross-validation)), o bootstrap


o método de reamostragem pode ser usado para medir a precisão de um modelo preditivo.
Além disso, pode ser usado para medir a incerteza associada a qualquer estatística.
estimator.

A reamostragem bootstrap consiste em selecionar repetidamente uma amostra de n observações de


o conjunto de dados original, e avaliar o modelo em cada cópia. Um erro padrão médio
é então calculado e os resultados fornecem uma indicação da variação geral do
desempenho do modelo.

Este capítulo descreve os fundamentos do bootstrapping e fornece exemplos práticos em R


para calcular um erro de previsão do modelo. Além disso, iremos mostrar como calcular
uma incerteza de estimador usando técnicas de bootstrap.

biblioteca(tidyverse)
biblioteca(caret)

Usaremos o R incorporadosuiçodados, introduzidos no Capítulo @ref(regrressão-


análise), para prever o índice de fertilidade com base em indicadores socioeconômicos.

# Carregar os dados
dados("suíço")
# Inspecione os dados
sample_n(suíço, 3)
Procedimento Bootstrap

O método bootstrap é utilizado para quantificar a incerteza associada a um dado


estimator estatístico ou com um modelo preditivo.

Consiste em selecionar aleatoriamente uma amostra de n observações do conjunto de dados original.


Este subconjunto, chamado de conjunto de dados bootstrap, é então usado para avaliar o modelo.

Este procedimento é repetido um grande número de vezes e o erro padrão do


A estimativa bootstrap é então calculada. Os resultados fornecem uma indicação da variância de
o desempenho dos modelos.

Observe que a amostragem é realizada com reposição, o que significa que o mesmo
A observação pode ocorrer mais de uma vez no conjunto de dados bootstrap.

Avaliação do desempenho de um modelo preditivo

O exemplo a seguir usa um bootstrap com 100 reamostragens para testar uma regressão linear
model:

Definir controle de treinamento

86
[Link] <- trainControl(method = "boot", number = 100)
Treine o modelo
modelo <- treinar(Fertilidade ~ ., dados = suíços, método = "lm",
trControl = [Link])
# Resumir os resultados
imprima(modelo)
Regressão Linear
##
## 47 amostras
## 5 preditor
##
## Sem pré-processamento
## Resampling: Bootstrapped (100 reps)
## Resumo dos tamanhos da amostra: 47, 47, 47, 47, 47, 47, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 8.4 0.597 6.76
##
O parâmetro de ajuste 'intercepto' foi mantido constante em um valor de VERDADEIRO

A saída mostra o desempenho médio do modelo em 100 reamostragens.

RMSE (Raiz do Erro Quadrático Médio) e MAE (Erro Absoluto Médio) representam dois
diferentes medidas do erro de previsão do modelo. Quanto menores o RMSE e o MAE,
quanto melhor o modelo. O R-quadrado representa a proporção de variação no
resultado explicado pelas variáveis preditoras incluídas no modelo. Quanto maior o R-
ao quadrado, melhor o modelo. Leia mais sobre essas métricas no Capítulo @ref(regressão-
métricas-de-precisão-do-modelo).

Quantificando a incerteza de um estimador e intervalos de confiança

A abordagem bootstrap pode ser usada para quantificar a incerteza (ou erro padrão)
associado a qualquer estimador estatístico dado.

Por exemplo, você pode querer estimar a precisão do beta da regressão linear.
coeficientes usando o método bootstrap.

Os diferentes passos são os seguintes:

1. Crie uma função simples,coef_model(), que leva osuíçoconjunto de dados assim como
os índices para as observações e retorna os coeficientes de regressão.
2. Aplique a funçãoboot_fun()ao conjunto de dados completo de 47 observações a fim de
calcule os coeficientes

Começamos criando uma função que retorna os coeficientes do modelo de regressão:

model_coef <- function(data, index){


coef(lm(Fertilidade ~., dados = dados, subconjunto = índice))
}
modelo_coef(suíço, 1:47)
## (Intercept) Agriculture Examination Education
## 66.915 -0.172 -0.258 -0.871
## Mortalidade Infantil Católica
## 0.104 1.077

87
Em seguida, usamos oiniciar()função [pacote boot] para calcular os erros padrão de 500
estimativas bootstrap para os coeficientes:

biblioteca(boot)
boot(suíço, coef_modelo, 500)
##
## BOOTSTRAP NÃO PARAMÉTRICO ORDINÁRIO
##
##
## Chamada:
## boot(dados = suíço, estatística = coef_modelo, R = 500)
##
##
## Bootstrap Statistics :
## original bias std. error
## t1* 66.915 -2.04e-01 10.9174
## t2* -0.172 -5.62e-03 0.0639
## t3* -0.258 -2.27e-02 0.2524
## t4* -0.871 3.89e-05 0.2203
## t5* 0.104 -7.77e-04 0.0319
## t6* 1.077 4.45e-02 0.4478

Na saída acima,

originala coluna corresponde aos coeficientes de regressão. O associado


os erros padrão são dados na [Link].
t1 corresponde ao intercepto, t2 corresponde aAgriculturae assim por diante…

Por exemplo, pode-se ver que o erro padrão (EP) do coeficiente de regressão
associado comAgriculturaé 0,06.

Observe que os erros padrão medem a variabilidade/precisão dos coeficientes beta.


pode ser usado para calcular os intervalos de confiança dos coeficientes.

Por exemplo, o intervalo de confiança de 95% para um determinado coeficiente b é definido comob +/-
2*SE(b), onde:

os limites inferiores de b =b - 2*SE(b) = -0.172 - (2*0.0680) = -0.308(para


Agriculture variable)
os limites superiores de b = b + 2*SE(b) = -0.172 + (2*0.0680) = -0.036(para
Agriculture variable)

Ou seja, há aproximadamente 95% de chance de que o intervalo [-0,308, -0,036] irá


contém o verdadeiro valor do coeficiente.

Using the standard lm()a função fornece erros padrão ligeiramente diferentes, porque a
o modelo linear faz algumas suposições sobre os dados:

resumo(lm(Fertilidade ~., dados = suíços))$coef


## Estimativa Erro Padrão valor t Pr(>|t|)
## (Intercept) 66.915 10.7060 6.25 1.91e-07
## Agriculture -0.172 0.0703 -2.45 1.87e-02
## Examination -0.258 0.2539 -1.02 3.15e-01
## Education -0.871 0.1830 -4.76 2.43e-05

88
Católico 0.104 0.0353 2.95 5.19e-03
## [Link] 1.077 0.3817 2.82 7.34e-03

A abordagem bootstrap não depende de nenhuma dessas suposições feitas pela linear
modelo, e assim é provável que forneça uma estimativa mais precisa dos coeficientes padrão
erros do que é a função summary().

This chapter describes bootstrap resampling method for evaluating a predictive model
exatidão, assim como, para medir a incerteza associada a um dado estatístico
estimator.

Uma abordagem alternativa ao bootstrapping, para avaliar um modelo preditivo


desempenho, são técnicas de validação cruzada (Capítulo @ref(cross-validation)).

89
I.17._ Essentials da Seleção de Modelos em R

Quando você tem muitas variáveis preditoras em um modelo preditivo, a seleção do modelo
métodos permitem selecionar automaticamente a melhor combinação de variáveis preditoras para
construindo um modelo preditivo ideal.

Remover variáveis irrelevantes leva a um modelo mais interpretável e mais simples. Com o
mesma performance, um modelo mais simples deve ser sempre usado em preferência a um mais complexo.
modelo complexo.

Além disso, o uso de abordagens de seleção de modelos é crítico em algumas situações, onde
você tem um grande conjunto de dados multivariados com muitas variáveis preditoras. Isso é frequentemente o
caso na área genômica, onde um desafio substancial vem do fato de que o número
das variáveis genômicas (p) geralmente é muito maior do que o número de indivíduos (n) (ou seja,
p >> n) (Bovelstad et al. 2007).

É bem conhecido que, quando p >> n, é fácil encontrar preditores que apresentam um desempenho excelente.
nos dados ajustados, mas falham na validação externa, levando a regras de predição pobres.
Além disso, pode haver muita variabilidade no ajuste dos mínimos quadrados, resultando em
ajuste excessivo e, consequentemente, previsões ruins em observações futuras não usadas no modelo
treinamento (James et al. 2014).

Uma possível estratégia consiste em testar todas as combinações possíveis dos preditores, e
então selecionando o melhor modelo. Este método chamado de regressão de subconjuntos melhores (Capítulo
@ref(best-subsets-regression)) é computacionalmente caro e se torna inviável
para um grande conjunto de dados com muitas variáveis.

Uma alternativa melhor à regressão dos melhores subconjuntos é usar a regressão passo a passo.
(Capítulo @ref(stepwise-regression)) método, que consiste em adicionar e excluir
preditores para encontrar o modelo de melhor desempenho com um conjunto reduzido de variáveis.

Outros métodos para dados de alta dimensão, contendo múltiplas variáveis preditoras,
inclua a regressão penalizada (regressão ridge e lasso, Capítulo @ref(penalized-
regressão)) e os métodos de regressão baseados em componentes principais (PCR e PLS,
Capítulo @ref(pcr-e-regressão-pls)).

Nesta parte, cobriremos três categorias diferentes de abordagens para selecionar um ótimo
modelo linear para um grande conjunto de dados multivariados. Isso inclui:

Seleção de melhores subconjuntos (Capítulo @ref(best-subsets-regression))


Seleção passo a passo (Capítulo @ref(stepwise-regression))

Regressão penalizada (ou métodos de encolhimento) (Capítulo @ref(penalized-


regressão))

Métodos de redução de dimensionalidade (Capítulo @ref(pcr-and-pls-regression))

90
I.18._ Essenciais da Regressão por Subconjuntos em R

A regressão de melhores subconjuntos é uma abordagem de seleção de modelos que consiste em testar todos
combinação possível das variáveis preditoras e, em seguida, selecionando o melhor modelo
de acordo com alguns critérios estatísticos.

Neste capítulo, descreveremos como calcular a regressão dos melhores subconjuntos usando R.

tidyversepara fácil manipulação e visualização de dados


caretpara um fluxo de trabalho de aprendizado de máquina fácil

saltos, para computar a regressão de melhores subconjuntos

biblioteca(tidyverse)
biblioteca(caret)
biblioteca(leaps)

Usaremos o R embutidosuíçodados, introduzidos no Capítulo @ref(regressão-


análise), para prever a pontuação de fertilidade com base em indicadores socioeconômicos.

# Load the data


data("swiss")
Inspecione os dados
amostra_n(suíço, 3)
Calculando a regressão dos melhores subconjuntos

A função Rregsubsets()[saltoso pacote pode ser usado para identificar diferentes melhores
modelos de tamanhos diferentes. Você precisa especificar a opçãonvmaxque representa o
número máximo de preditores a serem incorporados no modelo. Por exemplo, senvmax = 5,
a função retornará o melhor modelo de até 5 variáveis, ou seja, ela retorna o melhor 1-
modelo de variável, o melhor modelo de 2 variáveis, …, os melhores modelos de 5 variáveis.

Em nosso exemplo, temos apenas 5 variáveis preditoras nos dados. Então, usaremosnvmax =
5.

modelos <- regsubsets(Fertilidade~., dados = suíços, nvmax = 5)


resumo(modelos)
## Objeto de seleção de subconjunto
## Chamada: st_build()
## 5 Variáveis (e intercepto)
## Forced in Forced out
## Agriculture FALSE FALSE
## Examination FALSE FALSE
## Education FALSE FALSE
## Catholic FALSE FALSE
## [Link] FALSE FALSE
## 1 subconjuntos de cada tamanho até 5
## Selection Algorithm: exhaustive

91
## Educação Exame Agricultura Católica
[Link]
## 1 ( 1 ) " " " " "*" " " " "
## 2 ( 1 ) " " " " "*" "*" " "
## 3 ( 1 ) " " " " "*" "*" "*"
## 4 ( 1 ) "*" " " "*" "*" "*"
## 5 ( 1 ) "*" "*" "*" "*" "*"

A funçãoresumo()reporta o melhor conjunto de variáveis para cada tamanho de modelo. De


na saída acima, um asterisco especifica que uma determinada variável está incluída no correspondente
modelo.

Por exemplo, pode-se ver que o melhor modelo com 2 variáveis contém apenas Educação e
variáveis católicas (Fertilidade ~ Educação + Católico) . As melhores três variáveis
modelo é (Fertility ~ Education + Catholic + [Link]), e assim por diante.

Uma pergunta natural é: qual desses melhores modelos devemos finalmente escolher para nosso
análise preditiva?

Escolhendo o modelo ideal

Para responder a essas perguntas, você precisa de algumas métricas estatísticas ou estratégias para comparar.
o desempenho geral dos modelos e escolher o melhor. Você precisa estimar
o erro de previsão de cada modelo e selecionar aquele com o menor erro de previsão.

Model selection criteria: Adjusted R2, Cp and BIC

Oresumo()a função retorna algumas métricas - R2 ajustado, Cp e BIC (veja o Capítulo


@ref(métricas-de-acurácia-do-modelo-de-regressão)) - permitindo-nos identificar o melhor no geral
modelo, onde o melhor é definido como o modelo que maximiza o R2 ajustado e minimiza
o erro de previsão (RSS, cp e BIC).

O R2 ajustado representa a proporção de variação, no resultado, que é


explicado pela variação nos valores dos preditores. quanto maior o R2 ajustado, melhor o
modelo.

O melhor modelo, de acordo com cada uma dessas métricas, pode ser extraído da seguinte forma:

[Link] <- summary(models)


[Link](
Adj.R2 = [Link]([Link]$adjr2),
CP = [Link]([Link]$cp),
BIC = [Link]([Link]$bic)
)
## Adj.R2 CP BIC
## 1 5 4 4

Não há uma única solução correta para a seleção de modelos, cada um desses critérios levará a
modelos ligeiramente diferentes. Lembre-se de que,Todos os modelos estão errados, alguns modelos são
útil.

92
Aqui, o R2 ajustado nos diz que o melhor modelo é aquele com os 5 preditores.
variáveis. No entanto, usando os critérios BIC e Cp, devemos optar pelo modelo com 4
variáveis.

Portanto, temos diferentes modelos "melhores" dependendo das métricas que consideramos. Precisamos
estratégias adicionais.

Observe também que o R2 ajustado, BIC e Cp são calculados com base nos dados de treinamento que têm
tem sido usado para ajustar o modelo. Isso significa que a seleção do modelo, usando essas métricas, é
possivelmente sujeito ao overfitting e pode não ter um desempenho tão bom quando aplicado a novos dados.

Uma abordagem mais rigorosa é selecionar modelos com base no erro de previsão calculado
em um novo conjunto de dados de teste usando técnicas de validação cruzada por k-fold (Capítulo @ref(cross-
validação)).

Validação cruzada K-fold

A validação cruzada k dobrada consiste primeiro em dividir os dados em k subconjuntos, também


conhecido como k-fold, onde k é geralmente definido como 5 ou 10. Cada subconjunto (10%) serve
sucessivamente como conjunto de dados de teste e o subconjunto restante (90%) como dados de treinamento. O
o erro de validação cruzada médio é calculado como o erro de previsão do modelo.

A validação cruzada k-fold pode ser facilmente calculada usando a funçãotreinar()[cursor


pacote] (Capítulo @ref(validação cruzada)).

Aqui, seguiremos o procedimento abaixo:

1. Extraia as diferentes fórmulas do modelo a partir domodelosobjeto


2. Treine um modelo linear na fórmula usando validação cruzada k-fold (com k= 5)
e calcular o erro de previsão de cada modelo

Começamos definindo duas funções auxiliares:

1. obter_fórmula_do_modelo(), permitindo o acesso fácil à fórmula dos modelos


retornado pela funçãoregsubsets(). Copie e cole o seguinte código em
seu console R:

# id: model id
# objeto: objeto regsubsets
# data: data used to fit regsubsets
# outcome: outcome variable
get_model_formula <- function(id, object, outcome){
obter dados dos modelos
modelos <- resumo(objeto)$qual[id,-1]
Obter variável de resultado
#form <- [Link](object$call[[2]])
#outcome <- [Link](form)[1]
# Obter preditores do modelo
predictors <- names(which(models == TRUE))
previsores <- paste(previsores, colapsar = "+")
# Construir fórmula do modelo
[Link](paste0(outcome, "~", predictors))
}

93
Por exemplo, para ter a melhor fórmula de modelo com 3 variáveis, digite isto:

obter_fórmula_do_modelo(3, modelos, "Fertilidade")


## Fertility ~ Education + Catholic + [Link]
##

2.obter_erro_cv(), para obter o erro de validação cruzada (CV) para um determinado modelo:

get_cv_error <- function([Link], data){


[Link](1)
[Link] <- trainControl(method = "cv", number = 5)
cv <- treinar([Link], dados = dados, método = "lm",
trControl = [Link])
cv$results$RMSE
}

Finalmente, use as funções auxiliares definidas acima para calcular o erro de previsão do
diferentes melhores modelos retornados peloregsubsets()função:

Calcular erro de validação cruzada


[Link] <- 1:5
[Link] <- map([Link], get_model_formula, models, "Fertility")
%>%
map(get_cv_error, data = swiss) %>%
desagrupar()
[Link]
## [1] 9.42 8.45 7.93 7.68 7.92
Selecione o modelo que minimize o erro de CV
[Link]([Link])
## [1] 4

Pode-se ver que o modelo com 4 variáveis é o melhor modelo. Ele tem o menor
erro de previsão. Os coeficientes de regressão deste modelo podem ser extraídos da seguinte forma:

coef(models, 4)
## (Intercept) Agriculture Education Catholic
## 62.101 -0.155 -0.980 0.125
## [Link]
## 1.078

Este capítulo descreve a abordagem de regressão por subconjuntos ótimos para escolher a melhor linear
modelo de regressão que explica nossos dados.

Note que este método é computacionalmente caro e se torna inviável para um grande
conjunto de dados com muitas variáveis. Uma alternativa melhor é fornecida pelo método stepwise
método de regressão. Veja o Capítulo @ref(regressão-em-passos).

94
I.19._ Essenciais da Regressão Passo a Passo em R

A regressão passo a passo (ou seleção passo a passo) consiste em adicionar e iterar.
removendo preditores, no modelo preditivo, a fim de encontrar o subconjunto de variáveis em
o conjunto de dados resultante no melhor modelo de desempenho, que é um modelo que reduz a previsão
erro.

Existem três estratégias de regressão sequencial (James et al. 2014, P. Bruce e Bruce)
(2017)):

1. A seleção para frente, que começa sem preditores no modelo, adiciona iterativamente
os preditores mais contributivos, e para quando a melhoria não é mais
estatisticamente significativo.
2. Seleção reversa (ou eliminação reversa), que começa com todos
preditores no modelo (modelo completo), remove iterativamente os menos contributivos
preditores, e para quando você tem um modelo onde todos os preditores são
estatisticamente significativo.

3. Seleção passo a passo (ou substituição sequencial), que é uma combinação de


seleções para frente e para trás. Você começa sem preditores, e então sequencialmente
adicione os preditores mais contributivos (como a seleção para frente). Após adicionar cada um
nova variável, remova quaisquer variáveis que não proporcionem mais uma melhoria em
o ajuste do modelo (como seleção reversa).

Observe que,

a seleção forward e a seleção stepwise podem ser aplicadas em alta dimensionalidade


configuração, onde o número de amostras n é inferior ao número de
preditores p, como em campos genômicos.
A seleção para trás exige que o número de amostras n seja maior que o
número de variáveis p, para que o modelo completo possa ser ajustado.

Neste capítulo, você aprenderá como calcular os métodos de regressão passo a passo em R.

biblioteca(tidyverse)
biblioteca(caret)
biblioteca(leaps)
Calculando a regressão passo a passo

Existem muitas funções e pacotes R para calcular a regressão passo a passo. Estes
incluir:

stepAIC()[pacote MASS], que escolhe o melhor modelo pelo AIC. Ele tem um
opção nomeadadireção, que pode assumir os seguintes valores: i) “ambos” (para
regressão passo a passo, com seleção tanto para frente quanto para trás); “para trás” (para
seleção para trás) e “para frente” (para seleção para frente). Ele retorna o melhor
modelo final.

95
biblioteca(MASS)
# Ajustar o modelo completo
[Link] <- lm(Fertilidade ~., dados = suíço)
Modelo de regressão passo a passo
[Link] <- stepAIC([Link], direction = "both",
trace = FALSE)
resumo([Link])

regsubsets()[pacote leaps], que tem o parâmetro de ajustenvmax


especificando o número máximo de preditores a incorporar no modelo (Veja
Capítulo @ref(best-subsets-regression)). Ele retorna múltiplos modelos com diferentes
tamanho até nvmax. Você precisa comparar o desempenho dos diferentes modelos
para escolher o [Link]()tem a opçãométodo, que pode levar
the values “backward”, “forward” and “seqrep” (seqrep = sequential
substituição, combinação de seleções para frente e para trás.

modelos <- regsubsets(Fertilidade ~ ., dados = suíço, nvmax = 5,


método = "seqrep"
resumo(modelos)

Observe que,treinar()a função [pacote caret] fornece um fluxo de trabalho fácil para realizar
seleções passo a passo usando osaltose os pacotes MASS. Ele tem uma opção chamada
método, que pode assumir os seguintes valores:

saltoParaTrásajustar a regressão linear com seleção regressiva


avanço, para ajustar a regressão linear com seleção para frente

leapSeq, ajustar a regressão linear com seleção passo a passo.

Você também precisa especificar o parâmetro de ajustenvmax, que corresponde a


número máximo de preditores a serem incorporados no modelo.

Por exemplo, você pode variarnvmaxde 1 a 5. Neste caso, a função começa por
procurando diferentes melhores modelos de tamanhos variados, até o melhor modelo de 5 variáveis. Isso
é, procura o melhor modelo de 1 variável, o melhor modelo de 2 variáveis, …, o melhor modelo de 5-
modelos de variáveis.

O seguinte exemplo realiza a seleção para trás (method = "leapBackward"),


usando osuíçoconjunto de dados, para identificar o melhor modelo para prever a Fertilidade com base
de indicadores socioeconômicos.

Como o conjunto de dados contém apenas 5 preditores, iremos variarnvmaxde 1 a 5 resultando em


identificação dos 5 melhores modelos com tamanhos diferentes: o melhor modelo de 1 variável, o
melhor modelo de 2 variáveis, …, o melhor modelo de 5 variáveis.

Usaremos validação cruzada de 10 vezes para estimar o erro médio de previsão (RMSE) de
cada um dos 5 modelos (veja o Capítulo @ref(cross-validation)). A métrica estatística RMSE
é usado para comparar os 5 modelos e escolher automaticamente o melhor, onde melhor é
definido como o modelo que minimiza o RMSE.

# Defina a semente para reprodutibilidade


[Link](123)

96
# Configurar validação cruzada k-fold repetida
[Link] <- trainControl(method = "cv", number = 10)
Treinar o modelo
[Link] <- train(Fertility ~., data = suíço,
method = "leapBackward",
tuneGrid = [Link](nvmax = 1:5),
trControl = [Link]
)
[Link]$results
## nvmax RMSE Rsquared MAE RMSESD RsquaredSD MAESD
## 1 1 9.30 0.408 7.91 1.53 0.390 1.65
## 2 2 9.08 0.515 7.75 1.66 0.247 1.40
## 3 3 8.07 0.659 6.55 1.84 0.216 1.57
## 4 4 7.27 0.732 5.93 2.14 0.236 1.67
## 5 5 7.38 0.751 6.03 2.23 0.239 1.64

A saída acima mostra diferentes métricas e seu desvio padrão para comparar o
acurácia dos 5 melhores modelos. As colunas são:

nvmaxo número de variáveis no modelo. Por exemplo, nvmax = 2, especifique o


melhor modelo de 2 variáveis
RMSEeMãesão duas métricas diferentes que medem o erro de previsão de cada uma
modelo. Quanto menor o RMSE e o MAE, melhor o modelo.

Rquadradoindica a correlação entre os valores de resultado observados e o


valores previstos pelo modelo. Quanto maior o R quadrado, melhor o modelo.

Em nosso exemplo, pode-se ver que o modelo com 4 variáveis (nvmax = 4) é o que
que tem o menor RMSE. Você pode exibir os melhores valores de ajuste (nvmax),
automaticamente selecionado pelotreinar()função, da seguinte forma:

[Link]$melhorAjuste
## nvmax
## 4 4

Isso indica que o melhor modelo é aquele com nvmax = 4 variáveis. A função
resumo()relata o melhor conjunto de variáveis para cada tamanho de modelo, até o melhor 4-
variables model.

resumo([Link]$finalModel)
## Objeto de seleção de subconjunto
## 5 Variáveis (e intercepto)
Forçado a Entrar Forçado a Sair
## Agriculture FALSE FALSE
## Examination FALSE FALSE
## Education FALSE FALSE
## Catholic FALSE FALSE
## [Link] FALSE FALSE
## 1 subconjuntos de cada tamanho até 4
## Algoritmo de Seleção: para trás
## Exame de Agricultura Educação Católica
[Link]
## 1 ( 1 ) " " " " "*" " " " "
## 2 ( 1 ) " " " " "*" "*" " "
## 3 ( 1 ) " " " " "*" "*" "*"
## 4 ( 1 ) "*" " " "*" "*" "*"

97
Um asterisco especifica que uma determinada variável está incluída no modelo correspondente.
exemplo, pode-se ver que o melhor modelo de 4 variáveis contém Agricultura, Educação,
Católico, Mortalidade infantilFertility ~ Agriculture + Education + Catholic +
[Link]).

Os coeficientes de regressão do modelo final (id = 4) podem ser acessados da seguinte forma:

coef([Link]$finalModel, 4)

Ou, ao calcular o modelo linear usando apenas os preditores selecionados:

lm(Fertilidade ~ Agricultura + Educação + Católico + [Link],


data = swiss)
##
## Call:
## lm(fórmula = Fertilidade ~ Agricultura + Educação + Católica +
## Mortalidade Infantil, dados = suíços)
##
## Coeficientes:
## (Intercept) Agriculture Education
Católico
## 62.101 -0.155 -0.980
0.125
## [Link]
1.078

Este capítulo descreve métodos de regressão passo a passo para escolher um ótimo
modelo simples, sem comprometer a precisão do modelo.

Demonstramos como usar osaltosPacote R para computação passo a passo


regressão. Outra alternativa é a funçãostepAIC() disponível na MASS
pacote. Tem uma opção chamadadireção, que pode ter os seguintes valores:
“both”, “forward”, “backward”.

biblioteca(MASS)
[Link] <- lm(Fertilidade ~., dados = suíço)
step <- stepAIC([Link], direction = "both", trace = FALSE)
passo

Além disso, o pacote caret tem um método para calcular a regressão passo a passo usando o
pacote MASS (method = "lmStepAIC"):

# Treinar o modelo
[Link] <- train(Fertility ~., data = suíço,
method = "lmStepAIC",
trControl = controle de treinamento,
trace = FALSE
)
Precisão do modelo
[Link]$resultados
Coeficientes do modelo final
[Link]$modelo
# Summary of the model
resumo([Link]$finalModel)

98
A regressão passo a passo é muito útil para dados de alta dimensão que contêm múltiplos
variáveis preditoras. Outras alternativas são a regressão penalizada (ridge e lasso
regressão) (Capítulo @ref(regressão-penalizada)) e os componentes principais baseados
métodos de regressão (PCR e PLS) (Capítulo @ref(pcr-and-pls-regression)).

99
I.20._ Essentials de Regressão Penalizada: Ridge, Lasso & Elastic Net

O modelo linear padrão (ou o método dos mínimos quadrados ordinários) funciona mal em um
situação em que você tem um grande conjunto de dados multivariados contendo um número de variáveis
superior ao número de amostras.

Uma alternativa melhor é a regressão penalizada que permite criar uma regressão linear.
modelo que é penalizado por ter muitas variáveis no modelo, adicionando um
restrição na equação (James et al. 2014, P. Bruce e Bruce (2017)). Isto também é
métodos conhecidos de encolhimento ou regularização.

A consequência de impor esta penalidade é reduzir (ou seja, diminuir) o coeficiente


valores em direção a zero. Isso permite que as variáveis menos contributivas tenham um coeficiente
próximo de zero ou igual a zero.

Observe que a redução exige a seleção de um parâmetro de ajuste (lambda) que


determina a quantidade de encolhimento.

Neste capítulo, descreveremos os métodos de regressão penalizados mais comumente utilizados.


incluindo regressão ridge, regressão lasso e regressão elastic net. Também iremos
forneça exemplos práticos em R.

Métodos de encolhimento

Regressão ridge

A regressão de Ridge reduz os coeficientes de regressão, de modo que variáveis com menor
contribuição para o resultado, ter seus coeficientes próximos de zero.

A redução dos coeficientes é alcançada penalizando o modelo de regressão com uma


termo de penalidade chamado norma L2, que é a soma dos coeficientes ao quadrado.

A quantidade da penalidade pode ser ajustada usando uma constante chamada lambda (λ

). Selecionando um bom valor para λ

é crítico.

Quando λ=0

o termo de penalidade não tem efeito, e a regressão ridge produzirá o clássico mínimo
coeficientes quadráticos. No entanto, como λ

aumenta para o infinito, o impacto da penalidade de encolhimento cresce, e a regressão ridge


os coeficientes ficarão próximos de zero.

100
Note que, ao contrário da regressão de mínimos quadrados ordinários, a regressão ridge é altamente
afetados pela escala dos preditores. Portanto, é melhor padronizar (ou seja, escalar)
os preditores antes de aplicar a regressão ridge (James et al. 2014), de modo que todos os
os preditores estão na mesma escala.

A padronização de um preditorx, pode ser alcançado usando a fórmulax' = x /


sd(x), onde sd(x) é o desvio padrão de x. A consequência disso é que, todos
previsores padronizados terão um desvio padrão de um, permitindo que o ajuste final não
depend on the scale on which the predictors are measured.

Uma vantagem importante da regressão de ridge é que ela ainda apresenta um bom desempenho, em comparação
ao método dos mínimos quadrados ordinários (Capítulo @ref(regressão-linear)), em uma situação
onde você tem um grande conjunto de dados multivariados com o número de preditores (p) maior que
o número de observações (n).

Uma desvantagem da regressão ridge é que ela incluirá todos os preditores na


modelo final, ao contrário dos métodos de regressão passo a passo (Capítulo @ref(stepwise-
regressão)), que geralmente selecionará modelos que envolvem um conjunto reduzido de variáveis.

A regressão de Ridge reduz os coeficientes em direção a zero, mas não irá zerar nenhum deles.
exatamente a zero. A regressão lasso é uma alternativa que supera essa desvantagem.

Regressão Lasso

Lasso significa Operador de Seleção e Encolhimento Absoluto Mínimo. Ele reduz o


coeficientes de regressão em direção a zero ao penalizar o modelo de regressão com uma penalidade
termo chamado norma L1, que é a soma dos coeficientes absolutos.

No caso da regressão lasso, a penalidade tem o efeito de forçar alguns dos


estimates de coeficientes, com uma contribuição menor para o modelo, para serem exatamente iguais a
zero. Isso significa que o lasso também pode ser visto como uma alternativa à seleção de subconjuntos.
métodos para realizar a seleção de variáveis a fim de reduzir a complexidade do
modelo.

Assim como na regressão de ridge, selecionar um bom valor de λ

para o laço é crítico.

Uma vantagem óbvia da regressão lasso em relação à regressão ridge é que ela produz
modelos mais simples e mais interpretáveis que incorporam apenas um conjunto reduzido dos
preditores. No entanto, nem a regressão ridge nem o lasso dominarão universalmente o
outro.

Geralmente, o lasso pode ter um desempenho melhor em uma situação onde alguns dos preditores têm
grandes coeficientes, e os preditores restantes têm coeficientes muito pequenos.

A regressão Ridge terá um desempenho melhor quando o resultado for uma função de muitos preditores.
todos com coeficientes de tamanho aproximadamente igual (James et al. 2014).

101
Os métodos de validação cruzada podem ser usados para identificar qual dessas duas técnicas é
melhor em um conjunto de dados específico.

Rede Elástica

O Elastic Net produz um modelo de regressão que é penalizado com ambas as normas L1 e
Norma L2. A consequência disso é efetivamente encolher coeficientes (como em ridge
regressão) e definir alguns coeficientes como zero (como no LASSO).

biblioteca(tidyverse)
biblioteca(caret)
biblioteca(glmnet)

Preparando os dados

Usaremos oBostonconjunto de dados [emMASSApacote], introduzido no Capítulo


@ref(análise de regressão), para prever o valor mediano das casas (mdev), em Boston
Subúrbios, com base em múltiplas variáveis preditoras.

Nós dividiremos aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados
dados("Boston", pacote = "MASS")
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- Boston$medv %>%
criarParticaoDeDados(p = 0,8, lista = FALSO)
[Link] <- Boston[[Link], ]
[Link] <- Boston[-[Link], ]

Computando regressão linear penalizada

Você precisa criar dois objetos:

ypara armazenar a variável de resultado


xpara manter as variáveis preditoras. Isso deve ser criado usando a função
[Link]()permitindo transformar automaticamente quaisquer variáveis qualitativas
(se houver) em variáveis fictícias (Capítulo @ref(regressão-com-categórica-
variáveis)), o que é importante porque glmnet() só pode aceitar numéricos,
entradas quantitativas. Depois de criar a matriz do modelo, removemos o intercepto
componente no índice = 1.

Variáveis preditoras
x <- [Link](medv~., [Link])[,-1]
# Outcome variable
y <- [Link]$medv

Funções R

Nós usaremos a função Rglmnet() [pacote glmnet] para computação de linear penalizado
modelos de regressão.

O formato simplificado é o seguinte:

102
glmnet(x, y, alpha = 1, lambda = NULL)

xmatriz de variáveis preditoras


ya resposta ou variável de resultado, que é uma variável binária.

alfao parâmetro de misturamento do elasticnet. Os valores permitidos incluem:

o“1”: for lasso regression

o“0”: for ridge regression

oum valor entre 0 e 1 (digamos 0,3) para regressão elástica.

lambaum valor numérico definindo a quantidade de encolhimento. Deve ser especificado por
analista.

Na regressão penalizada, você precisa especificar uma constantelambdaajustar a quantidade de


a redução do coeficiente. O melhorlambdapara seus dados, pode ser definido como olambda
que minimizam a taxa de erro de previsão da validação cruzada. Isso pode ser determinado
automaticamente usando a funçã[Link]().

Nas seções seguintes, começamos computando regressão ridge, lasso e elastic net
modelos. Em seguida, vamos comparar os diferentes modelos para escolher o melhor para o nosso
dados.

The best model is defined as the model that has the lowest prediction error, RMSE
(Capítulo @ref(métricas-de-precisão-do-modelo-de-regressão)).

Computando a regressão ridge


# Encontre o melhor lambda usando validação cruzada
[Link](123)
cv <- [Link](x, y, alpha = 0)
Exibir o melhor valor de lambda
cv$[Link]
## [1] 0.758
Ajuste o modelo final nos dados de treinamento
model <- glmnet(x, y, alpha = 0, lambda = cv$[Link])
# Exibir coeficientes de regressão
coef(model)
## Matriz esparsa 14 x 1 da classe "dgCMatrix"
## s0
## (Intercept) 28.69633
## crim -0.07285
## zn 0.03417
## indus -0.05745
## chas 2.49123
## nox -11.09232
## rm 3.98132
## age -0.00314
## dis -1.19296
## rad 0.14068
## tax -0.00610
## ptratio -0.86400
preto 0.00937
## lstat -0.47914

103
# Fazer previsões sobre os dados de teste
[Link] <- [Link](medv ~., [Link])[,-1]
predictions <- model %>% predict([Link]) %>% [Link]()
Métricas de desempenho do modelo
[Link](
RMSE = RMSE(previsões, [Link]$medv),
Rsquare = R2(predictions, [Link]$medv)
)
## RMSE Rsquare
## 1 4.98 0.671

Note que, por padrão, a função glmnet() padroniza as variáveis para que suas escalas sejam
comparável. No entanto, os coeficientes são sempre retornados na escala original.

Computando a regressão lasso

A única diferença entre o código R usado para regressão ridge é que, para lasso
regressão você precisa especificar o argumentoalpha = 1 em vez dealpha = 0 (para crista
regressão).

Encontre o melhor lambda usando validação cruzada


[Link](123)
cv <- [Link](x, y, alpha = 1)
Exibir o melhor valor de lambda
cv$[Link]
## [1] 0.00852
Ajuste o modelo final nos dados de treinamento
modelo <- glmnet(x, y, alpha = 1, lambda = cv$[Link])
# Exibir coeficientes de regressão
coef(model)
Matriz esparsa 14 x 1 da classe "dgCMatrix"
## s0
## (Intercepto) 36.90539
## crim -0.09222
## zn 0.04842
## indus -0.00841
## chas 2.28624
## nox -16.79651
## rm 3.81186
## age .
## dis -1.59603
## rad 0.28546
## tax -0.01240
## ptratio -0.95041
## black 0.00965
## lstat -0.52880
# Faça previsões sobre os dados de teste
[Link] <- [Link](medv ~., [Link])[,-1]
predictions <- model %>% predict([Link]) %>% [Link]()
Métricas de desempenho do modelo
[Link](
RMSE = RMSE(predições, [Link]$medv)
Rsquare = R2(predictions, [Link]$medv)
)
## RMSE Rquadrado
## 1 4,99 0,671
Computando a regressão de rede elástica

104
A regressão de rede elastic pode ser facilmente computada usando ocaretfluxo de trabalho, que
invoca oglmnetpackage.

Nós usamoscaretpara selecionar automaticamente os melhores parâmetros de ajustealfaelambda.


Ocaretpacotes testam uma gama de possíveisalfaelambdavalores, então seleciona o
melhores valores para lambda e alpha, resultando em um modelo final que é um modelo de rede elástica.

Aqui, testaremos a combinação de 10 valores diferentes paraalfaelambda. This is


especificado usando a opçãotuneLength.

O melhoralfaelambdaos valores são aqueles que minimizam a validação cruzada


erro (Capítulo @ref(validação cruzada)).

# Build the model using the training set


[Link](123)
modelo <- treinar(
medv ~., dados = [Link], método = "glmnet",
trControl = trainControl("cv", number = 10),
tuneLength = 10
)
Melhor parâmetro de afinação
model$bestTune
alpha lambda
## 6 0.1 0.21
Coeficiente do modelo final. Você precisa
para especificar o melhor lambda
coef(modelo$finalModel, modelo$bestTune$lambda)
Matriz esparsa 14 x 1 da classe "dgCMatrix"
## 1
(Intercept) 33.04083
## crim -0.07898
## zn 0.04136
## indus -0.03093
## chas 2.34443
## nox -14.30442
## rm 3.90863
## age .
## dis -1.41783
## rad 0.20564
## tax -0.00879
## ptratio -0.91214
## black 0.00946
## lstat -0.51770
# Fazer previsões sobre os dados de teste
[Link] <- [Link](medv ~., [Link])[,-1]
predictions <- model %>% predict([Link])
Métricas de desempenho do modelo
[Link](
RMSE = RMSE(predictions, [Link]$medv),
Rsquare = R2(previsões, [Link]$medv)
)
RMSE Rquadrado
## 1 4,98 0,672

Comparando os diferentes modelos

105
As diferentes métricas de desempenho dos modelos são comparáveis. Usando lasso ou elastic net
a regressão define o coeficiente da variável preditoraidadea zero, levando a uma mais simples
modelo em comparação com a regressão ridge, que inclui todas as variáveis preditoras.

Todas as coisas sendo iguais, devemos optar pelo modelo mais simples. No nosso exemplo, podemos escolher
os modelos de regressão lasso ou elastic net.

Observe que podemos calcular e comparar facilmente a regressão ridge, lasso e elastic net.
usando ocaretfluxo de trabalho.

caretirá escolher automaticamente os melhores valores de parâmetro de ajuste, calcular o final


modelar e avaliar o desempenho do modelo usando técnicas de validação cruzada.

Usando o pacote caret

1. Configure uma grade de valores lambda:

lambda <- 10^seq(-3, 3, length = 100)

1. Calcular regressão ridge:

Construa o modelo
[Link](123)
ridge <- treinar(
medv ~., dados = [Link], método = "glmnet"
trControl = trainControl("cv", number = 10),
tuneGrid = [Link](alpha = 0, lambda = lambda)
)
Coeficientes do modelo
coef(ridge$finalModel, ridge$bestTune$lambda)
Faça previsões
predictions <- ridge %>% predict([Link])
# Desempenho da previsão do modelo
[Link](
RMSE = RMSE(predictions, [Link]$medv),
Rsquare = R2(predicoes, [Link]$medv)
)

[Link] regressão lasso:

# Construir o modelo
[Link](123)
lasso <- treinar(
medv ~., dados = [Link], método = "glmnet",
trControl = trainControl("cv", number = 10),
tuneGrid = [Link](alpha = 1, lambda = lambda)
)
# Coeficientes do modelo
coef(lasso$finalModel, lasso$bestTune$lambda)
Faça previsões
previsões <- lasso %>% prever([Link])
# Desempenho da previsão do modelo
[Link](
RMSE = RMSE(predições, [Link]$medv),
Rsquare = R2(predictions, [Link]$medv)
)

106
[Link]ão de rede elástica:

Construir o modelo
[Link](123)
elástico <- treinar(
medv ~., data = [Link], method = "glmnet"
trControl = trainControl("cv", number = 10),
tuneLength = 10
)
# Model coefficients
coef(elastic$finalModel, elastic$bestTune$lambda)
Fazer previsões
predictions <- elastic %>% predict([Link])
# Desempenho da previsão do modelo
[Link](
RMSE = RMSE(predictions, [Link]$medv),
Rsquare = R2(previsões, [Link]$medv)
)

[Link] o desempenho dos modelos:

O desempenho dos diferentes modelos - ridge, lasso e elastic net - pode ser facilmente
comparado usandocaretO melhor modelo é definido como aquele que minimiza o
erro de previsão.

models <- list(ridge = ridge, lasso = lasso, elastic = elastic)


resample(models) %>% resumo( métrica = "RMSE")
##
## Chamada:
## [Link](object = ., metric = "RMSE")
##
## Models: ridge, lasso, elastic
## Number of resamples: 10
##
## RMSE
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## ridge 3.10 3.96 4.38 4.73 5.52 7.43 0
## laço 3.16 4.03 4.39 4.73 5.51 7.27 0
elastic 3.13 4.00 4.37 4.72 5.52 7.32 0

Pode-se ver que o modelo de rede elástica tem o menor RMSE mediano.

Neste capítulo, descrevemos os métodos de regressão penalizados mais comumente usados,


incluindo regressão em ridge, regressão lasso e regressão elastic net. Esses métodos
são muito úteis em uma situação, onde você tem grandes conjuntos de dados multivariados.

107
I.21._Regressão de Componentes Principais e Mínimos Quadrados Parciais
Essenciais
Este capítulo apresenta métodos de regressão baseados em técnicas de redução de dimensionalidade,
o que pode ser muito útil quando você tem um grande conjunto de dados com múltiplas variáveis correlacionadas
variáveis preditoras.

Geralmente, todos os métodos de redução de dimensão funcionam resumindo primeiro o original


previsores em algumas novas variáveis chamadas componentes principais (CPs), que são então
usados como preditores para ajustar o modelo de regressão linear. Esses métodos evitam
multicolinearidade entre preditores, que é um grande problema em configurações de regressão (veja
Capítulo @ref(multicolinearidade)).

Ao usar os métodos de redução de dimensionalidade, é geralmente recomendado que


padronizar cada preditor para torná-los comparáveis. A padronização consiste em
dividindo o preditor pelo seu desvio padrão.

Aqui, descrevemos dois métodos de regressão bem conhecidos baseados na redução de dimensionalidade:
Regressão de Componentes Principais (PCR) e Mínimos Quadrados Parciais (PLS)
regressão. Também fornecemos exemplos práticos em R.

Regressão por componentes principais

A regressão por componentes principais (PCR) primeiro aplicaAnálise de Componentes Principais


sobre o conjunto de dados para resumir as variáveis preditoras originais em algumas novas variáveis também
conhecidos como componentes principais (CPs), que são uma combinação linear dos originais
dados.

Esses PCs são então usados para construir o modelo de regressão linear. O número de principais
componentes, para incorporar no modelo, é escolhido por validação cruzada (cv). Note que,
PCR é adequado quando o conjunto de dados contém preditores altamente correlacionados.

Regressão de mínimos quadrados parciais

Uma possível desvantagem da PCR é que não temos garantia de que o principal selecionado
os componentes estão associados ao resultado. Aqui, a seleção do principal
componentes a serem incorporados no modelo não são supervisionados pela variável de resultado.

Uma alternativa à PCR é a regressão de Mínimos Quadrados Parciais (PLS), que identifica
novos componentes principais que não apenas resumem os preditores originais, mas também que
estão relacionados com o resultado. Esses componentes são então usados para ajustar o modelo de regressão.
Assim, comparado ao PCR, o PLS utiliza uma estratégia de redução de dimensão que é supervisionada pelo
resultado.

Assim como o PCR, o PLS é conveniente para dados com preditores altamente correlacionados. O número de
Os PCs usados em PLS são geralmente escolhidos por validação cruzada. Preditores e o resultado
as variáveis devem ser geralmente padronizadas, para tornar as variáveis comparáveis.

108
tidyversepara fácil manipulação e visualização de dados
caretpara um fluxo de trabalho de aprendizado de máquina fácil

por favor, para calcular PCR e PLS

biblioteca(tidyverse)
biblioteca(caret)
biblioteca(pls)

Nós vamos usar oBostonconjunto de dados [emMASSApacote], introduzido no Capítulo


@ref(análise de regressão), para prever o valor mediano das casas (mdev), em Boston
Subúrbios, com base em múltiplas variáveis preditoras.

Nós vamos dividir aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir uma semente para reprodutibilidade.

# Carregar os dados
data("Boston", package = "MASS")
# Divida os dados em conjunto de treinamento e teste
[Link](123)
[Link] <- Boston$medv %>%
criarPartiçãoDeDados(p = 0,8, lista = FALSO)
[Link] <- Boston[[Link], ]
[Link] <- Boston[-[Link], ]

Cálculo

A função Rtreinar()[careto pacote] fornece um fluxo de trabalho fácil para calcular PCR
e PLS invocando opor favorpacote. Ele tem uma opção chamadamétodo, que pode levar
o valorpcroupor favor.

Um argumento adicional éscale = TRUE para padronizar as variáveis para torná-las


comparável.

caretusa validação cruzada para identificar automaticamente o número ideal de principais


componentes (ncomp) a ser incorporado no modelo.

Aqui, testaremos 10 valores diferentes do parâmetro de ajustencomp. Isso é especificado


usando a opçãotuneLengthO número ótimo de componentes principais é selecionado
para que o erro de validação cruzada (RMSE) seja minimizado.

Computando a regressão por componentes principais

Construa o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
medv~., data = [Link], método = "pcr",
scale = TRUE,
trControl = trainControl("cv", number = 10),
tuneLength = 10
)
# Plotar RMSE do modelo vs diferentes valores de componentes
gráficos(modelo)
Imprima o melhor parâmetro de ajuste ncomp que
minimizar o erro de validação cruzada, RMSE

109
model$bestTune
## ncomp
## 5 5
# Summarize the final model
summary(model$finalModel)
## Data: X dimension: 407 13
## Y dimension: 407 1
## Fit method: svdpc
Número de componentes considerados: 5
## TRAINING: % variance explained
## 1 comps 2 comps 3 comps 4 comps 5 comps
## X 47.48 58.40 68.00 74.75 80.94
## .outcome 38.10 51.02 64.43 65.24 71.17
Fazer previsões
predictions <- model %>% predict([Link])
# Métricas de desempenho do modelo
[Link](
RMSE = caret::RMSE(predictions, [Link]$medv),
Rsquare = caret::R2(predictions, [Link]$medv)
)
## RMSE Rsquare
## 1 5.18 0.645

O gráfico mostra o erro de previsão (RMSE, Capítulo @ref(precisão-do-modelo-de-regressão-


métricas)) feitas pelo modelo de acordo com o número de componentes principais
incorporado no modelo.

Nossa análise mostra que escolher cinco componentes principais (ncomp = 5) fornece o
menor erro de previsão RMSE.

Oresumo()function also provides the percentage of variance explained in the


preditores (x) e no resultado (medv) usando diferentes números de componentes.

Por exemplo, 80,94% da variação (ou informação) contida nos preditores são
capturado por 5 componentes principais (ncomp = 5). Adicionalmente, definindo ncomp = 5,
captura 71% das informações na variável de resultado ( medv), que é bom.

Tomados em conjunto, a validação cruzada identifica ncomp = 5 como o número ideal de PCs que
minimize the prediction error (RMSE) and explains enough variation in the predictors
e no resultado.

110
Computando mínimos quadrados parciais

O código R é exatamente como o do método PCR.

Construa o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
medv~., dados = [Link], método = "pls",
scale = TRUE,
trControl = trainControl("cv", number = 10),
tuneLength = 10
)
# Gráfico de RMSE do modelo vs diferentes valores de componentes
gráfico(modelo)
# Imprima o melhor parâmetro de ajuste ncomp que
minimizar o erro de validação cruzada, RMSE
model$bestTune
## ncomp
## 9 9
Resumir o modelo final
resumo(model$finalModel)
## Dados: X dimensão: 407 13
## Y dimension: 407 1
## Fit method: oscorespls
Número de componentes considerados: 9
## TRAINING: % variance explained
## 1 comps 2 comps 3 comps 4 comps 5 comps 6 comps 7
compostos
## X 46,19 57,32 64,15 69,76 75,63 78,66
82,85
## .outcome 50.90 71.84 73.71 74.71 75.18 75.35
75,42
## 8 comp 9 comp
## X 85.92 90.36
## .outcome 75.48 75.49
Fazer previsões
predictions <- model %>% predict([Link])
# Métricas de desempenho do modelo
[Link](
RMSE = caret::RMSE(predictions, [Link]$medv),
Rsquare = caret::R2(predictions, [Link]$medv)
)
## RMSE Rsquare
## 1 4.99 0.671

111
O número ideal de componentes principais incluídos no modelo PLS é 9. Isso
captura 90% da variação nos preditores e 75% da variação no resultado
variável (medv).

Em nosso exemplo, o erro de validação cruzada RMSE obtido com o modelo PLS é menor
do que o RMSE obtido usando o método PCR. Portanto, o modelo PLS é o melhor modelo,
para explicar nossos dados, em comparação com o modelo PCR.

Este capítulo descreve métodos de regressão baseados em componentes principais, incluindo


regressão por componentes principais (PCR) e regressão por mínimos quadrados parciais (PLS). Estes
métodos são muito úteis para dados multivariados contendo preditores correlacionados.

A presença de correlação nos dados permite resumir os dados em poucos não-


componentes redundantes que podem ser usados no modelo de regressão.

Comparado à regressão ridge e lasso (Capítulo @ref(regressão-penalizada)), o final


Os modelos de PCR e PLS são mais difíceis de interpretar, porque não realizam nenhuma
tipo de seleção de variáveis ou até mesmo produzir diretamente estimativas de coeficientes de regressão.

112
PARTE II– CLASSIFICATION
MÉTODOS

113
II.1._ Essenciais dos Métodos de Classificação

Anteriormente, descrevemos o modelo de regressão (Capítulo @ref(regressão-


analysis)), which is used to predict a quantitative or continuous outcome variable based
em uma ou várias variáveis preditoras.

Na classificação, a variável de resultado é qualitativa (ou categórica). Classificação


refere-se a um conjunto de métodos de aprendizado de máquina para prever a classe (ou categoria) de
indivíduos com base em uma ou mais variáveis preditoras.

Nesta parte, cobriremos os seguintes tópicos:

A regressão logística, para tarefas de classificação binária (Capítulo @ref(logistic-


regressão))
Regressão logística passo a passo e penalizada para seleção de variáveis (Capítulo
@ref(regressão logística passo a passo) e @ref(regressão logística penalizada)

Suposições e diagnósticos da regressão logística (Capítulo @ref(logistic-


supondo-regressão-e-diagnósticos

A regressão logística multinomial, uma extensão da regressão logística para


tarefas de classificação multiclasse (Capítulo @ref(regressão-logística-multinomial)).

Análise discriminante, para problemas de classificação binária e multiclasse (Capítulo


@ref(análise-discriminante))

Classificador Naive Bayes (Capítulo @ref(classificador-naive-bayes))

Máquinas de vetores de suporte (Capítulo @ref(máquina-de-vetores-de-suporte))

Avaliação de modelos de classificação (Capítulo @ref(avaliação-do-modelo-de-classificação))

A maioria dos algoritmos de classificação calcula a probabilidade de pertencer a um dado


classe. As observações são então atribuídas à classe que tem a maior pontuação de probabilidade.

Generally, you need to decide a probability cutoff above which you consider the an
observação como pertencente a uma determinada classe.

conjunto
Conjunto de dados PimaIndiansDiabetes2

O conjunto de dados de diabetes dos índios Pima está disponível emmlbenchpacote. Ele será usado
para classificação binária.

Carregar o conjunto de dados


dados("PimaIndiansDiabetes2", pacote = "mlbench")
# Inspecionar os dados
cabeça(PimaIndiansDiabetes2, 4)
## pregnant glucose pressure triceps insulin mass pedigree age
diabetes

114
## 1 6 148 72 35 NA 33.6 0.627 50
pos
## 2 1 85 66 29 NA 26.6 0.351 31
não
## 3 8 183 64 NA NA 23.3 0.672 32
pos
## 4 1 89 66 23 94 28.1 0.167 21
neg

Os dados contêm 768 indivíduos (feminino) e 9 variáveis clínicas para prever o


probabilidade de indivíduos serem diabéticos positivos ou negativos:

pregnant: number of times pregnant


glucose: plasma glucose concentration

pressure: diastolic blood pressure (mm Hg)

triceps: triceps skin fold thickness (mm)

insulin: 2-Hour serum insulin (mu U/ml)

massa: índice de massa corporal (peso em kg/(altura em m)^2)

pedigree: diabetes pedigree function

age: age (years)

diabetes: class variable

Conjunto de dados Iris

Oíriso conjunto de dados será utilizado para tarefas de classificação multiclasse. Ele contém o comprimento
e largura dos sépalas e pétalas para três espécies de íris. Queremos prever a espécie.
baseado nos parâmetros do sépala e da pétala.

# Carregar os dados
dados("íris")
Inspecionar os dados
cabeça(iris, 4)
## [Link] [Link] [Link] [Link] Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa

115
II.2._ Essenciais da Regressão Logística em R

A regressão logística é usada para prever a classe (ou categoria) de indivíduos com base em um
ou múltiplas variáveis preditoras (x). É usado para modelar um resultado binário, ou seja, um
variável, que pode ter apenas dois valores possíveis: 0 ou 1, sim ou não, doente ou não-
doente.

A regressão logística pertence a uma família chamada Modelo Linear Generalizado (GLM),
desenvolvido para estender o modelo de regressão linear (Capítulo @ref(regressão-linear))
para outras situações. Outros sinônimos são regressão logística binária, logística binomial
modelo de regressão e logit.

A regressão logística não retorna diretamente a classe das observações. Ela nos permite
estime a probabilidade (p) de pertencimento à classe. A probabilidade variará entre 0
e 1. Você precisa decidir a probabilidade limite na qual a categoria muda de uma
para o outro. Por padrão, isso está definido parap = 0.5, mas na realidade deveria ser decidido com base em
o propósito da análise.

Neste capítulo você aprenderá como:

Define the logistic regression equation and key terms such as log-odds and logit
Realize uma regressão logística e interprete os resultados

Função logística

A função padrão de regressão logística, para prever o resultado de uma observação


dada uma variável preditora (x), é uma curva em forma de S definida comop = exp(y) / [1 +
exp(y)](James et al. 2014). Isso também pode ser simplesmente escrito comop = 1/[1 + exp(-y)],
onde:

y = b0 + b1*x,
exp()é o exponencial e

pé a probabilidade de um evento ocorrer (1) dadox. Matematicamente, isso é escrito


comop(event=1|x) e abreviado comop(x), entãopx = 1/[1 + exp(-(b0 +
b1*x))]

Por um pouco de manipulação, pode-se demonstrar quep/(1-p) = exp(b0 + b1*x). Por


tomando o logaritmo de ambos os lados, a fórmula se torna uma combinação linear de
preditores:log[p/(1-p)] = b0 + b1*x.

Quando você tem várias variáveis preditoras, a função logística se parece com:log[p/(1-
p)] = b0 + b1*x1 + b2*x2 + ... + bn*xn

b0 eb1são os coeficientes beta da regressão. Um positivob1indica que aumentarx


será associado ao aumentop. Por outro lado, um negativob1indica que o aumento
xestará associado à diminuiçãop.

116
A quantidadelog[p/(1-p)]é chamado de logaritmo do ímpar, também conhecido como log-ímpar
orlogit.

As probabilidades refletem a probabilidade de que o evento ocorra. Pode ser visto como a razão de
"sucessos" para "não-sucessos". Tecnicamente, as chances são a probabilidade de um evento
dividido pela probabilidade de que o evento não ocorra (P. Bruce e Bruce 2017).
Por exemplo, se a probabilidade de ser positivo para diabetes é 0,5, a probabilidade de
"não será" é 1-0,5 = 0,5, e as odds são 1,0.

Observe que a probabilidade pode ser calculada a partir das odds comop = Chances / (1 + Chances).

tidyversepara fácil manipulação e visualização de dados


caretpara um fluxo de trabalho de aprendizado de máquina fácil

biblioteca(tidyverse)
biblioteca(caret)
defina_tema(tema_bw())

Preparando os dados

A regressão logística funciona para dados que contêm preditores contínuos e/ou categóricos.
variáveis.

Realizar os seguintes passos pode melhorar a precisão do seu modelo

Remover potenciais outliers


Certifique-se de que as variáveis preditoras estão distribuídas normalmente. Se não estiverem, você pode
use log, raiz, transformação de Box-Cox.

Remova preditores altamente correlacionados para minimizar o sobreajuste. A presença de


preditores altamente correlacionados podem levar a uma solução de modelo instável.

Aqui, usaremos oDiabetes2 dos Índios Pima[emmlbenchpacote], introduzido em


Capítulo @ref(classification-in-r), para prever a probabilidade de ter diabetes
positivo com base em múltiplas variáveis clínicas.

Vamos dividir aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados e remover NAs


dados("PimaIndiansDiabetes2", pacote = "mlbench")
PimaIndiansDiabetes2 <- [Link](PimaIndiansDiabetes2)
# Inspecionar os dados
amostra_n(PimaIndiansDiabetes2, 3)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- PimaIndiansDiabetes2$diabetes %>%
createDataPartition(p = 0.8, lista = FALSE)
[Link] <- PimaIndiansDiabetes2[[Link], ]
[Link] <- PimaIndiansDiabetes2[-[Link], ]

117
Computando regressão logística

A função Rglm(), para o modelo linear generalizado, pode ser utilizado para calcular logística
regressão. Você precisa especificar a opçãofamily = binomial, que diz a R que
queremos ajustar uma regressão logística.

Código R de início rápido

# Ajustar o modelo
modelo <- glm( diabetes ~., dados = [Link], família = binomial)
# Resumir o modelo
resumo(modelo)
Fazer previsões
probabilities <- model %>% predict([Link], type = "response")
[Link] <- ifelse(probabilities > 0.5, "pos", "neg")
Precisão do modelo
média([Link] == [Link]$diabetes)

Regressão logística simples

A regressão logística simples é utilizada para prever a probabilidade de pertencimento a uma classe.
baseado em uma única variável preditora.

O seguinte código R constrói um modelo para prever a probabilidade de ter diabetes.


positivo baseado na concentração de glicose no plasma:

modelo <- glm( diabetes ~ glicose, dados = [Link], família =


binomial
resumo(modelo)$coef
## Estimativa Erro Padrão valor z Pr(>|z|)
## (Intercept) -6.3267 0.7241 -8.74 2.39e-18
## glucose 0.0437 0.0054 8.09 6.01e-16

A saída acima mostra a estimativa dos coeficientes beta da regressão e seus


níveis de significância. O intercepto (b0) é -6,32 e o coeficiente da variável glicose é
0,043.

A equação logística pode ser escrita comop = exp(-6.32 + 0.043*glucose)/ [1 +


exp(-6.32 + 0.043*glucose)]. Usando esta fórmula, para cada novo plasma de glicose
valor de concentração, você pode prever a probabilidade dos indivíduos terem diabetes
positivo.

Previsões podem ser facilmente feitas usando a funçãoprever(). Use the option type =
resposta para obter diretamente as probabilidades

newdata <- [Link](glucose = c(20, 180))


probabilidades <- modelo %>% prever(novosdados, tipo = "resposta")
[Link] <- ifelse(probabilities > 0.5, "pos", "neg")
[Link]

A função logística fornece uma curva de probabilidade em forma de S ilustrada da seguinte maneira:

118
[Link] %>%
mutar(prob = se(diabetes == "pos", 1, 0)) %>%
ggplot(aes(glicose, prob)) +
geom_point(alpha = 0.2) +
geom_smooth(method = "glm", [Link] = list(family = "binomial"))
+
laboratórios(
title = "Logistic Regression Model",
x = "Plasma Glucose Concentration",
y = "Probability of being diabete-pos"
)

Regressão logística múltipla

The multiple logistic regression is used to predict the probability of class membership
baseado em várias variáveis preditoras, como segue:

modelo <- glm( diabetes ~ glicose + massa + grávida,


dados = [Link], família = binomial
resumo(modelo)$coef

Aqui, queremos incluir todas as variáveis preditoras disponíveis no conjunto de dados. Isso é
feito usando~.:

modelo <- glm( diabetes ~., dados = [Link], família = binomial)


resumo(modelo)$coef
## Estimativa Erro Padrão valor z Pr(>|z|)
## (Intercepto) -9.50372 1.31719 -7.215 5.39e-13
## pregnant 0.04571 0.06218 0.735 4.62e-01
## glucose 0.04230 0.00657 6.439 1.20e-10
## pressure -0.00700 0.01291 -0.542 5.87e-01
## triceps 0.01858 0.01861 0.998 3.18e-01
## insulin -0.00159 0.00139 -1.144 2.52e-01
## mass 0.04502 0.02887 1.559 1.19e-01
## pedigree 0.96845 0.46020 2.104 3.53e-02
## age 0.04256 0.02158 1.972 4.86e-02

A partir da saída acima, a tabela de coeficientes mostra as estimativas dos coeficientes beta e
seus níveis de significância. As colunas são:

Estimativao intercepto (b0) e as estimativas do coeficiente beta associadas a


cada variável preditora

119
Erro Padrãoo erro padrão das estimativas dos coeficientes. Isso representa o
a precisão dos coeficientes. Quanto maior o erro padrão, menos confiantes estamos.
são sobre a estimativa.

valor zo z-estatístico, que é a estimativa do coeficiente (coluna 2) dividida por


o erro padrão da estimativa (coluna 3)

Pr(>|z|)O valor p correspondente à estatística z. Quanto menor o valor p,


quanto mais significativo for a estimativa.

Observe que, as funçõescoef()eresumo()pode ser usado para extrair apenas o


coeficientes, conforme a seguir:

coef(model)
resumo(modelo)$coef

Interpretation

Pode-se ver que apenas 5 dos 8 preditores estão significativamente associados ao


resultado. Isso inclui: grávida, glicose, pressão, massa e pedigree.

A estimativa do coeficiente da variávelglicoseb = 0,045, que é positivo. Isso


significa que um aumento na glicose está associado a um aumento na probabilidade de ser
diabetes-positivo. No entanto, o coeficiente para a variávelpressãob = -0,007
o que é negativo. Isso significa que um aumento na pressão arterial estará associado a
uma probabilidade reduzida de ser positivo para diabetes.

Um conceito importante a ser compreendido, para interpretar os coeficientes beta logísticos, é o


razão de chances. Uma razão de chances mede a associação entre uma variável preditora (x) e
a variável de resultado (y). Ela representa a razão das chances de que um evento ocorra
(event = 1) dada a presença do preditor x (x = 1), em comparação com as probabilidades da
evento ocorrendo na ausência daquele preditor (x = 0).

Para um determinado preditor (digamos x1), o coeficiente beta associado (b1) na logística
a função de regressão corresponde ao log da razão de chances para esse preditor.

Se a razão de chances é 2, então as chances de que o evento ocorra (event = 1) são duas vezes
maior quando o preditor x está presentex = 1) versus x está ausente (x = 0).

Por exemplo, o coeficiente de regressão para a glicose é 0,042. Isso indica que uma unidade
o aumento da concentração de glicose aumentará as chances de ser positivo para diabetes
por exp(0.042) 1,04 vezes.

A partir dos resultados da regressão logística, pode-se notar que algumas variáveis - tríceps,
insulina e idade - não são estatisticamente significativas. Mantê-las no modelo pode
contribuir para o overfitting. Portanto, eles devem ser eliminados. Isso pode ser feito
automaticamente usando técnicas estatísticas, incluindo regressão passo a passo e penalizada
métodos de regressão. Estes métodos são descritos na próxima seção. Resumidamente, eles
consiste em selecionar um modelo otimizado com um conjunto reduzido de variáveis, sem
comprometendo a precisão do modelo.

120
Aqui, como temos um pequeno número de preditores (n = 9), podemos selecionar manualmente o mais
significativo

modelo <- glm( diabetes ~ grávidas + glicose + pressão + massa +


pedigree
dados = [Link], família = binomial)

Fazendo previsões

Faremos previsões usando os dados de teste para avaliar o desempenho de nosso


modelo de regressão logística.

O procedimento é o seguinte:

1. Prever as probabilidades de pertencimento à classe de observações com base em preditores


variáveis
2. Atribua as observações à classe com a maior pontuação de probabilidade (ou seja, acima de
0.5)

A função Rprever()pode ser usado para prever a probabilidade de ter diabetes


positivo, dados os valores preditores.

Prever as probabilidades de ser positivo para diabetes:

probabilidades <- modelo %>% prever([Link], tipo = "resposta")


cabeça(probabilidades)
## 21 25 28 29 32 36
## 0.3914 0.6706 0.0501 0.5735 0.6444 0.1494

A quais classes essas probabilidades se referem? No nosso exemplo, a saída é a


probabilidade de que o teste de diabetes seja positivo. Sabemos que esses valores correspondem
à probabilidade do teste ser positivo, em vez de negativo, porque o
contrastes()a função indica que R criou uma variável fictícia com um 1 para "pos"
e "0" para negativo. As probabilidades sempre se referem à classe codificada como "1".

Verifique a codificação fictícia:

contrastes([Link]$diabetes)
## pos
## neg 0
## pos 1

Prever a classe de indivíduos:

O seguinte código R categoriza indivíduos em dois grupos com base em suas previsões
probabilidades (p) de ser positivo para diabetes. Indivíduos, com p acima de 0,5 (aleatório
adivinhando), são considerados como positivos para diabetes.

[Link] <- ifelse(probabilities > 0.5, "pos", "neg")


cabeça([Link])
## 21 25 28 29 32 36
["neg","pos","neg","pos","pos","neg"]
Avaliação da precisão do modelo

121
A precisão do modelo é medida como a proporção de observações que foram
classificado corretamente. Inversamente, o erro de classificação é definido como a proporção de
observações que foram mal classificadas.

Proporção de observações classificadas corretamente:

média([Link] == [Link]$diabetes)
## [1] 0.756

A precisão da previsão de classificação é de cerca de 76%, o que é bom. O


a taxa de erro de classificação é de 24%.

Observe que existem várias métricas para avaliar o desempenho de uma classificação.
modelo (Capítulo @ref(avaliação-do-modelo-de-classificação)).

Neste capítulo, descrevemos como a regressão logística funciona e fornecemos


Códigos R para calcular regressão logística. Além disso, demonstramos como fazer
previsões e avaliar a precisão do modelo. A saída do modelo de regressão logística é muito
fácil de interpretar em comparação com outros métodos de classificação. Além disso, devido ao seu
a simplicidade é menos propensa ao overfitting do que métodos flexíveis, como árvores de decisão.

Observe que muitos conceitos de regressão linear são válidos para a regressão logística.
modelagem. Por exemplo, você precisa realizar alguns diagnósticos (Capítulo @ref(logistic-
embasamento das suposições e diagnósticos) para garantir que as suposições feitas por
o modelo está adequado para seus dados.

Além disso, você precisa medir quão bom o modelo é em prever o resultado de
novas observações de dados de teste. Aqui, descrevemos como calcular a classificação bruta
exatidão, mas não existe aquela outra métrica de desempenho importante (Capítulo
@ref(avaliação-do-modelo-de-classificação)

Em uma situação em que você tem muitos preditores para selecionar, sem comprometer
a precisão da previsão, uma lista mínima de variáveis preditoras que mais contribuem para
o modelo utilizando regressão stepwise (Capítulo @ref(regressão-logística-stepwise)) e
técnicas de regressão lasso (Capítulo @ref(regressão-logística-penalizada)).

Além disso, você pode adicionar termos de interação no modelo ou incluir termos de spline.

Os mesmos problemas relacionados a variáveis de confusão e correlacionadas se aplicam à logística


regressão (ver Capítulo @ref(confounding-variables) e @ref(multicollinearity)).

Você também pode ajustar modelos aditivos generalizados (Capítulo @ref(polynomial-and-spline-


regressão)), quando a linearidade do preditor não pode ser assumida. Isso pode ser feito usando
omgcvpackage:

biblioteca("mgcv")
Ajuste o modelo
[Link] <- gam(diabetes ~ s(glicose) + massa + grávida,
data = [Link], family = "binomial")

122
Resumir modelo
resumo([Link])
Faça previsões
probabilities <- [Link] %>% predict([Link], type = "response")
[Link] <- ifelse(probabilidades > 0.5, "pos", "neg")
# Model Accuracy
média([Link] == [Link]$diabetes)

A regressão logística é limitada apenas a problemas de classificação de duas classes. Existe um


extensão, chamada regressão logística multinomial, para problema de classificação multiclass
(Chapter @ref(multinomial-logistic-regression)).

Observe que o método mais popular para tarefas multiclasses é o Discriminante Linear
Análise (Capítulo @ref(análise-discriminante)).

123
II.3._ Elementos Essenciais da Regressão Logística Sequencial em R

A regressão logística em etapas consiste em selecionar automaticamente um número reduzido de


variáveis preditoras para construir o modelo de regressão logística de melhor desempenho. Leia
mais em Capítulo @ref(stepwise-regression).

Este capítulo descreve como calcular a regressão logística passo a passo em R.

biblioteca(tidyverse)
biblioteca(caret)

Conjunto de dados:Diabetes2 dos Índios Pima[emmlbenchpacote], apresentado no Capítulo


@ref(classificacao-em-r), para prever a probabilidade de ser positivo para diabetes com base
em várias variáveis clínicas.

Dividiremos aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados e remover NAs


dados("PimaIndiansDiabetes2", pacote = "mlbench")
PimaIndiansDiabetes2 <- [Link](PimaIndiansDiabetes2)
# Inspecionar os dados
amostra_n(PimaIndiansDiabetes2, 3)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- PimaIndiansDiabetes2$diabetes %>%
createDataPartition(p = 0.8, list = FALSO)
[Link] <- PimaIndiansDiabetes2[[Link], ]
[Link] <- PimaIndiansDiabetes2[-[Link], ]
Cálculo da regressão logística passo a passo

A regressão logística passo a passo pode ser facilmente calculada usando a função R
stepAIC()disponível no pacote MASS. Ele realiza seleção de modelo pelo AIC. Tem
uma opção chamadadireção, que pode ter os seguintes valores: “ambos”, “para frente”,
“para trás” (veja o Capítulo @ref(regressão-stepwise)).

Quick start R code


biblioteca(MASS)
Ajuste o modelo
modelo <- glm(diabetes ~., dados = [Link], família = binomial) %>%
stepAIC(trace = FALSO)
Resumir o modelo final selecionado
resumo(modelo)
Fazer previsões
probabilidades <- modelo %>% prever([Link], tipo = "resposta")
[Link] <- ifelse(probabilidades > 0.5, "pos", "neg")
Precisão do modelo
média([Link]==[Link]$diabetes)

124
Modelo de regressão logística completa

Modelo completo incorporando todos os preditores:

[Link] <- glm(diabetes ~., dados = [Link], família = binomial)


coef([Link])
## (Intercept) pregnant glucose pressure triceps
insulina
## -9.50372 0.04571 0.04230 -0.00700 0.01858
-0.00159
## mass pedigree age
## 0.04502 0.96845 0.04256
Realizar seleção de variáveis passo a passo

Selecione as variáveis mais contributivas:

biblioteca(MASS)
[Link] <- [Link] %>% stepAIC(trace = FALSE)
coef([Link])
## (Intercept) glucose mass pedigree age
## -9.5612 0.0379 0.0523 0.9697 0.0529

A função escolheu um modelo final em que uma variável foi removida do


modelo completo original. O preditor descartado é:tríceps.

Compare os modelos completo e o modelo passo a passo

Aqui, vamos comparar o desempenho dos modelos logísticos completo e o passo a passo.
o melhor modelo é definido como o modelo que possui a menor taxa de erro de classificação em
prevendo a classe de novos dados de teste:

Precisão da previsão do modelo de regressão logística completo:

# Fazer previsões
probabilidades <- [Link] %>% prever([Link], tipo = "resposta")
[Link] <- ifelse(probabilities > 0.5, "pos", "neg")
Precisão na previsão
[Link] <- [Link]$diabetes
média(previsõ[Link] == [Link])
0,808

Precisão da previsão do modelo de regressão logística passo a passo:

Fazer previsões
probabilities <- predict([Link], [Link], type = "response")
[Link] <- ifelse(probabilities > 0.5, "pos", "neg")
Precisão da previsão
[Link] <- [Link]$diabetes
média([Link] == [Link])
## [1] 0.795

125
I.7._ Regressão Linear Múltipla em R

A regressão linear múltipla é uma extensão de


II.4._ Essenciais da Regressão Logística Penalizada em R: Ridge, Lasso e
Rede Elástica

Quando você tem várias variáveis em seu modelo de regressão logística, pode ser útil
encontrar um conjunto reduzido de variáveis que resulta em um modelo de desempenho otimizado (ver Capítulo
@ref(regressão-penalizada)).

A regressão logística penalizada impõe uma penalização ao modelo logístico por ter muito
muitas variáveis. Isso resulta na diminuição dos coeficientes dos menos contributivos
variáveis em direção a zero. Isso também é conhecido como regularização.

As regressões penalizadas mais comumente utilizadas incluem:

regressão de ridge: variáveis com contribuição menor têm seus coeficientes próximos
a zero. No entanto, todas as variáveis estão incorporadas no modelo. Isso é útil
quando todas as variáveis precisam ser incorporadas no modelo de acordo com o domínio
conhecimento.
regressão lasso: os coeficientes de algumas variáveis menos contributivas são forçados
ser exatamente zero. Apenas as variáveis mais significativas são mantidas no final
modelo.

regressão elástica: a combinação da regressão ridge e lasso. Ela encolhe


alguns coeficientes em direção a zero (como regressão de ridge) e definir alguns coeficientes
a exatamente zero (como a regressão lasso)

Este capítulo descreve como calcular a regressão logística penalizada, como a lasso.
regressão, para selecionar automaticamente um modelo ótimo contendo o mais
variáveis preditoras contributivas.

biblioteca(tidyverse)
biblioteca(caret)
biblioteca(glmnet)

Preparando os dados

Conjunto de dados:DiabetesTipo2PimaÍndios[emmlbenchpacote], introduzido no Capítulo


@ref(classification-in-r), para prever a probabilidade de ser positivo para diabetes com base
em múltiplas variáveis clínicas.

Vamos dividir aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir uma semente para reprodutibilidade.

# Carregar os dados e remover NAs


dados("PimaIndiansDiabetes2", pacote = "mlbench")
PimaIndiansDiabetes2 <- [Link](PimaIndiansDiabetes2)
# Inspecionar os dados
sample_n(PimaIndiansDiabetes2, 3)
# Split the data into training and test set
[Link](123)
[Link] <- PimaIndiansDiabetes2$diabetes %>%
createDataPartition(p = 0.8, list = FALSE)

127
[Link] <- PimaIndiansDiabetes2[[Link], ]
[Link] <- PimaIndiansDiabetes2[-[Link], ]

Cálculo da regressão logística penalizada

A função [Link]()ajuda a criar a matriz de preditores e também


converte automaticamente preditores categóricos em variáveis dummy apropriadas, que são
exigido para oglmnet()função.

Código de exemplo para variáveis preditoras categóricas


x <- [Link](diabetes~., [Link])[,-1]
Converta o resultado (classe) em uma variável numérica
y <- ifelse([Link]$diabetes == "pos", 1, 0)

Funções R

Usaremos a função Rglmnet()[pacote glmnet] para calcular logística penalizada


regressão.

O formato simplificado é o seguinte:

glmnet(x, y, família = "binomial", alpha = 1, lambda = NULL)

xmatriz de variáveis preditoras


ya variável de resposta ou resultado, que é uma variável binária.

famíliao tipo de resposta. Use "binomial" para uma variável de resultado binária

alfao parâmetro de mistura elasticnet. Os valores permitidos incluem:

o“1”: for lasso regression

o“0”: for ridge regression

oum valor entre 0 e 1 (digamos 0,3) para regressão elástica.

lambaum valor numérico definindo a quantidade de encolhimento. Deve ser especificado por
analista.

Na regressão penalizada, você precisa especificar uma [Link] a quantidade de


o encolhimento do coeficiente. O melhorlambdapara seus dados, pode ser definido como olambda
que minimiza a taxa de erro de previsão da validação cruzada. Isso pode ser determinado
automaticamente usando a funçã[Link]().

No seguinte código R, mostraremos como calcular a regressão lasso especificando o


opçãoalpha = 1Você também pode tentar a regressão ridge, usandoalpha = 0, ver
qual é melhor para seus dados.

Código R para início rápido

Ajuste o modelo de regressão penalizado por lasso:

biblioteca(glmnet)

128
Encontre o melhor lambda usando validação cruzada
[Link](123)
[Link] <- [Link](x, y, alpha = 1, family = "binomial")
Ajuste o modelo final nos dados de treinamento
modelo <- glmnet(x, y, alpha = 1, família = "binomial",
lambda = [Link]$[Link]
# Exibir coeficientes de regressão
coef(modelo)
# Fazer previsões nos dados de teste
[Link] <- [Link](diabetes ~., [Link])[,-1]
probabilidades <- modelo %>% prever(novoX = [Link])
[Link] <- ifelse(probabilities > 0.5, "pos", "neg")
Precisão do modelo
[Link] <- [Link]$diabetes
média([Link] == [Link])

Calcular regressão lasso

Encontre o valor ótimo de lambda que minimiza o erro de validação cruzada:


biblioteca(glmnet)
[Link](123)
[Link] <- [Link](x, y, alpha = 1, family = "binomial")
plot([Link])

O gráfico exibe o erro de validação cruzada de acordo com o log de lambda. A esquerda
a linha vertical tracejada indica que o log do valor ótimo de lambda é
aproximadamente -5, que é o que minimiza o erro de previsão. Este lambda
o valor dará o modelo mais preciso. O valor exato delambdapode ser visto como
seguir

[Link]$[Link]
0,00871

Geralmente, o propósito da regularização é equilibrar precisão e simplicidade. Isto


significa, um modelo com o menor número de preditores que também concede uma boa precisão.
Para isso, a funçã[Link]()também encontra o valor delambdaque dá o
modelo mais simples, mas também está dentro de um erro padrão do valor ótimo delambda.
Esse valor é chamadolambda.1se.

[Link]$lambda.1se
0,0674

[Link] o melhor lambda, fornece os seguintes coeficientes de regressão:

129
coef([Link], [Link]$[Link])
Matriz esparsa 9 x 1 da classe "dgCMatrix"
## 1
(Intercept) -8.615615
## pregnant 0.035076
## glucose 0.036916
## pressão
## triceps 0.016484
## insulin -0.000392
## mass 0.030485
## pedigree 0.785506
## age 0.036265

Do resultado acima, apenas os viáveistriceps tem um coeficiente exatamente igual a zero.

Usandolambda.1secomo o melhor lambda, fornece os seguintes coeficientes de regressão:

coef([Link], [Link]$lambda.1se)
Matriz esparsa 9 x 1 da classe "dgCMatrix"
## 1
## (Intercept) -4.65750
grávida
## glucose 0.02628
pressão
## triceps 0.00191
insulina
## mass .
## pedigree .
## age 0.01734

Usandolambda.1se, apenas 5 variáveis têm coeficientes não nulos. Os coeficientes de todos


outras variáveis foram definidas como zero pelo algoritmo lasso, reduzindo a complexidade de
o modelo.

Definir lambda = lambda.1se produz um modelo mais simples em comparação com [Link], mas
o modelo pode ser um pouco menos preciso do que o obtido com [Link].

Nas próximas seções, vamos calcular o modelo final [Link] então avaliar
a precisão do modelo em relação aos dados de teste. Também discutiremos os resultados obtidos por
ajustando o modelo usandolambda = lambda.1se.

Calcule o modelo final de lasso:

Calcule o modelo final [Link]:

Modelo final com [Link]


[Link] <- glmnet(x, y, alpha = 1, família = "binomial"
lambda = [Link]$[Link]
# Fazer previsão nos dados de teste
[Link] <- [Link](diabetes ~., [Link])[,-1]
probabilidades <- [Link] %>% prever(novo_x = [Link])
[Link] <- ifelse(probabilities > 0.5, "pos", "neg")
Precisão do modelo
[Link] <- [Link]$diabetes
média([Link] == [Link])
0.769

130
Calcule o modelo final usandolambda.1se:

# Modelo final com lambda.1se


[Link] <- glmnet(x, y, alpha = 1, família = "binomial",
lambda = [Link]$lambda.1se
Fazer previsão em dados de teste
[Link] <- [Link](diabetes ~., [Link])[,-1]
probabilities <- [Link] %>% predict(newx = [Link])
[Link] <- ifelse(probabilities > 0.5, "pos", "neg")
Taxa de precisão do modelo
[Link] <- [Link]$diabetes
média([Link] == [Link])
## [1] 0.705

Nas próximas seções, iremos comparar a precisão obtida com a regressão lasso contra
o obtido usando o modelo de regressão logística completo (incluindo todos os preditores).

Calcule o modelo logístico completo

# Ajustar o modelo
[Link] <- glm(diabetes ~., dados = [Link], família = binomial)
Fazer previsões
probabilidades <- [Link] %>% prever([Link], tipo = "resposta")
[Link] <- ifelse(probabilities > 0.5, "pos", "neg")
Precisão do modelo
[Link] <- [Link]$diabetes
média([Link] == [Link])
## [1] 0,808

Este capítulo descreveu como calcular um modelo de regressão logística penalizada em R. Aqui,
focamos no modelo lasso, mas você também pode ajustar a regressão ridge usandoalpha =
0noglmnet()função. Para regressão elastic net, você precisa escolher um valor de
alpha em algum lugar entre 0 e 1. Isso pode ser feito automaticamente usando ocursor
pacote. Veja o Capítulo @ref(regressão-penalizada).

Nossa análise demonstrou que a regressão lasso, [Link] o melhor


lambda, resulta em um modelo mais simples sem comprometer muito o desempenho do modelo
nos dados de teste quando comparados ao modelo logístico completo.

A precisão do modelo que obtivemos comlambda.1seé um pouco menos do que nós


obteve-se com o modelo mais complexo usando todas as variáveis preditoras (n = 8) ou usando
[Link] regressão lasso. Mesmo comlambda.1sea precisão obtida
permanece bom o suficiente além da simplicidade do modelo resultante.

Isso significa que o modelo mais simples obtido com regressão lasso faz pelo menos tão bem um
o trabalho de encaixar as informações nos dados é o mais complicado. De acordo com o
compromisso entre viés e variância, todas as coisas sendo iguais, um modelo mais simples deve ser sempre preferido
porque é menos provável que overfit os dados de treinamento.

Para seleção de variáveis, uma alternativa às técnicas de regressão logística penalizada é


a regressão logística passo a passo descrita no Capítulo @ref(stepwise-logistic-
regressão).

131
II.5._ Suposições e Diagnósticos da Regressão Logística em R

O modelo de regressão logística faz várias suposições sobre os dados.

Este capítulo descreve as principais suposições e fornece um guia prático, em R, para


verifique se essas suposições são verdadeiras para seus dados, o que é essencial para construir um
bom modelo.

Certifique-se de ter lido os essenciais da regressão logística no Capítulo @ref(logistic-


regression).

Suposições da regressão logística

O método de regressão logística assume que:

O resultado é uma variável binária ou dicotômica como sim vs não, positivo vs


negativo, 1 contra 0.
Há uma relação linear entre o logito do resultado e cada
variáveis preditoras. Lembre-se de que a função logit élogit(p) = log(p/(1-p)),
onde p é as probabilidades do resultado (veja o Capítulo @ref(logistic-
regressão)).

Não há valores influentes (valores extremos ou outliers) na contínua.


preditores

Não há altas intercorrelações (ou seja, multicolinearidade) entre os preditores.

Para melhorar a precisão do seu modelo, você deve garantir que essas suposições
valem para os seus dados. Nas seções seguintes, descreveremos como diagnosticar
problemas potenciais nos dados.

tidyversepara fácil manipulação e visualização de dados


vassouracria um data frame organizado a partir dos resultados de testes estatísticos

biblioteca(tidyverse)
biblioteca(broom)
theme_set(theme_classic())
Construindo um modelo de regressão logística

Começamos computando um exemplo de modelo de regressão logística usando o


Diabetes Tipo 2 dos Índios Pima[pacote mlbench], introduzido no Capítulo @ref(classification-
in-r), para prever a probabilidade de positividade no teste de diabetes com base em variáveis clínicas.

# Carregar os dados
dados("PimaIndiansDiabetes2", pacote = "mlbench")
PimaIndiansDiabetes2 <- [Link](PimaIndiansDiabetes2)
Ajuste o modelo de regressão logística
modelo <- glm(diabetes ~., dados = PimaIndiansDiabetes2,
family = binomial)

132
Prever a probabilidade (p) de positividade para diabetes
probabilidades <- prever(modelo, tipo = "resposta")
[Link] <- se(probabilidades > 0.5, "pos", "neg")
cabeça([Link])
## 4 5 7 9 14 15
["neg","pos","neg","pos","pos","pos"]
Diagnósticos de regressão logística

Suposição de linearidade

Aqui, iremos verificar a relação linear entre variáveis preditoras contínuas e o


logit do resultado. Isso pode ser feito inspecionando visualmente o gráfico de dispersão entre
cada preditor e os valores logit.

1. Remova variáveis qualitativas do data frame original e vincule o logit


valores para os dados:

Selecione apenas preditores numéricos


meusdados <- PimaIndiansDiabetes2 %>%
dplyr::select_if([Link])
previsores <- colnames(meudado)
# Vincular o logit e organizar os dados para o gráfico
meusdados <- meusdados %>%
mutar(logit = log(probabilidades/(1-probabilidades))) %>%
gather(key = "predictors", value = "[Link]", -logit)

2. Crie os gráficos de dispersão:

ggplot(meusdados, aes(logit, [Link])) +


geom_point(size = 0.5, alpha = 0.5) +
geom_smooth(método = "loess") +
theme_bw() +
facet_wrap(~preditores, escalas = "livre_y")

133
Os gráficos de dispersão suavizados mostram que as variáveis glicose, massa, grávida, pressão e
os tríceps estão todos bastante linearmente associados ao resultado do diabetes na escala logit.

A variável idade e pedigree não é linear e pode precisar de algumas transformações. Se o


o gráfico de dispersão mostra não linearidade, você precisa de outros métodos para construir o modelo, como
incluindo termos de potência 2 ou 3, polinômios fracionários e função spline (Capítulo
@ref(regressão-poligonal-e-spline)).

Valores influentes

Valores influentes são pontos de dados individuais extremos que podem alterar a qualidade do
modelo de regressão logística.

The most extreme values in the data can be examined by visualizing the Cook’s distance
valores. Aqui rotulamos os 3 maiores valores:

plot(model, which = 4, id.n = 3)

134
Nota que nem todos os outliers são observações influentes. Para verificar se os dados
contém observações potencialmente influentes, o erro residual padronizado pode ser
inspecionado. Pontos de dados com resíduos padronizados absolutos acima de 3 representam
possíveis valores atípicos e podem merecer uma atenção mais próxima.

O seguinte código R calcula os resíduos padronizados (.[Link]) e o


Distância de [Link]) usando a função Raumentar()pacote broom

Extrair resultados do modelo


[Link] <- aumentar(modelo) %>%
mutar índice = 1:n()

Os dados para os 3 maiores valores, de acordo com a distância de Cook, podem ser exibidos
como segue:

[Link] %>% top_n(3, .cooksd)

Plote os resíduos padronizados:

ggplot([Link], aes(index, .[Link])) +


geom_point(aes(cor = diabetes), alpha = .5) +
tema_bw()

135
Filtrar potenciais pontos de dados influentes comabs(.[Link]) > 3:

[Link] %>%
filtrar(abs(.[Link]) > 3)

Não há observações influentes em nossos dados.

Quando você tem outliers em um preditor contínuo, as soluções potenciais incluem:

Removendo os registros pertinentes


Transforme os dados em escala logarítmica

Use métodos não paramétricos

Multicolinearidade

A multicolinearidade corresponde a uma situação em que os dados contêm alta correlação.


variáveis preditoras. Leia mais no Capítulo @ref(multicolinearidade).

A multicolinearidade é um problema importante na análise de regressão e deve ser corrigida por


removendo as variáveis em questão. Pode ser avaliado usando a função Rvif()[car
pacote], que calcula os fatores de inflação da variância:

car::vif(model)
## pregnant glucose pressure triceps insulin mass pedigree
idade
## 1.89 1.38 1.19 1.64 1.38 1.83 1.03
1,97

Como regra geral, um valor de VIF que excede 5 ou 10 indica uma quantidade problemática de
colinearidade. No nosso exemplo, não há colinearidade: todas as variáveis têm um valor de VIF
bem abaixo de 5.

Este capítulo descreve as principais suposições do modelo de regressão logística e fornece


exemplos de código R para diagnosticar potenciais problemas nos dados, incluindo não linearidade
entre as variáveis preditoras e o logaritmo do resultado, a presença de influentes
observações nos dados e multicolinearidade entre preditores.

136
Corrigir esses problemas potenciais pode melhorar consideravelmente a qualidade do modelo.
Veja também, métricas de desempenho adicionais para verificar a validade do seu modelo são
descrito no Capítulo @ref(avaliação-do-modelo-de-classificação).

137
II.6._ Multinomial Logistic Regression Essentials in R

A regressão logística multinomial é uma extensão da regressão logística (Capítulo


@ref(regressão-logística)) para tarefas de classificação multiclasse. É utilizado quando o
o resultado envolve mais do que duas classes.

Neste capítulo, iremos mostrar como calcular a regressão logística multinomial em R.

rede neuralpara calcular a regressão logística multinomial

biblioteca(tidyverse)
biblioteca(caret)
biblioteca(nnet)

Preparando os dados

Nós usaremos oÍrisconjunto de dados, introduzido no Capítulo @ref(classification-in-r), para


prevendo espécies de íris com base nas variáveis preditoras Comprimento.Sépala, Largura.Sépala,
Comprimento da Pétala, Largura da Pétala.

Começamos dividindo aleatoriamente os dados em um conjunto de treinamento (80% para construir um preditivo
modelo) e conjunto de testes (20% para avaliar o modelo). Certifique-se de definir a semente para
reproduzibilidade.

# Load the data


dados("íris")
# Inspecione os dados
amostra_n(iris, 3)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- iris$Espécies %>%
createDataPartition(p = 0.8, list = FALSE)
[Link] <- iris[[Link], ]
[Link] <- iris[-[Link], ]

Computando regressão logística multinomial


# Ajustar o modelo
modelo <- nnet::multinom(Especies ~., dados = [Link])
# Resumir o modelo
resumo(modelo)
Faça previsões
[Link] <- modelo %>% prever([Link])
cabeça([Link])
Precisão do modelo
média([Link] == [Link]$Species)

Model accuracy:
média([Link] == [Link]$Species)
0.967

O nosso modelo é muito bom em prever as diferentes categorias com uma precisão de 97%.

138
Este capítulo descreve como calcular regressão logística multinomial em R. Este
o método é usado para problemas de múltiplas classes. Na prática, não é usado com muita frequência.
A análise discriminante (Capítulo @ref(análise-discriminante)) é mais popular para
classificação multiclasse.

139
II.7._ Elementos Essenciais da Análise Discriminante em R

A análise discriminante é usada para prever a probabilidade de pertencer a uma determinada classe.
(ou categoria) com base em uma ou mais variáveis preditoras. Funciona com contínuo
e/ou variáveis preditoras categóricas.

Anteriormente, descrevemos a regressão logística para classificação de duas classes.


problemas, que é quando a variável de resultado tem dois valores possíveis (0/1, não/sim,
negativo/positivo).

Comparado à regressão logística, a análise discriminante é mais adequada para


prevendo a categoria de uma observação na situação em que a variável de resultado
contém mais de duas classes. Além disso, é mais estável do que a logística
regressão para problemas de classificação multiclasse.

Observe que tanto a regressão logística quanto a análise discriminante podem ser usadas para binário.
tarefas de classificação.

Neste capítulo, você aprenderá as técnicas de análise discriminante mais amplamente utilizadas e
extensões. Além disso, forneceremos código R para realizar os diferentes tipos de
análise.

Os seguintes métodos de análise discriminante serão descritos:

Análise discriminante linear (LDA): Usa combinações lineares de preditores para


prever a classe de uma observação dada. Assume que as variáveis preditoras (p)
são normalmente distribuídos e as classes têm variâncias idênticas (para univariada
análise, p = 1) ou matrizes de covariância idênticas (para análise multivariada, p >
1).
Análise discriminante quadrática (ADQ): Mais flexível que a ADL. Aqui, há
não há pressuposição de que a matriz de covariância das classes seja a mesma.

Análise discriminante de mistura (MDA): Cada classe é assumida como uma Gaussiana
mistura de subclasses.

Análise Discriminante Flexível (FDA): Combinações não lineares de preditores


é usado como splines.

Análise discriminante regularizada (RDA): Regularização (ou encolhimento)


melhora a estimativa das matrizes de covariância em situações onde o número
dos preditores é maior do que o número de amostras nos dados de treinamento. Isso leva
para uma melhoria da análise discriminante.

biblioteca(tidyverse)
biblioteca(caret)
defina_tema(tema_clássico())

Preparando os dados

140
Nós usaremos oírisconjunto de dados, apresentado no Capítulo @ref(classification-in-r), para
prevendo espécies de íris com base nas variáveis preditoras Comprimento.Sépala, Largura.Sépala
Comprimento da Pétala, Largura da Pétala.

A análise de discriminante pode ser afetada pela escala/unidade em que as variáveis preditoras estão.
medido. Geralmente, recomenda-se padronizar/normatizar preditores contínuos
antes da análise.

1. Divida os dados em conjunto de treinamento e conjunto de teste:

# Carregar os dados
data("iris")
Divida os dados em conjunto de treinamento (80%) e conjunto de teste (20%)
[Link](123)
[Link] <- iris$Species %>%
createDataPartition(p = 0.8, list = FALSE)
[Link] <- iris[[Link], ]
[Link] <- iris[-[Link], ]

2. Normalizar os dados. Variáveis categóricas são automaticamente ignoradas.

Estimativa de parâmetros de pré-processamento


[Link] <- [Link] %>%
preProcess(method = c("center", "scale"))
Transforme os dados usando os parâmetros estimados
[Link] <- [Link] %>% predict([Link])
[Link] <- [Link] %>% prever([Link])

Análise discriminante linear - LDA

O algoritmo LDA começa encontrando direções que maximizam a separação entre


classes, então use essas direções para prever a classe de indivíduos. Essas direções,
chamados de discriminantes lineares, são combinações lineares de variáveis preditoras.

A LDA assume que os preditores são distribuídos normalmente (distribuição gaussiana) e que
as diferentes classes têm médias específicas de classe e variância/covariância iguais.

Antes de realizar LDA, considere:

Inspecionando as distribuições univariadas de cada variável e garantindo que elas


normalmente distribuídos. Se não, você pode transformá-los usando logaritmo e raiz para
distribuições exponenciais e Box-Cox para distribuições assimétricas.
remover valores aberrantes dos seus dados e padronizar as variáveis para tornar suas
escala comparável.

A análise discriminante linear pode ser facilmente calculada usando a funçãolda()


[MASS package].

biblioteca(MASS)
Ajuste o modelo
modelo <- lda(Espécies ~ ., dados = [Link])
Faça previsões

141
predictions <- model %>% predict([Link])
Precisão do modelo
média(predictions$class==[Link]$Espécies)

Calcular LDA:
biblioteca(MASS)
model <- lda(Species~., data = [Link])
modelo
## Chamada:
## lda(Especies ~ ., dados = [Link])
##
## Probabilidades a priori dos grupos:
## setosa versicolor virginica
0,333 0,333 0,333
##
## Médias do grupo:
## [Link] [Link] [Link] [Link]
## setosa -1.012 0.787 -1.293 -1.250
## versicolor 0.117 -0.648 0.272 0.154
## virginica 0.895 -0.139 1.020 1.095
##
## Coeficientes de discriminantes lineares:
## LD1 LD2
## [Link] 0.911 0.0318
## [Link] 0.648 0.8985
## [Link] -4.082 -2.2272
## [Link] -2.313 2.6544
##
## Proportion of trace:
## LD1 LD2
## 0.9905 0.0095

LDA determina as médias dos grupos e calcula, para cada indivíduo, a probabilidade de
pertencendo aos diferentes grupos. O indivíduo é então vinculado ao grupo com o
pontuação de maior probabilidade.

Olda()as saídas contêm os seguintes elementos:

Prior probabilities of groups: the proportion of training observations in each


grupo. Por exemplo, há 31% das observações de treinamento na setosa
grupo
Grupo significa: centro de gravidade do grupo. Mostra a média de cada variável em cada
grupo.

Coeficientes de discriminantes lineares: Mostra a combinação linear de preditores


variáveis que são utilizadas para formar a regra de decisão LDA. por exemplo,LD1 =
0,91*Comprimento.Sépala + 0,64*Largura.Sépala - 4,08*Comprimento.Pétala -
2.3*Massa da PétalaDa mesma forma,LD2 = 0.03*Comprimento.Sépala +
0.89*Largura.Sépala - 2.2*Comprimento.Pétala - 2.6*Largura.Pétala.

Usando a funçãográficar()produz gráficos dos discriminantes lineares, obtidos por


calculando LD1 e LD2 para cada uma das observações de treinamento.

plot(model)

142
Faça previsões:
predictions <- model %>% predict([Link])
{"names(predictions)":"nomes(previsões)"}
## [1] "class" "posterior" "x"

Oprever()a função retorna os seguintes elementos:

classe: classes previstas de observações.


posterior: é uma matriz cujas colunas são os grupos, as linhas são os indivíduos
e os valores são a probabilidade posterior de que a observação correspondente
pertence aos grupos.

x: contém os discriminantes lineares, descritos acima

Inspecione os resultados:

# Classes previstas
cabeça(predictions$class, 6)
Probabilidades previstas de pertencimento à classe.
cabeça(predictions$posterior, 6)
Discriminantes lineares
cabeça(predictions$x, 3)

Observe que você pode criar o gráfico LDA usando ggplot2 da seguinte forma:

[Link] <- cbind([Link], predict(model)$x)


ggplot([Link], aes(LD1, LD2)) +
geom_point(aes(cor = Espécie))

Model accuracy:

Você pode calcular a precisão do modelo da seguinte forma:

média(predictions$class==[Link]$Espécies)
## [1] 1

Pode-se ver que nosso modelo classificou corretamente 100% das observações, o que é
excelente.

143
Observe que, por padrão, o limite de probabilidade usado para decidir a afiliação ao grupo é 0,5.
(random guessing). For example, the number of observations in the setosa group can be
recalculado usando:

soma(predictions$posterior[ ,1] >=.5)


## [1] 10

Em algumas situações, você pode querer aumentar a precisão do modelo. Nesse caso
você pode ajustar o modelo ajustando o limite de probabilidade posterior. Por exemplo,
você pode aumentar ou diminuir o corte.

Seleção de variáveis:

Note que, se as variáveis preditoras forem padronizadas antes de calcular a LDA, o


os pesos do discriminador podem ser usados como medidas de importância de variáveis para características
seleção.

Análise discriminante quadrática - ADQ

QDA é um pouco mais flexível do que LDA, no sentido de que não assume a
igualdade de variância/covariância. Em outras palavras, para QDA, a matriz de covariância pode ser
diferente para cada classe.

O LDA tende a ser melhor que o QDA quando você tem um pequeno conjunto de treinamento.

Em contraste, QDA é recomendado se o conjunto de treinamento for muito grande, de modo que a variância de
o classificador não é um grande problema, ou se a suposição de uma matriz de covariância comum
para as K classes é claramente insustentável (James et al. 2014).

A QDA pode ser calculada usando a função Rqda()pacote MASS

biblioteca(MASS)
Ajustar o modelo
modelo <- qda(Especie ~ ., dados = [Link])
modelo
Fazer previsões
predictions <- model %>% predict([Link])
# Precisão do modelo
média(predictions$class == [Link]$Espécies)
Análise discriminante de mistura - ADM

O classificador LDA assume que cada classe vem de uma única normal (ou gaussiana)
distribuição. Isso é muito restritivo.

Para MDA, existem classes, e cada classe é assumida como uma mistura gaussiana de
subclasses, onde cada ponto de dados tem uma probabilidade de pertencer a cada classe. Igualdade
da matriz de covariância, entre classes, ainda é assumida.

biblioteca(mda)
Ajuste o modelo
modelo <- mda(Espécies ~ ., dados = [Link])
modelo

144
# Fazer previsões
[Link] <- model %>% predict([Link])
Precisão do modelo
média([Link] == [Link]$Species)

O MDA pode superar o LDA e o QDA em algumas situações, conforme ilustrado abaixo. Neste
exemplo de dados, temos 3 grupos principais de indivíduos, cada um com 3 não adjacentes
subgrupos. As linhas pretas sólidas no gráfico representam as fronteiras de decisão da LDA,
QDA e MDA. Pode-se ver que o classificador MDA identificou corretamente o
subclasses comparadas ao LDA e QDA, que não foram boas na modelagem disso
dados.

O código para gerar os gráficos acima é deJohn Ramey

Análise discriminante flexível - ADF

FDA é uma extensão flexível de LDA que utiliza combinações não lineares de preditores.
como splines. A FDA é útil para modelar não-normalidade ou não-linearidade multivariada.
relações entre variáveis dentro de cada grupo, permitindo uma maior precisão
classificação.

biblioteca(mda)
Ajustar o modelo
modelo <- fda(Espécie ~ ., dados = [Link])
Faça previsões
[Link] <- model %>% predict([Link])
Precisão do modelo
média([Link] == [Link]$Species)

Análise discriminante regularizada

RDA constrói uma regra de classificação regularizando as matrizes de covariância do grupo


(Friedman 1989) permitindo um modelo mais robusto contra a multicolinearidade nos dados.
Isso pode ser muito útil para um grande conjunto de dados multivariados contendo variáveis altamente correlacionadas
preditores.

A análise discriminante regularizada é uma espécie de compromisso entre LDA e QDA.


Lembre-se de que, na LDA, assumimos a igualdade da matriz de covariância para todas as classes. QDA

145
assume diferentes matrizes de covariância para todas as classes. Discriminante regularizado
A análise é um intermediário entre LDA e QDA.

O RDA reduz as covariâncias separadas do QDA em direção a uma covariância comum, assim como no LDA.
Isso melhora a estimativa das matrizes de covariância em situações onde o número de
os preditores é maior do que o número de amostras nos dados de treinamento, potencialmente levando
para uma melhoria da precisão do modelo.

biblioteca(klaR)
Ajustar o modelo
modelo <- rda(Especies~., dados = [Link])
Fazer previsões
predictions <- model %>% predict([Link])
# Model accuracy
média(predictions$class == [Link]$Species)

Descrevemos a análise discriminante linear (LDA) e extensões para prever o


classe de uma observação com base em múltiplas variáveis preditoras. A análise discriminante é
mais adequado para problemas de classificação multiclasse em comparação com a regressão logística
(Capítulo @ref(regressão-logística)).

LDA assume que as diferentes classes têm a mesma variância ou matriz de covariância. Nós
descrevemos muitas extensões do LDA neste capítulo. A extensão mais popular de
LDA é a análise discriminante quadrática (QDA), que é mais flexível do que LDA em
o sentido de que não assume a igualdade das matrizes de covariância do grupo.

LDA tende a ser melhor do que QDA para pequenos conjuntos de dados. QDA é recomendado para grandes conjuntos.
conjunto de dados de treinamento.

146
II.8._ Essenciais do Classificador Naive Bayes

O classificador Naive Bayes é um método simples e poderoso que pode ser usado para binário
e problemas de classificação multiclasse.

O classificador Naive Bayes prevê a probabilidade de pertencimento à classe das observações usando
O teorema de Bayes, que se baseia na probabilidade condicional, que é a probabilidade de
algo acontecer, dado que algo mais já ocorreu.

As observações são atribuídas à classe com a maior pontuação de probabilidade.

Neste capítulo, você aprenderá como realizar a classificação de naive Bayes em R usando o
klaRecaretpacote.

biblioteca(tidyverse)
biblioteca(caret)

Preparando os dados

As variáveis preditoras de entrada podem ser variáveis categóricas e/ou numéricas.

Aqui, usaremos oDiabetes2 dos Índios Pima[emmlbenchpacote], introduzido em


Capítulo @ref(classification-in-r), para prever a probabilidade de ter diabetes
positivo com base em múltiplas variáveis clínicas.

Vamos dividir os dados aleatoriamente em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados e remover NAs


dados("PimaIndiansDiabetes2", pacote = "mlbench")
PimaIndiansDiabetes2 <- [Link](PimaIndiansDiabetes2)
# Inspecionar os dados
amostra_n(PimaIndiansDiabetes2, 3)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- PimaIndiansDiabetes2$diabetes %>%
createDataPartition(p = 0.8, list = FALSE)
[Link] <- PimaIndiansDiabetes2[[Link], ]
[Link] <- PimaIndiansDiabetes2[-[Link], ]

Computando Naive Bayes


biblioteca("klaR")
Ajustar o modelo
modelo <- NaiveBayes(diabetes ~., dados = [Link])
# Fazer previsões
predictions <- model %>% predict([Link])
Precisão do modelo
média(predições$class == [Link]$diabetes)
0.821
Usando o pacote caret do R

147
OcaretO pacote R pode treinar automaticamente o modelo e avaliar a precisão do modelo
usando validação cruzada k-fold Capítulo @ref(validação-cruzada).

biblioteca(klaR)
Construir o modelo
[Link](123)
modelo <- treinar(diabetes ~., dados = [Link], método = "nb",
trControl = trainControl("cv", number = 10))
Fazer previsões
[Link] <- model %>% predict([Link])
Precisão do modelo n
média([Link] == [Link]$diabetes)

This chapter introduces the basics of Naive Bayes classification and provides practical
exemplos em R usando oklaRecaretpacote.

148
II.19_Modelo SVM: Essenciais da Máquina de Vetores de Suporte

Máquina de Vetores de Suporte (ou SVM) é uma técnica de aprendizado de máquina usada para
tarefas de classificação. Resumidamente, SVM funciona identificando a fronteira de decisão ótima
que separa pontos de dados de diferentes grupos (ou classes) e, em seguida, prevê a classe
de novas observações com base nesta fronteira de separação.

Dependendo das situações, os diferentes grupos podem ser separáveis por uma linha reta linear.
linha ou por uma linha de limite não linear.

Os métodos de máquinas de vetores de suporte podem lidar com limites de classe lineares e não lineares.
Pode ser usado tanto para problemas de classificação de duas classes quanto para problemas de classificação de múltiplas classes.

Nos dados da vida real, a fronteira de separação é geralmente não linear. Tecnicamente, o SVM
o algoritmo realiza uma classificação não linear usando o que é chamado detruque do núcleo. O
As transformações de núcleo mais comumente usadas são o núcleo polinomial e o núcleo radial.

Note que, há também uma extensão do SVM para regressão, chamada vetor de suporte
regressão.

Neste capítulo, descreveremos como construir um classificador SVM usando o pacote caretR.

biblioteca(tidyverse)
library(caret)

conjunto

Data set: Diabetes tipo 2 dos Índios Pima[emmlbenchpacote], introduzido no Capítulo


@ref(classification-in-r), para prever a probabilidade de ser positivo para diabetes com base
em múltiplas variáveis clínicas.

Dividiremos aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados
dados("PimaIndiansDiabetes2", pacote = "mlbench")
[Link] <- [Link](PimaIndiansDiabetes2)
# Inspecionar os dados
amostra_n([Link], 3)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- [Link]$diabetes %>%
createDataPartition(p = 0.8, list = FALSE)
[Link] <- [Link][[Link], ]
[Link] <- [Link][-[Link], ]
Classificador linear SVM

No exemplo a seguir, as variáveis são normalizadas para tornar sua escala comparável. Isso
é feito automaticamente antes de construir o classificador SVM configurando a opção
preProcess = c("center","scale").

149
Ajuste o modelo no conjunto de treinamento
[Link](123)
model <- train(
diabetes ~., dados = [Link], método = "svmLinear",
trControl = trainControl("cv", number = 10),
preProcess = c("center","scale")
)
Faça previsões com os dados de teste
[Link] <- model %>% predict([Link])
cabeça([Link])
## [1] neg pos neg pos pos neg
## Levels: neg pos
Calcule a taxa de precisão do modelo
média([Link] == [Link]$diabetes)
0.782

Observe que há um parâmetro de ajusteC, também conhecido como Custo, que determina o
possíveis classificações incorretas. Essencialmente, isso impõe uma penalidade ao modelo por fazer um
erro: quanto maior o valor de C, menos provável é que o algoritmo SVM irá
classificar incorretamente um ponto.

Por padrãocaretconstrói o classificador linear SVM usandoC = 1Você pode verificar isso por
digitandomodelono console do R.

É possível calcular automaticamente SVM para diferentes valores de `C e escolher o


óptimo que maximize a precisão de validação cruzada do modelo.

O seguinte código R calcula SVM para um conjunto de valores de grade deC e escolha automaticamente o
modelo final para previsões:

# Ajuste o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
diabetes ~., dados = [Link], método = "svmLinear",
trControl = trainControl("cv", número = 10),
tuneGrid = [Link](C = seq(0, 2, length = 20)),
preProcess = c("center","scale")
)
# Traçar a precisão do modelo vs diferentes valores de Custo
plot(model)

# Imprima o melhor parâmetro de ajuste C que


maximiza a precisão do modelo
model$bestTune

150
## C
## 12 1.16
# Fazer previsões nos dados de teste
[Link] <- model %>% predict([Link])
# Calcular taxa de precisão do modelo
média([Link] == [Link]$diabetes)
## [1] 0,782
Classificador SVM usando Kernel Não Linear

Para construir um classificador SVM não-linear, podemos usar o kernel polinomial ou radial
função do núcleo. Novamente, ocachimboo pacote pode ser usado para calcular facilmente o
modelo polinomial e o SVM radial não linear.

O pacote escolhe automaticamente os valores ótimos para os parâmetros de ajuste do modelo,


onde o ótimo é definido como valores que maximizam a acurácia do modelo.

Computando SVM usando o kernel de base radial:

Ajuste o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
diabetes ~., dados = [Link], método = "svmRadial",
trControl = trainControl("cv", number = 10),
preProcess = c("center","scale"),
tuneLength = 10
)
Imprima o melhor parâmetro de ajuste sigma e C que
maximiza a precisão do modelo
model$bestTune
## sigma C
## 1 0.136 0.25
Faça previsões sobre os dados de teste
[Link] <- model %>% predict([Link])
Calcular a taxa de precisão do modelo
média([Link] == [Link]$diabetes)
## [1] 0,795

Computando SVM usando kernel de base polinomial:

Ajuste o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
diabetes ~., dados = [Link], método = "svmPoly"
trControl = trainControl("cv", number = 10),
preProcess = c("center","scale"),
tuneLength = 4
)
Imprima o melhor parâmetro de ajuste sigma e C que
maximiza a precisão do modelo
model$bestTune
Escala de grau C
## 8 1 0.01 2
# Fazer previsões sobre os dados de teste
[Link] <- model %>% predict([Link])
Calcular a taxa de precisão do modelo
média([Link] == [Link]$diabetes)
## [1] 0.795

151
Em nossos exemplos, pode-se ver que o classificador SVM usando um kernel não linear dá um
resultado melhor em comparação ao modelo linear.

Este capítulo descreve como usar máquinas de vetor de suporte para tarefas de classificação. Outros
existem alternativas, como a regressão logística (Capítulo @ref(regressão-logística)).

Você precisa avaliar o desempenho de diferentes métodos em seus dados para


escolha o melhor.

152
II.10._ Avaliação da Precisão do Modelo de Classificação: Essenciais

Após construir um modelo de classificação preditiva, você precisa avaliar o desempenho.


do modelo, que é quão bom o modelo é em prever o resultado de novos
dados de teste de observações que não foram usados para treinar o modelo.

Em outras palavras, você precisa estimar a precisão da previsão do modelo e os erros de previsão.
usando um novo conjunto de dados de teste. Porque sabemos o resultado real das observações em
o conjunto de dados de teste, o desempenho do modelo preditivo pode ser avaliado comparando-se o
valores de resultado previstos contra os valores de resultado conhecidos.

Este capítulo descreve as métricas e métodos comumente utilizados para avaliar o


desempenho de modelos de classificação preditiva, incluindo:

Acurácia média de classificação, representando a proporção de acertos.


observações classificadas.
Matriz de confusão, que é uma tabela 2x2 mostrando quatro parâmetros, incluindo o
number of true positives, true negatives, false negatives and false positives.

Precisão, Revocação e Especificidade, que são três principais métricas de desempenho


describing a predictive classification model

A curva ROC, que é um resumo gráfico do desempenho geral do


modelo, mostrando a proporção de verdadeiros positivos e falsos positivos em todas as possibilidades
valores de corte de probabilidade. A Área Sob a Curva (AUC) resume a
desempenho geral do classificador.

Vamos fornecer exemplos práticos em R para calcular essas métricas acima, bem como,
crie o gráfico ROC.

biblioteca(tidyverse)
biblioteca(caret)
Construindo um modelo de classificação

Para manter as coisas simples, faremos uma classificação binária, onde o resultado
a variável pode ter apenas dois valores possíveis: negativo vs positivo.

Vamos calcular um exemplo de modelo de análise discriminante linear usando o


Diabetes2 dos Indígenas Pima[pacote mlbench], introduzido no Capítulo @ref(classificacao-
para prever a probabilidade de positividade no teste de diabetes com base em variáveis clínicas.

1. Divida os dados em conjunto de treinamento (80%, usado para construir o modelo) e conjunto de teste (20%,
usado para avaliar o desempenho do modelo):

# Carregar os dados
dados("PimaIndiansDiabetes2", pacote = "mlbench")
[Link] <- [Link](PimaIndiansDiabetes2)
# Inspecionar os dados

153
amostra_n([Link], 3)
# Dividir os dados em conjunto de treinamento e teste
[Link](123)
[Link] <- [Link]$diabetes %>%
createDataPartition(p = 0.8, list = FALSE)
[Link] <- [Link][[Link], ]
[Link] <- [Link][-[Link], ]

2. Ajuste o modelo LDA no conjunto de treinamento e faça previsões nos dados de teste:

biblioteca(MASS)
# Ajustar LDA
ajuste <- lda(diabetes ~., dados = [Link])
Faça previsões sobre os dados de teste
predictions <- predict(fit, [Link])
[Link] <- predictions$posterior[,2]
[Link] <- previsões$class
[Link] <- [Link]$diabetes

Precisão geral da classificação

A taxa de precisão da classificação geral corresponde à proporção de observações


que foram corretamente classificados. Determinar a precisão bruta da classificação é o
primeiro passo na avaliação do desempenho de um modelo.

Inversamente, a taxa de erro de classificação é definida como a proporção de observações que


foram mal [Link] rate = 1 - accuracy

A precisão e o erro de classificação bruta podem ser facilmente calculados comparando-se o


classes observadas nos dados de teste em comparação com as classes previstas pelo modelo:

accuracy <- mean([Link] == [Link])


precisão
## [1] 0,808
erro <- média([Link] != [Link])
erro
## [1] 0,192

Na saída acima, a análise discriminante linear previu corretamente o


resultado individual em 81% dos casos. Isso é de longe melhor do que adivinhação aleatória. O
A taxa de erro de classificação pode ser calculada como 100 - 81% = 19%.

Em nosso exemplo, um classificador binário pode cometer dois tipos de erros:

pode atribuir incorretamente um indivíduo positivo para diabetes ao diabetes-


categoria negativa
pode atribuir incorretamente um indivíduo que é negativo para diabetes ao diabetes-
categoria positiva.

A proporção desses dois tipos de erros pode ser determinada criando uma confusão
matriz, que compara os valores de resultados previstos com os resultados conhecidos
valores.

154
matriz de confusão

A função Rtabela()pode ser usado para produzir uma matriz de confusão para
determine how many observations were correctly or incorrectly classified. It compares
os valores de resultado observados e previstos e mostra o número de corretos e
previsões incorretas categorizadas por tipo de resultado.

Matriz de confusão, número de casos


tabela([Link], [Link])
## [Link]
## [Link] neg pos
## neg 48 4
## pos 11 15
# Matriz de confusão, proporção de casos
tabela([Link], [Link]) %>%
[Link]() %>% round(digits = 3)
## [Link]
## [Link] neg pos
## neg 0.615 0.051
## pos 0.141 0.192

Os elementos diagonais da matriz de confusão indicam previsões corretas, enquanto a


as diagonais representam previsões incorretas. Assim, a taxa de classificação correta é a
soma dos números na diagonal dividida pelo tamanho da amostra nos dados de teste. Em nosso
exemplo, que é (48 + 15)/78 = 81%.

Cada célula da tabela tem um significado importante:

Verdadeiros positivos (d): estes são casos em que prevemos que os indivíduos seriam
seja positivo para diabetes e eles eram.
Verdadeiros negativos (a): Predizemos que a diabetes era negativa, e os indivíduos estavam
diabetes-negativo.

False positives(b): We predicted diabetes-positive, but the individuals didn’t


na verdade, tem diabetes. (Também conhecido como erro Tipo I.)

Falsos negativos (c): Previmos que estavam negativos para diabetes, mas eles tinham diabetes.
(Também conhecido como erro Tipo II.)

Tecnicamente, a precisão bruta da previsão do modelo é definida como(VerdadeirosPositivos +


VerdadeirosNegativos)/TamanhoAmostral.

Precision, Recall and Specificity

155
Além da precisão bruta da classificação, existem muitas outras métricas que são
amplamente utilizado para examinar o desempenho de um modelo de classificação, incluindo:

A precisão, que é a proporção de verdadeiros positivos entre todos os indivíduos que têm
foi previsto como positivo para diabetes pelo modelo. Isso representa a precisão de um
resultado positivo [Link]ão = Verdadeiros Positivos / (Verdadeiros Positivos +
FalsosPositivos).

A Sensibilidade (ou Recall), que é a Taxa de Verdadeiros Positivos (TPR) ou a proporção de


identificou positivos entre a população diabética positiva (classe = 1).Sensitivity =
VerdadeirosPositivos/(VerdadeirosPositivos + FalsosNegativos).

Especificidade, que mede a Taxa de Verdadeiro Negativo (TVN), ou seja, a proporção de


identificados negativos entre a população diabetes-negativa (classe = 0).Especificidade
= VerdadeirosNegativos / (VerdadeirosNegativos + FalsosNegativos).

Taxa de Falsos Positivos (FPR), que representa a proporção de positivos identificados


entre os indivíduos saudáveis (ou seja, negativos para diabetes). Isso pode ser visto como um falso alarme.
A FPR também pode ser calculada como1-specificity. Quando positivos são raros, o FPR
pode ser alto, levando à situação em que um positivo previsto é mais provável de ser um negativo.

Sensibilidade e Especificidade são comumente usadas para medir o desempenho de um


modelo preditivo.

As métricas mencionadas acima podem ser facilmente calculadas usando a função


matrizDeConfusão()[pacote caret].

Em um cenário de duas classes, você pode precisar especificar o argumento [Link], que
é uma string de caráter para o nível do fator que corresponde a um resultado "positivo" (se isso
faz sentido para seus dados). Se houver apenas dois níveis de fator, o padrão é usar o
primeiro nível como o resultado “positivo”.

confusionMatrix([Link], [Link],
positive = "pos")
## Confusion Matrix and Statistics
##
## Referência
## Prediction neg pos
## neg 48 11
## pos 4 15
##
## Precisão : 0.808
## 95% CI : (0.703, 0.888)
## No Information Rate : 0.667
## P-Value [Acc > NIR] : 0.00439
##
## Kappa : 0.536
## Mcnemar's Test P-Value : 0.12134
##
## Sensitivity : 0.577
## Specificity : 0.923
## Valor de Predição Positiva : 0.789
## Neg Pred Value : 0.814
## Prevalence : 0.333

156
## Detection Rate : 0.192
## Prevalência de Detecção : 0.244
## Balanced Accuracy : 0.750
##
## 'Positive' Class : pos
##

Os resultados acima mostram diferentes métricas estatísticas, dentre as quais a mais importante
incluir:

a tabela cruzada entre a previsão e o resultado conhecido de referência


a precisão do modelo, 81%

okappa(54%), que é a precisão corrigida para a sorte.

Em nosso exemplo, a sensibilidade é de ~58%, que é a proporção de positivos para diabetes.


indivíduos que foram corretamente identificados pelo modelo como positivos para diabetes.

A especificidade do modelo é de ~92%, ou seja, a proporção de negativos para diabetes


indivíduos que foram corretamente identificados pelo modelo como negativos para diabetes.

A precisão do modelo ou a proporção do valor preditivo positivo é de 79%.

Na ciência médica, sensibilidade e especificidade são duas métricas importantes que


caracterizar o desempenho do classificador ou teste de triagem. A importância entre
a sensibilidade e a especificidade dependem do contexto. Geralmente, estamos preocupados com um
dessas métricas.

Na diagnose médica, como no nosso exemplo, provavelmente estaremos mais preocupados com
diagnóstico positivo mínimo errado. Portanto, estamos mais preocupados com a alta Especificidade.
Aqui, a especificidade do modelo é de 92%, o que é muito bom.

Em algumas situações, podemos estar mais preocupados em ajustar um modelo para que o
a sensibilidade/precisão é melhorada. Para isso, você pode testar diferentes limites de probabilidade para
decida quais indivíduos são positivos e quais são negativos.

Observe que, aqui usamosp > 0,5como o limiar de probabilidade acima do qual, nós
declara os indivíduos envolvidos como positivos para diabetes. No entanto, se estivermos preocupados
sobre prever incorretamente o status positivo para diabetes em indivíduos que realmente são
positivo, então podemos considerar diminuir esse limite:p > 0,2.

Curva ROC

Introdução

A curva ROC (ou curva de características de operação do receptor) é um gráfico popular


medida para avaliar o desempenho ou a precisão de um classificador, que
corresponde à proporção total de observações classificadas corretamente.

Por exemplo, a precisão de um teste diagnóstico médico pode ser avaliada considerando
os dois tipos possíveis de erros: falsos positivos e falsos negativos. Na classificação

157
ponto de vista, o teste será declarado positivo quando a previsão correspondente
a probabilidade, retornada pelo algoritmo classificador, está acima de um limite fixo. Isso
o limiar é geralmente definido como 0,5 (ou seja, 50%), que corresponde à adivinhação aleatória
probabilidade.

Portanto, em referência ao nosso exemplo de dados sobre diabetes, para um determinado ponto de corte de probabilidade fixo:

a taxa (ou fração) de verdadeiros positivos é a proporção de positivos identificados


entre a população positiva para diabetes. Lembre-se de que isso também é conhecido como o
sensibilidade do modelo de classificador preditivo.
e a taxa de falsos positivos é a proporção de positivos identificados entre os
indivíduos saudáveis (ou seja, negativos para diabetes). Isso também é definido como1-
especificidadeonde a especificidade mede a taxa de falsos negativos, ou seja,
proporção de negativos identificados entre a população sem diabetes.

Como geralmente não sabemos o limite de probabilidade com antecedência, a curva ROC é
tipicamente usado para traçar a taxa de verdadeiro positivo (ou sensibilidade no eixo y) contra o falso
taxa positiva (ou "1-especificidade" no eixo x) em todos os possíveis limites de probabilidade. Isso mostra
a troca entre a taxa na qual você pode prever corretamente algo com a taxa
de prever algo incorretamente. Outra representação visual do gráfico ROC é
simplesmente exiba a sensibilidade em relação à especificidade.

A Área Sob a Curva (AUC) resume o desempenho geral do


classificador, sobre todos os possíveis limites de probabilidade. Representa a capacidade de uma classificação
algoritmo para distinguir 1s de 0s (ou seja, eventos de não eventos ou positivos de
negativos).

Para um bom modelo, a curva ROC deve subir acentuadamente, indicando que o verdadeiro positivo
a taxa (eixo y) aumenta mais rapidamente do que a taxa de falsos positivos (eixo x) à medida que a probabilidade
o limiar diminui.

Assim, o "ponto ideal" é o canto superior esquerdo do gráfico, que é uma taxa de falsos positivos de
zero e uma taxa de verdadeiro positivo de um. Isso não é muito realista, mas isso significa que o
quanto maior o AUC, melhor o classificador.

A métrica AUC varia entre 0,50 (classificador aleatório) e 1,00. Valores acima de 0,80 são
uma indicação de um bom classificador.

Nesta seção, vamos mostrar como calcular e plotar a curva ROC em R para duas classes
e tarefas de classificação multiclasse. Usaremos a análise discriminante linear para classificar
indivíduos em grupos.

Computando e plotando a curva ROC

A análise ROC pode ser facilmente realizada usando o pacote RpROC.

biblioteca(pROC)
# Calcular roc
[Link] <- roc([Link], [Link])
[Link]([Link], [Link] = TRUE)

158
A linha diagonal cinza representa um classificador não melhor do que o acaso aleatório.

Um classificador altamente performático terá uma curva ROC que sobe acentuadamente em direção ao canto superior esquerdo.
isso irá identificar corretamente muitos positivos sem classificar erroneamente muitos negativos
como positivos.

No nosso exemplo, a AUC é 0,85, o que está próximo do máximo (máx = 1). Portanto, nosso
o classificador pode ser considerado muito bom. Um classificador que não desempenha melhor do que
a chance é esperada para ter um AUC de 0,5 quando avaliada em um conjunto de teste independente não
usado para treinar o modelo.

Se quisermos um modelo de classificador com uma especificidade de pelo menos 60%, então a sensibilidade é
cerca de 0,88%. O limite de probabilidade correspondente pode ser extraído da seguinte forma:

Extraia alguns resultados interessantes


[Link] <- data_frame(
thresholds = [Link]$thresholds,
sensitivity = [Link]$sensitivities,
specificity = [Link]$specificities
)
Obtenha o limiar de probabilidade para especificidade = 0.6
[Link] %>% filtrar(especificidade >= 0.6)
## # Um tibble: 44 x 3
## thresholds sensitivity specificity
##
## 1 0.111 0.885 0.615
## 2 0.114 0.885 0.635
## 3 0.114 0.885 0.654
## 4 0.115 0.885 0.673
## 5 0.119 0.885 0.692
## 6 0.131 0.885 0.712
## # ... com mais 38 linhas

O melhor limiar com a maior soma de sensibilidade + especificidade pode ser impresso como
siga. Pode haver mais de um limiar.

[Link]([Link], [Link] = TRUE, [Link] = "melhor")

159
Aqui, o melhor ponto de corte de probabilidade é 0,335 resultando em um classificador preditivo com um
especificidade de 0,84 e uma sensibilidade de 0,660.

Note que,[Link] ser também um vetor numérico contendo uma definição direta de
os limiares para exibir:

[Link]([Link], [Link] = c(0.3, 0.5, 0.7))

Várias curvas ROC

Se você tiver variáveis de agrupamento em seus dados, pode desejar criar múltiplas ROC
curvas no mesmo gráfico. Isto pode ser feito usando ggplot2.

# Crie uma variável de agrupamento


glucose <- ifelse([Link]$glucose < 127.5, "[Link]", "[Link]")
age <- ifelse([Link]$age < 28.5, "young", "old")
[Link] <- [Link] %>%
filtrar(thresholds != -Inf) %>%
mutate(glucose = glucose, age = age)
Criar curva ROC
ggplot([Link], aes(especificidade, sensibilidade)) +
geom_path(aes(cor = idade))+
scale_x_reverse(expand = c(0,0))+
scale_y_continuous(expand = c(0,0))+
geom_abline(intercept = 1, slope = 1, tipo_de_linha = "tracejada")+
tema_bw()

160
Configurações multiclasse

Começamos construindo um modelo de discriminante linear usando oírisconjunto de dados, que contém
o comprimento e a largura das sépalas e pétalas de três espécies de íris. Queremos prever o
espécies com base nos parâmetros do sépala e pétala usando LDA.

# Carregar os dados
dados("íris")
# Split the data into training (80%) and test set (20%)
[Link](123)
[Link] <- iris$Espécies %>%
createDataPartition(p = 0.8, list = FALSO)
[Link] <- iris[[Link], ]
[Link] <- iris[-[Link], ]
Construa o modelo no conjunto de treinamento
biblioteca(MASS)
modelo <- lda(Species ~., dados = [Link])

Métricas de desempenho (sensibilidade, especificidade, …) do modelo preditivo podem ser


calculado, separadamente para cada classe, comparando cada nível de fator com os níveis restantes
(ou seja, uma abordagem "um contra todos").

# Fazer previsões nos dados de teste


predictions <- model %>% predict([Link])
# Model accuracy
matrizDeConfusão(predições$class, dadosTeste$Espécies)
## Matriz de Confusão e Estatísticas
##
## Referência
## Prediction setosa versicolor virginica
## setosa 10 0 0
## versicolor 0 10 0
## virginica 0 0 10
##
## Overall Statistics
##
## Accuracy : 1
## 95% CI : (0.884, 1)
## No Information Rate : 0.333
## Valor-P [Acc > NIR] : 4.86e-15
##
## Kappa : 1
## Mcnemar's Test P-Value : NA
##
Estatísticas por Classe:
##
## Class: setosa Class: versicolor Class:
virginica
## Sensitivity 1.000 1.000
1.000
## Specificity 1.000 1.000
1.000
## Pos Pred Value 1.000 1.000
1.000
## Neg Pred Value 1.000 1.000
1.000
## Prevalence 0.333 0.333
0,333

161
## Detection Rate 0.333 0.333
0,333
## Detection Prevalence 0.333 0.333
0,333
## Balanced Accuracy 1.000 1.000
1.000

Observe que as curvas ROC são geralmente usadas em classificação binária, mas não para
problemas de classificação multiclasse.

Este capítulo descreveu diferentes métricas para avaliar o desempenho da classificação


modelos. Essas métricas incluem:

acurácia de classificação
matriz de confusão

Precisão, Revocação e Especificidade,

e curva ROC

Para avaliar o desempenho dos modelos de regressão, leia o Capítulo @ref(regressão-


métricas-de-precisão-do-modelo)

162
PARTE III– MÁQUINA ESTATÍSTICA
APRENDIZAGEM

163
III.1._ Fundamentos de Aprendizado de Máquina Estatístico

A aprendizagem de máquina estatística refere-se a um conjunto de poderosos algoritmos automatizados que são
usado para prever uma variável de resultado com base em múltiplas variáveis preditoras. O
os algoritmos melhoram automaticamente seu desempenho através do "aprendizado" com os dados,
ou seja, eles são orientados por dados e não buscam impor uma estrutura linear ou qualquer outra estrutura geral em
os dados (P. Bruce e Bruce 2017). Isso significa que eles são não paramétricos.

Os diferentes métodos de aprendizado de máquina podem ser usados para ambos:

classificação, onde a variável de resultado é uma variável categórica, por exemplo


positive vs negative
e regressão, onde a variável resposta é uma variável contínua.

In this part, we’ll cover the following methods:

K-Vizinhos Mais Próximos, que prevê o resultado de uma nova observação x como o
resultado médio das k observações mais semelhantes a x (Capítulo @ref(knn-k-
vizinhos mais próximos)).
As árvores de decisão, que constroem um conjunto de regras de decisão descrevendo a relação
entre os preditores e o resultado. Essas regras são usadas para prever o resultado
de novas observações (Capítulo @ref(modelos de árvore de decisão)).

Aprendizado em conjunto, incluindo bagging, floresta aleatória e boosting. Esses


Os algoritmos de aprendizado de máquina são baseados em árvores de decisão. Eles produzem muitas árvores.
modelos a partir dos conjuntos de dados de treinamento e usar a média como o modelo preditivo.
Estes resultados das técnicas de modelagem preditiva de melhor desempenho. Veja o Capítulo
@ref(bagging-e-floresta-aleatória) e @ref(impulsionamento).

164
III.2._ KNN: Essenciais dos K-Vizinhos Mais Próximos

O algoritmo de K-vizinhos mais próximos (KNN) é um método simples de aprendizado de máquina usado
tanto para classificação quanto para regressão. O algoritmo kNN prevê o resultado de um novo
observação comparando-a com k casos semelhantes no conjunto de dados de treinamento, onde k é definido
pelo analista.

Neste capítulo, começamos descrevendo os fundamentos do algoritmo KNN para ambos


configurações de classificação e regressão. Em seguida, fornecemos um exemplo prático em R para
preparando os dados e computando o modelo KNN.

Além disso, você aprenderá a fazer previsões e a avaliar o desempenho do


modelo construído na previsão do resultado de novas observações de teste.

Algoritmo KNN

Algoritmo KNN para classificação:

Para classificar uma nova observação dada (new_obs), o método dos k-vizinhos mais próximos começa
identificando as k observações de treinamento mais semelhantes (ou seja, vizinhos) à nossa new_obs,
e então atribui new_obs à classe que contém a maioria de seus vizinhos.

Algoritmo KNN para regressão:

Da mesma forma, para prever um valor contínuo de resultado para uma nova observação dada (nova_obs),
o algoritmo KNN calcula o valor médio do resultado das k observações de treinamento
que são os mais semelhantes a new_obs, e retorna este valor como new_obs previsto
valor do resultado.

Medidas de similaridade:

Note que, a (des)similaridade entre as observações é geralmente determinada usando


Medida de distância euclidiana, que é muito sensível à escala na qual o preditor
medidas variáveis são feitas. Portanto, é geralmente recomendado padronizar (ou seja,
normalizar) as variáveis preditoras para tornar suas escalas comparáveis.

As seções a seguir mostram como construir um modelo preditivo de k-vizinhos mais próximos para
configurações de classificação e regressão.

biblioteca(tidyverse)
library(caret)

Classificação

165
Conjunto de dados:DiabetesTipo2DosÍndiosPima[emmlbenchpacote], introduzido no Capítulo
@ref(classification-in-r), para prever a probabilidade de ser positivo para diabetes com base
em múltiplas variáveis clínicas.

Vamos dividir aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir uma semente para reprodutibilidade.

# Carregar os dados e remover NAs


data("PimaIndiansDiabetes2", package = "mlbench")
PimaIndiansDiabetes2 <- [Link](PimaIndiansDiabetes2)
# Inspecionar os dados
amostra_n(PimaIndiansDiabetes2, 3)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- PimaIndiansDiabetes2$diabetes %>%
createDataPartition(p = 0.8, lista = FALSO)
[Link] <- PimaIndiansDiabetes2[[Link], ]
[Link] <- PimaIndiansDiabetes2[-[Link], ]
Computando classificador KNN

Nós usaremos ocaretpacote, que testa automaticamente diferentes valores possíveis de k,


então escolhe o k ótimo que minimiza o erro de validação cruzada (“cv”) e adapta o
modelo KNN final que melhor explica nossos dados.

Além dissocaretpode pré-processar automaticamente os dados para normalizar o


variáveis preditoras.

Usaremos os seguintes argumentos na funçãotreinar():

trControl, para configurar a validação cruzada em 10 partes


pré-processarnormalizar os dados

tuneLength, para especificar o número de valores k possíveis a avaliar

Ajuste o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
diabetes ~., data = [Link], method = "knn",
trControl = trainControl("cv", number = 10),
preProcess = c("center","scale"),
tuneLength = 20
)
# Plotar a precisão do modelo vs diferentes valores de k
gráfico(modelo)

166
# Imprima o melhor parâmetro de ajuste k que
maximiza a precisão do modelo
model$bestTune
## k
## 5 13
# Faça previsões nos dados de teste
[Link] <- modelo %>% prever([Link])
cabeça([Link])
["neg","pos","neg","pos","pos","neg"]
## Levels: neg pos
Calcular a taxa de precisão do modelo
média([Link] == [Link]$diabetes)
0.769

A precisão geral da previsão do nosso modelo é de 76,9%, o que é bom (veja o Capítulo
@ref(avaliação-do-modelo-de-classificação) para aprender as principais métricas usadas para avaliar um
desempenho do modelo de classificação).

KNN para regressão

Nesta seção, descreveremos como prever uma variável contínua usando KNN.

Nós usaremos oBostonconjunto de dados [emMASS pacote], introduzido no Capítulo


@ref(análise de regressão), para prever o valor mediano das casas (mdev), em Boston
Subúrbios, usando diferentes variáveis preditoras.

[Link] os dados aleatoriamente em um conjunto de treinamento (80% para a construção de um modelo preditivo)
e conjunto de testes (20% para avaliar o modelo). Certifique-se de definir a semente para
reproduzibilidade.

Carregar os dados
dados("Boston", pacote = "MASS")
Inspecione os dados
sample_n(Boston, 3)
# Divida os dados em conjunto de treinamento e teste
[Link](123)
[Link] <- Boston$medv %>%
createDataPartition(p = 0.8, list = FALSE)
[Link] <- Boston[[Link], ]
[Link] <- Boston[-[Link], ]

2. Calcule KNN usando caret.

167
O melhor k é aquele que minimiza o erro de previsão RMSE (raiz do erro quadrático médio)
erro).

O RMSE corresponde à raiz quadrada da diferença média entre o


valores de resultado conhecidos observados e os valores previstos,RMSE = média((observados
- previsões)^2) %>% raiz()Quanto menor o RMSE, melhor o modelo.

Ajuste o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
medv~., dados = [Link], método = "knn",
trControl = trainControl("cv", number = 10),
preProcess = c("center","scale"),
tuneLength = 10
)
Gráfico do erro do modelo RMSE vs diferentes valores de k
plot(model)
Melhor parâmetro de ajuste k que minimiza o RMSE
model$bestTune
Faça previsões nos dados de teste
predictions <- model %>% predict([Link])
cabeça(predições)
Calcule o erro de previsão RMSE
RMSE(previsões, [Link]$medv)

Este capítulo descreve os princípios básicos da modelagem KNN (k-vizinhos mais próximos), que é
conceitualmente, um dos métodos de aprendizado de máquina mais simples.

É recomendado padronizar os dados ao realizar a análise KNN. Nós


forneceu códigos R para calcular facilmente o modelo preditivo KNN e para avaliar o modelo
desempenho em dados de teste.

Ao ajustar o algoritmo KNN, o analista precisa especificar o número de vizinhos.


(k) a ser considerado no algoritmo KNN para prever o resultado de uma observação.
A escolha de k impacta consideravelmente a saída do KNN. k = 1 corresponde a um altamente
um método flexível resultando em uma taxa de erro de treinamento de 0 (overfitting), mas a taxa de erro de teste
pode ser bastante alto.

Você precisa testar vários valores de k para decidir um valor ideal para os seus dados. Isso pode ser
feito automaticamente usando ocaretpacote, que escolhe um valor de k que minimiza
o erro de validação cruzada @ref(validação cruzada).

168
III.4._Modelo CART: Essenciais da Árvore de Decisão

O método de árvore de decisão é uma técnica preditiva poderosa e popular de aprendizado de máquina.
técnica que é usada tanto para classificação quanto para regressão. Portanto, também é conhecida como
Árvores de Classificação e Regressão (CART).

Observe que a implementação do algoritmo CART em R é chamada de RPART (Recursiva


Árvores de Particionamento e Regressão) disponíveis em um pacote com o mesmo nome.

Neste capítulo, descreveremos os fundamentos dos modelos de árvore e forneceremos códigos em R para calcular.
árvores de classificação e regressão.

biblioteca(tidyverse)
biblioteca(caret)
biblioteca(rpart)
Algoritmo de árvore de decisão

O algoritmo dos modelos de árvores de decisão funciona ao particionar repetidamente os dados em


múltiplos subespaços, de modo que os resultados em cada subespaço final sejam os mais homogêneos possíveis
possível. Esta abordagem é tecnicamente chamada de partição recursiva.

O resultado produzido consiste em um conjunto de regras usadas para prever a variável de resultado,
que pode ser ou:

uma variável contínua, para árvores de regressão


uma variável categórica, para árvores de classificação

As regras de decisão geradas pelo modelo preditivo CART são geralmente visualizadas como
uma árvore binária.

O seguinte exemplo representa um modelo de árvore que prediz a espécie da flor íris
based on the length (in cm) and width of sepal and petal.

biblioteca(rpart)
modelo <- rpart(Especie ~., dados = iris)
par(xpd = NA) # caso contrário, em alguns dispositivos, o texto é cortado
plot(model)
texto(modelo, dígitos = 3)

169
O gráfico mostra as diferentes regras de divisão possíveis que podem ser usadas para efetivamente
prever o tipo de resultado (aqui, espécies de íris). Por exemplo, a divisão principal atribui
observações [Link] < 2.45para o ramo da esquerda, onde o previsto
as espécies sãosetosa.

As diferentes regras na árvore podem ser impressas da seguinte forma:

imprimir(modelo, dígitos = 2)
## n= 150
##
## nó), dividir, n, perda, yval, (yprob)
## * denota nó terminal
##
## 1) raiz 150 100 setosa (0.333 0.333 0.333)
## 2) Comprimento da Pétala < 2.5 50 0 setosa (1.000 0.000 0.000) *
## 3) Comprimento da Pétala>=2.5 100 50 versicolor (0.000 0.500 0.500)
## 6) Largura da Pétala < 1.8 54 5 versicolor (0.000 0.907 0.093) *
## 7) [Link].Pétala>=1.8 46 1 virginica (0.000 0.022 0.978) *

Essas regras são produzidas ao dividir repetidamente as variáveis preditoras, começando com a
variável que tem a maior associação com a variável de resposta. O processo
continua até que alguns critérios de parada predeterminados sejam atendidos.

A árvore resultante é composta por nós de decisão, ramos e nós folha. A árvore é
colocado de cima para baixo, de modo que a raiz esteja no topo e as folhas indiquem o resultado
está colocado na parte inferior.

Cada nó de decisão corresponde a uma única variável preditora de entrada e a um ponto de corte de divisão em
that variable. The leaf nodes of the tree are the outcome variable which is used to make
previsões.

A árvore cresce a partir do topo (raiz), em cada nó o algoritmo decide a melhor divisão
limite que resulta na maior pureza (ou homogeneidade) em cada subpartição.

A árvore vai parar de crescer pelos seguintes três critérios (Zhang 2016):

1. todos os nós folha são puros com uma única classe;


2. um número mínimo predefinido de observações de treinamento que não pode ser
designado a cada nó folha com quaisquer métodos de divisão;

170
3. O número de observações no nó folha atinge o mínimo pré-especificado
um.

Uma árvore totalmente crescida irá se ajustar excessivamente aos dados de treinamento e o modelo resultante pode não ser
eficaz para prever o resultado de novos dados de teste. Técnicas, como poda,
são utilizados para controlar este problema.

Escolhendo os pontos de divisão das árvores

Tecnologicamente, para modelagem de regressão, o ponto de corte da divisão é definido de modo que o residual
sum of squared error (RSS) is minimized across the training samples that fall within the
subpartição.

Lembre-se de que, o RSS é a soma das diferenças ao quadrado entre o resultado observado
valores e os previstos,RSS = soma((Observados - Previsto)^2)Veja
Capítulo @ref(regressão-linear)

Em configurações de classificação, o ponto de divisão é definido de tal forma que a população em


as subpartições são puras o máximo possível. Duas medidas de pureza são geralmente usadas,
incluindo o índice de Gini e a entropia (ou ganho de informação).

Para uma subpartição dada,Gini = sum(p(1-p)) eentropy = -1*sum(p*log(p)),


onde p é a proporção de observações mal classificadas dentro da subpartição.

A soma é calculada entre as diferentes categorias ou classes na variável de resultado.


O índice de Gini e a entropia variam de 0 (maior pureza) a 1 (máximo grau de
impureza)

Fazendo previsões

Os diferentes conjuntos de regras estabelecidos na árvore são usados para prever o resultado de um novo
dados de teste.

O seguinte código R prevê a espécie de uma nova flor de íris coletada:

novosdados <- [Link](


[Link] = 6.5, [Link] = 3.0,
[Link] = 5.2, [Link] = 2.0
)
modelo %>% prever(novosdados, "classe")
## 1
virginica
## Levels: setosa versicolor virginica

Os novos dados são previstos como virginica.

Árvores de classificação

conjunto

171
Conjunto de dados:Diabetes2 dos Índios Pima[emmlbenchpacote], introduzido no Capítulo
@ref(classification-in-r), para prever a probabilidade de ser positivo para diabetes com base
em múltiplas variáveis clínicas.

Vamos dividir aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados e remover NAs


dados("PimaIndiansDiabetes2", pacote = "mlbench")
PimaIndiansDiabetes2 <- [Link](PimaIndiansDiabetes2)
# Inspecionar os dados
amostra_n(PimaIndiansDiabetes2, 3)
Divida os dados em conjunto de treinamento e teste
[Link](123)
[Link] <- PimaIndiansDiabetes2$diabetes %>%
createDataPartition(p = 0.8, lista = FALSE)
[Link] <- PimaIndiansDiabetes2[[Link], ]
[Link] <- PimaIndiansDiabetes2[-[Link], ]
Árvores totalmente crescidas

Aqui, criaremos uma árvore totalmente crescida mostrando todas as variáveis preditoras no conjunto de dados.

Construir o modelo
[Link](123)
modelo1 <- rpart(diabetes ~., dados = [Link], método = "classe")
Plante as árvores
par(xpd = NA) # Evitar cortar o texto em alguns dispositivos
gráfico(modelo1)
texto(modelo1, dígitos = 3)

# Fazer previsões nos dados de teste


[Link] <- modelo1 %>%
prever([Link], tipo = "classe")
cabeça([Link])
## 21 25 28 29 32 36
neg pos neg pos pos neg
## Levels: neg pos
Calcule a taxa de precisão do modelo nos dados de teste
média([Link] == [Link]$diabetes)
0.782

172
A precisão geral do nosso modelo de árvore é de 78%, o que não é tão ruim.

No entanto, esta árvore completa incluindo todos os preditores parece ser muito complexa e pode ser
difícil de interpretar na situação em que você tem um grande conjunto de dados com múltiplos
preditores.

Além disso, é fácil ver que uma árvore totalmente crescida irá ajustar-se demais aos dados de treinamento e
pode levar a um desempenho insatisfatório no conjunto de testes.

A strategy to limit this overfitting is to prune back the tree resulting to a simpler tree
com menos divisões e melhor interpretação à custa de um pequeno viés (James et al. 2014, P.
Bruce e Bruce (2017).

Poda da árvore

Resumidamente, nosso objetivo aqui é verificar se uma árvore menor pode nos fornecer resultados comparáveis ao
fully grown tree. If yes, we should go for the simpler tree because it reduces the
probabilidade de sobreajuste.

Uma possível estratégia robusta de poda da árvore (ou de parar o crescimento da árvore) consiste
de evitar dividir uma partição se a divisão não melhorar significativamente o todo
qualidade do modelo.

Emrpartpacote, isso é controlado pelo parâmetro de complexidade (cp), que impõe um


penalidade à árvore por ter muitas divisões. O valor padrão é 0,01. Quanto maior o
cp, menor a árvore.

Um valor muito pequeno decpleva ao overfitting e um valor de cp muito grande resultará em um muito
árvore pequena. Ambos os casos diminuem o desempenho preditivo do modelo.

Um ótimocpo valor pode ser estimado testando diferentes valores de cp e usando cruzado-
abordagens de validação para determinar a precisão da previsão correspondente do modelo.
O melhorcpé então definido como aquele que maximiza a acurácia da validação cruzada
(Capítulo @ref(cross-validation)).

A poda pode ser realizada facilmente nacuidadopacote de fluxo de trabalho, que invoca o
rpartmétodo para testar automaticamente diferentes possíveis valores decp, então escolha o
otimizadocpque maximizam a precisão da validação cruzada (“cv”) e ajustam o melhor final
Modelo CART que melhor explica nossos dados.

Você pode usar os seguintes argumentos na funçãotreinar()[do pacote caret]:

trControl, para configurar a validação cruzada em 10 partes


tuneLength, para especificar o número de possíveis cpvalores a avaliar. Padrão
o valor é 3, aqui vamos usar 10.

Ajuste o modelo no conjunto de treinamento


[Link](123)
modelo2 <- treinar(
diabetes ~., dados = [Link], método = "rpart"
trControl = trainControl("cv", number = 10),

173
tuneLength = 10
)
# Traçar a precisão do modelo vs diferentes valores de
# cp (complexity parameter)
gráfico(modelo2)

Imprima o melhor parâmetro de ajuste cp que


maximiza a precisão do modelo
modelo2$melhorAjuste
## cp
## 2 0.0321
# Plotar o modelo final da árvore
par(xpd = NA) # Evitar o corte do texto em alguns dispositivos
plot(model2$finalModel)
texto(model2$finalModel, dígitos = 3)

Regras de decisão no modelo


modelo2$modelFinal
## n= 314
##
## nó), dividir, n, perda, yval, (yprob)
## * denota nó terminal
##
## 1) raiz 314 104 neg (0.6688 0.3312)
## 2) glicose < 128 188 26 neg (0.8617 0.1383) *
## 3) glicose>=128 126 48 pos (0.3810 0.6190)
## 6) glicose< 166 88 44 neg (0.5000 0.5000)
## 12) idade < 23.5 16 1 neg (0.9375 0.0625) *
## 13) idade>=23.5 72 29 pos (0.4028 0.5972) *
## 7) glicose>=166 38 4 pos (0.1053 0.8947) *
Faça previsões sobre os dados de teste

174
[Link] <- model2 %>% predict([Link])
Calcular a taxa de precisão do modelo nos dados de teste
média([Link] == [Link]$diabetes)
0,795

A partir da saída acima, pode-se ver que o melhor valor para o parâmetro de complexidade
(cp) é 0,032, permitindo uma árvore mais simples, fácil de interpretar, com uma precisão geral de 79%,
o que é comparável à precisão (78%) que obtivemos com a árvore completa. O
A precisão da previsão da árvore podada é ainda melhor em comparação com a árvore completa.

Juntas, devemos optar por este modelo mais simples.

Árvores de Regressão

Anteriormente, descrevemos como construir uma árvore de classificação para prever o grupo
(ou seja, classe) de observações. Nesta seção, vamos descrever como construir uma árvore para
prevendo uma variável contínua, um método chamado análise de regressão (Capítulo
@ref(análise de regressão)).

O código R é idêntico ao que vimos em seções anteriores. A poda deve ser


também aplicado aqui para limitar o sobreajuste.

Da mesma forma que as árvores de classificação, o seguinte código R utiliza ocaretpacote para construir
árvores de regressão e prever a saída de um novo conjunto de dados de teste.

conjunto

Conjunto de dados: Usaremos oBostonconjunto de dados [emMASSApacote],


introduzido no Capítulo
@ref(análise de regressão), para prever o valor mediano da casa (mdev), em Boston
Suburbs, using different predictor variables.

Nós vamos dividir aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e
conjunto de teste (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados
dados("Boston", pacote = "MASS")
# Inspecionar os dados
amostra_n(Boston, 3)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- Boston$medv %>%
criarPartiçãoDeDados(p = 0.8, lista = FALSO)
[Link] <- Boston[[Link], ]
[Link] <- Boston[-[Link], ]

Crie a árvore de regressão

Aqui, o melhorcpo valor é aquele que minimiza o erro de previsão RMSE (raiz média)
erro ao quadrado).

O erro de previsão é medido pelo RMSE, que corresponde à média


diferença entre os valores observados conhecidos do resultado e o valor previsto

175
pelo modelo. O RMSE é calculado comoRMSE = média((observados - previstos)^2)
%>% raiz()Quanto menor o RMSE, melhor o modelo.

Escolha o melhor valor de cp:

Ajuste o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
medv ~., dados = [Link], método = "rpart"
trControl = trainControl("cv", number = 10),
tuneLength = 10
)
# Plotar erro do modelo versus diferentes valores de
# cp (parâmetro de complexidade)
plot(model)
Imprima o melhor parâmetro de ajuste cp que
minimizar o RMSE do modelo
model$bestTune

Trace o modelo final da árvore:

Plotar o modelo final da árvore


par(xpd = NA) # Evitar cortar o texto em alguns dispositivos
plot(model$finalModel)
texto(model$finalModel, dígitos = 3)

Regras de decisão no modelo


modelo$modeloFinal
# Fazer previsões sobre os dados de teste

176
predictions <- model %>% predict([Link])
cabeça(predições)
Calcule o erro de previsão RMSE
RMSE(previsões, [Link]$medv)
Árvore de inferência condicional

A árvore de inferência condicional (ctree) usa métodos de teste de significância para selecionar e dividir
recursivamente os preditores mais relacionados ao resultado. Isso pode limitar
overfitting em comparação com o algoritmo rpart clássico.

Em cada passo de divisão, o algoritmo para se não houver dependência entre o preditor.
variáveis e a variável de resultado. Caso contrário, a variável que está mais associada a
o resultado é selecionado para divisão.

A árvore condicional pode ser facilmente calculada usando ocaretfluxo de trabalho, que irá
invocar a funçãoctree()disponível nofestapacote.

1. Demo data:DiabetesTipo2DosÍndiosPima. Primeiro, divida os dados em treinamento (80%) e


conjunto de teste (20%)

# Carregar os dados
data("PimaIndiansDiabetes2", package = "mlbench")
[Link] <- [Link](PimaIndiansDiabetes2)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- [Link]$diabetes %>%
criarParticaoDeDados(p = 0.8, lista = FALSO)
[Link] <- [Link][[Link], ]
[Link] <- [Link][-[Link], ]

2. Construa árvores condicionais usando os parâmetros de ajusteprofundidade máximae


minicritériopara controlar o tamanho da á[Link] seleciona automaticamente
os valores de ajuste otimizados para seus dados, mas aqui especificaremosprofundidade máximae
mínimo critério.

O seguinte exemplo cria uma árvore de classificação:

biblioteca(party)
[Link](123)
modelo <- treinar(
diabetes ~., dados = [Link], método = "ctree2",
trControl = trainControl("cv", number = 10),
tuneGrid = [Link](maxdepth = 3, mincriterion = 0.95 )
)
plot(model$finalModel)

177
Faça previsões sobre os dados de teste
[Link] <- model %>% predict([Link])
Calcule a taxa de precisão do modelo nos dados de teste
média([Link] == [Link]$diabetes)
## [1] 0.744

O valor p indica a associação entre uma determinada variável preditora e o


variável de resultado. Por exemplo, o primeiro nó de decisão na parte superior mostra queglicoseé
a variável que está mais fortemente associada adiabetescom um valor de p < 0,001, e
assim é selecionado como o primeiro nó.

Este capítulo descreve como construir árvores de classificação e regressão em R. Árvores


fornecer uma ferramenta visual que seja muito fácil de interpretar e explicar para as pessoas.

Modelos de árvore podem ser muito mais eficientes em comparação ao modelo de regressão linear
(Capítulo @ref(regressão-linear)), quando há um alto grau de não-linearidade e complexidade
relações entre a variável de resultado e os preditores.

No entanto, construir apenas uma única árvore a partir de um conjunto de dados de treinamento pode resultar em um modelo menos
modelo preditivo performático. Uma única árvore é instável e a estrutura pode ser alterada
por pequenas mudanças nos dados de treinamento.

Por exemplo, o ponto exato de divisão de uma determinada variável preditora e o preditor a ser
selecionados em cada etapa do algoritmo são fortemente dependentes do conjunto de dados de treinamento.
Usar um conjunto de dados de treinamento ligeiramente diferente pode alterar a primeira variável a ser dividida, e o
a estrutura da árvore pode ser completamente modificada.

178
Outros algoritmos de aprendizado de máquina - incluindo bagging, random forest e boosting -
pode ser usado para construir várias árvores diferentes a partir de um único conjunto de dados, levando a uma melhor
desempenho preditivo. Mas, com esses métodos, a interpretabilidade observada para um
uma única árvore está perdida. Observe que todas essas estratégias mencionadas acima são baseadas no CART
algoritmo. Veja o Capítulo @ref(bagging-and-random-forest) e @ref(boosting).

179
III.5._Essenciais de Bagging e Random Forest

No Capítulo @ref(modelos-de-árvore-de-decisão), descrevemos como construir decisões


árvores para modelagem preditiva.

O modelo padrão de árvore de decisão, CART para árvores de classificação e regressão, constrói
apenas uma única árvore, que é então usada para prever o resultado de novas observações. O
o resultado desta estratégia é muito instável e a estrutura da árvore pode ser severamente afetada
por uma pequena mudança no conjunto de dados de treinamento.

Existem diferentes alternativas poderosas ao algoritmo clássico CART, incluindo


bagging, Random Forest e boosting.

Bagging significa agregação de bootstrap. Consiste em construir múltiplos diferentes


modelos de árvore de decisão a partir de um único conjunto de dados de treinamento, utilizando repetidamente múltiplos
subconjuntos de dados de bootstrap e a média dos modelos. Aqui, cada árvore é construída
independentemente dos outros. Leia mais sobre bootstrap no Capítulo @ref(bootstrap-
re-amostragem).

O algoritmo Random Forest é um dos mais comumente usados e um dos mais poderosos.
técnicas de aprendizado de máquina. É um tipo especial de bagging aplicado a árvores de decisão.

Comparado ao modelo CART padrão (Capítulo @ref(modelos-de-árvore-de-decisão)), o


o random forest proporciona uma forte melhoria, que consiste em aplicar bagging a
os dados e a amostragem bootstrap das variáveis preditoras em cada divisão (James et al.
2014, P. Bruce e Bruce (2017)). Isso significa que em cada etapa de divisão da árvore
algoritmo, uma amostra aleatória de n preditores é escolhida como candidatos a divisão a partir do conjunto completo
dos preditores.

A floresta aleatória pode ser usada tanto para classificação (predição de uma variável categórica) quanto
regressão (predizendo uma variável contínua).

In this chapter, we’ll describe how to compute random forest algorithm in R for
construindo um poderoso modelo preditivo. Além disso, você aprenderá como classificar os
variável preditora de acordo com sua importância na contribuição para a precisão do modelo.

biblioteca(tidyverse)
biblioteca(caret)
biblioteca(randomForest)

conjunto

Conjunto de dados:DiabetesTipo2DosIndígenasPima[emmlbenchpacote], introduzido no Capítulo


@ref(classification-in-r), para prever a probabilidade de ser positivo para diabetes com base
em várias variáveis clínicas.

180
Divida aleatoriamente os dados em conjunto de treinamento (80% para construir um modelo preditivo) e teste
defina (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados e remover NAs


dados("PimaIndiansDiabetes2", pacote = "mlbench")
PimaIndiansDiabetes2 <- [Link](PimaIndiansDiabetes2)
# Inspecionar os dados
amostra_n(PimaIndiansDiabetes2, 3)
# Split the data into training and test set
[Link](123)
[Link] <- PimaIndiansDiabetes2$diabetes %>%
createDataPartition(p = 0.8, lista = FALSE)
[Link] <- PimaIndiansDiabetes2[[Link], ]
[Link] <- PimaIndiansDiabetes2[-[Link], ]
Computando classificador de floresta aleatória

Usaremos ocaretfluxo de trabalho, que invoca oflorestaaleatória()função


[pacote randomForest], para selecionar automaticamente o número ótimo (mtry) do preditor
variáveis amostradas aleatoriamente como candidatas em cada divisão, e ajustam o melhor aleatório final
forest model that explains the best our data.

Usaremos os seguintes argumentos na funçãotreinar():

trControl, para configurar validação cruzada de 10 vezes

# Fit the model on the training set


[Link](123)
modelo <- treino(
diabetes ~., data = [Link], método = "rf",
trControl = trainControl("cv", number = 10),
importance = TRUE
)
Melhor parâmetro de ajuste
model$bestTune
## mtry
## 3 8
# Modelo final
modelo$modeloFinal
##
## Chamada:
## randomForest(x = x, y = y, mtry = param$mtry, importance = TRUE)
## Tipo de floresta aleatória: classificação
## Number of trees: 500
## No. of variables tried at each split: 8
##
Estimativa OOB da taxa de erro: 22%
## Confusion matrix:
## neg pos [Link]
## neg 185 25 0.119
## pos 44 60 0.423
# Make predictions on the test data
[Link] <- modelo %>% prever([Link])
cabeça([Link])
[1] neg pos neg neg pos neg
## Levels: neg pos
Calcule a taxa de precisão do modelo
média([Link] == [Link]$diabetes)

181
0,808

Por padrão, 500 árvores são treinadas. O número ideal de variáveis amostradas em cada divisão
é 8.

Cada árvore em sacos utiliza cerca de dois terços das observações. O restante
um terço das observações não utilizadas para ajustar uma árvore em bolsa é chamado de
observações fora da bolsa (OOB) (James et al. 2014).

Para uma árvore dada, o erro fora da bolsa (OOB) é o erro do modelo em prever os dados restantes
fora do conjunto de treinamento para aquela árvore (P. Bruce e Bruce 2017). OOB é um muito
maneira direta de estimar o erro do teste de um modelo de bagging, sem a necessidade de
realizar validação cruzada ou a abordagem do conjunto de validação.

No nosso exemplo, a estimativa de taxa de erro do OBB é de 24%.

A precisão da previsão em novos dados de teste é de 79%, o que é bom.

Importância da variável

A importância de cada variável pode ser impressa usando a funçãoimportância()


[pacote randomForest]:

importância(model$finalModel)
## neg pos MeanDecreaseAccuracy MeanDecreaseGini
gravida 11.57 0.318 10.36 8.86
## glucose 38.93 28.437 46.17 53.30
## pressure -1.94 0.846 -1.06 8.09
## triceps 6.19 3.249 6.85 9.92
## insulin 8.65 -2.037 6.01 12.43
## mass 7.71 2.299 7.57 14.58
## pedigree 6.57 1.083 5.66 14.50
## age 9.51 12.310 15.75 16.76

The result shows:

MeanDecreaseAccuracy, qual é a diminuição média da precisão do modelo em


prevendo o resultado das amostras fora da bolsa quando uma variável específica está
excluído do modelo.
Diminuição Média de Giniqual é a diminuição média na impureza do nó que resulta
a partir de divisões sobre essa variável. O índice de impureza de Gini é usado apenas para
problema de classificação. Na regressão, a impureza do nó é medida por
conjunto de treinamento RSS. Essas medidas, calculadas usando o conjunto de treinamento, são menos
mais confiável do que uma medida calculada com dados fora da bolsa. Veja o Capítulo
@ref(modelos-de-árvore-de-decisão) para medidas de impureza de nó (índice de Gini e RSS).

Note que, por padrão (argumento importance = FALSE), o randomForest calcula apenas
o índice de impureza de Gini. No entanto, calcular a precisão do modelo por variável
(importância do argumento = VERDADEIRO) requer cálculos suplementares que podem ser
demorado nas situações em que milhares de modelos (árvores) estão sendo ajustados.

182
Medidas de importância das variáveis podem ser plotadas usando a funçãovarImpPlot()
[pacote randomForest]:

# Gráfico da Redução Média da Precisão


varImpPlot(model$finalModel, tipo = 1)
# Gráfico MeanDecreaseGini
varImpPlot(model$finalModel, tipo = 2)

Os resultados mostram que, em todas as árvores consideradas na floresta aleatória, a glicose


e as variáveis de idade são as duas variáveis mais importantes.

A funçãovarImp()[em caret] exibe a importância das variáveis em porcentagem:

varImp(model)
## importância da variável rf
##
## Importance
## glucose 100.0
## age 33.5
## pregnant 19.0
## mass 16.2
## triceps 15.4
## pedigree 12.8
## insulin 11.2
## pressure 0.0

Regressão

Da mesma forma, você pode construir um modelo de floresta aleatória para realizar regressão, ou seja, para prever
uma variável contínua.

conjunto

Usaremos oBostonconjunto de dados [emMASSApacote], introduzido no Capítulo


@ref(análise de regressão), para prever o valor mediano da casa (mdev), em Boston
Subúrbios, usando diferentes variáveis preditoras.

Randomly split the data into training set (80% for building a predictive model) and test
defina (20% para avaliar o modelo).

# Load the data


dados("Boston", pacote = "MASS")
# Inspecione os dados

183
amostra_n(Boston, 3)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- Boston$medv %>%
createDataPartition(p = 0.8, lista = FALSO)
[Link] <- Boston[[Link], ]
[Link] <- Boston[-[Link], ]
Computando árvores de regressão de floresta aleatória

Aqui o erro de previsão é medido pelo RMSE, que corresponde à média


diferença entre os valores conhecidos observados do resultado e o valor previsto
pelo modelo. O RMSE é calculado comoRMSE = média((observados - previstos)^2)
%>% sqrt()Quanto menor o RMSE, melhor o modelo.

Ajuste o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
medv ~., dados = [Link], método = "rf"
trControl = trainControl("cv", number = 10)
)
Melhor parâmetro de ajuste mtry
model$bestTune
# Fazer previsões nos dados de teste
predictions <- model %>% predict([Link])
cabeça(predições)
Calcule o erro médio de previsão RMSE
RMSE(predictions, [Link]$medv)

Hiperparâmetros

Observe que o algoritmo de floresta aleatória possui um conjunto de hiperparâmetros que devem ser ajustados.
usando validação cruzada para evitar o sobreajuste.

Isto inclui:

tamanhonodoTamanho mínimo dos nós terminais. O valor padrão para classificação é 1


e o padrão para regressão é 5.
maxnósNúmero máximo de nós terminais que as árvores na floresta podem ter. Se
não fornecido, árvores são cultivadas até o máximo possível (sujeito a limites por
nodesize).

Ignoring these parameters might lead to overfitting on noisy data set (P. Bruce and
Bruce 2017). A validação cruzada pode ser usada para testar diferentes valores, a fim de selecionar o
valor ótimo.

Os hiperparâmetros podem ser ajustados manualmente usando ocaretpacote.


Para um dado
parâmetro, a abordagem consiste em ajustar muitos modelos com diferentes valores do
parâmetros e, em seguida, comparando os modelos.

O exemplo a seguir testa diferentes valores detamanhodonóusando o


DiabetesTipo2DosIndígenasPimaconjunto de dados para classificação:

(Isto levará de 1 a 2 minutos de tempo de execução)

184
dados("PimaIndiansDiabetes2", pacote = "mlbench")
models <- list()
para (tamanhonode em c(1, 2, 4, 8)) {
[Link](123)
modelo <- treinar(
diabetes~., data = [Link](PimaIndiansDiabetes2), method="rf",
trControl = trainControl(method="cv", number=10),
metric = "Accuracy",
nodesize = nodesize
)
[Link] <- toString(tamanhoDoNo)
models[[[Link]]] <- model
}
Compare resultados
ressamplar(modelos) %>% resumo(métrico = "Precisão")
##
## Chamada:
## [Link](object = ., metric = "Accuracy")
##
## Modelos: 1, 2, 4, 8
## Número de reamostragens: 10
##
## Accuracy
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1 0.692 0.750 0.785 0.793 0.840 0.897 0
## 2 0.692 0.744 0.808 0.788 0.841 0.850 0
## 4 0.692 0.744 0.795 0.786 0.825 0.846 0
## 8 0.692 0.750 0.808 0.796 0.841 0.897 0

Pode-se ver que, usando umnodesize o valor de 2 ou 8 leva à maior precisão mediana
valor.

Este capítulo descreve os fundamentos do bagging e do aprendizado de máquina de floresta aleatória.


Algoritmos. Também fornecemos exemplos práticos em R para classificação e regressão
análises.

Outra alternativa ao bagging e à floresta aleatória é o boosting (Capítulo @ref(boosting)).

185
III.6._ Essenciais do Gradient Boosting em R Usando XGBOOST

Anteriormente, descrevemos os algoritmos de aprendizado de máquina bagging e random forest.


para construir um modelo preditivo poderoso (Capítulo @ref(bagging-and-random-forest)).

Lembre-se que o bagging consiste em pegar múltiplos subconjuntos do conjunto de dados de treinamento, então
construindo vários modelos de árvores de decisão independentes e, em seguida, fazendo a média dos modelos
permitindo criar um modelo preditivo muito eficiente em comparação com o CART clássico
modelo (Capítulo @ref(modelos-de-árvore-de-decisão)).

Este capítulo descreve um método alternativo chamado boosting, que é semelhante ao


método de bagging, exceto que as árvores são cultivadas sequencialmente: cada árvore sucessiva é
crescida usando informações de árvores previamente cultivadas, com o objetivo de minimizar o
erro dos modelos anteriores (James et al. 2014).

Por exemplo, dado um modelo de árvore de regressão atual, o procedimento é o seguinte:

1. Ajuste uma árvore de decisão usando os erros residuais do modelo como a variável de resultado.
2. Adicione esta nova árvore de decisão, ajustada por um parâmetro de encolhimentolambda,
para o
função ajustada a fim de atualizar os resíduos. lambda é um pequeno valor positivo,
tipicamente compreendido entre 0,01 e 0,001 (James et al. 2014).

Essa abordagem resulta em uma melhoria lenta e sucessiva do modelo ajustado.


resultando em um modelo muito performático. O Boosting tem diferentes parâmetros de ajuste, incluindo:

O número de árvores B
O parâmetro de encolhimento lambda

O número de divisões em cada árvore.

Existem diferentes variantes de boosting, incluindo Adaboost, gradient boosting e


impulsão de gradiente estocástico.

O aumento de gradiente estocástico, implementado no pacote R xgboost, é o mais


técnica de boosting comumente usada, que envolve o reamostragem de observações e
colunas em cada rodada. Oferece o melhor desempenho. xgboost significa extremamente
impulsionamento de gradiente.

Boosting pode ser usado tanto para problemas de classificação quanto de regressão.

Neste capítulo, descreveremos como calcular boosting em R.

biblioteca(tidyverse)
library(caret)
biblioteca(xgboost)

186
Classificação

Data set: Diabetes tipo 2 dos índios Pima[emmlbenchpacote], introduzido no Capítulo


@ref(classification-in-r), para prever a probabilidade de ser positivo para diabetes com base
em múltiplas variáveis clínicas.

Divida aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e teste
defina (20% para avaliar o modelo). Certifique-se de definir a semente para reprodutibilidade.

# Carregar os dados e remover NAs


dados("PimaIndiansDiabetes2", pacote = "mlbench")
PimaIndiansDiabetes2 <- [Link](PimaIndiansDiabetes2)
# Inspecionar os dados
sample_n(PimaIndiansDiabetes2, 3)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- PimaIndiansDiabetes2$diabetes %>%
createDataPartition(p = 0.8, list = FALSE)
[Link] <- PimaIndiansDiabetes2[[Link], ]
[Link] <- PimaIndiansDiabetes2[-[Link], ]
Árvores de classificação impulsionadas

Usaremos ocaretfluxo de trabalho, que invoca oxgboostpacote, para automaticamente


ajuste os valores dos parâmetros do modelo e ajuste a árvore aumentada final que explica o
nosso melhor dado.

Usaremos os seguintes argumentos na funçãotreinar():

trControlpara configurar validação cruzada em 10 partes

Ajustar o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
diabetes ~., dados = [Link], método = "xgbTree"
trControl = trainControl("cv", number = 10)
)
Melhor parâmetro de ajuste
model$bestTune
## nrounds max_depth eta gamma colsample_bytree min_child_weight
subamostra
## 18 150 1 0.3 0 0.8 1
1
# Fazer previsões sobre os dados de teste
[Link] <- modelo %>% prever([Link])
cabeça([Link])
neg pos neg neg pos neg
## Levels: neg pos
Calcular a taxa de precisão da previsão do modelo
média([Link] == [Link]$diabetes)
## [1] 0.744

A precisão da previsão em novos dados de teste é de 74%, o que é bom.

187
Para mais explicações sobre os parâmetros de ajuste do boosting, digite?xgboostem R para ver
a documentação.

Importância das variáveis

A funçãovarImp()[em caret] exibe a importância das variáveis em porcentagem:

varImp(model)
## importância das variáveis xgbTree
##
## Overall
## glucose 100.00
## mass 20.23
## pregnant 15.83
## insulin 13.15
## pressure 9.51
## triceps 8.18
## pedigree 0.00
## age 0.00

Regressão

Da mesma forma, você pode construir um modelo de floresta aleatória para realizar regressão, ou seja, para prever
uma variável contínua.

conjunto

Nós usaremos oBostonconjunto de dados [emMASSApacote], apresentado no Capítulo


@ref(análise de regressão), para prever o valor mediano da casa (mdev), em Boston
Subúrbios, usando diferentes variáveis preditoras.

Divida aleatoriamente os dados em um conjunto de treinamento (80% para construir um modelo preditivo) e teste
defina (20% para avaliar o modelo).

# Carregar os dados
dados("Boston", pacote = "MASS")
# Inspecionar os dados
amostra_n(Boston, 3)
Divida os dados em conjunto de treinamento e conjunto de teste
[Link](123)
[Link] <- Boston$medv %>%
criarPartiçãoDeDados(p = 0.8, lista = FALSO)
[Link] <- Boston[[Link], ]
[Link] <- Boston[-[Link], ]
árvores de regressão impulsionadas

Aqui, o erro de previsão é medido pelo RMSE, que corresponde à média


diferença entre os valores conhecidos observados do resultado e o valor previsto
pelo modelo.

Ajuste o modelo no conjunto de treinamento


[Link](123)
modelo <- treinar(
medv ~., dados = [Link], método = "xgbTree"
trControl = trainControl("cv", number = 10)

188
)
Melhor parâmetro de ajuste mtry
model$bestTune
# Fazer previsões sobre os dados de teste
predictions <- model %>% predict([Link])
cabeça(predições)
Calcule o erro de previsão médio RMSE
RMSE(predicoes, [Link]$medv)

Este capítulo descreve as técnicas de aprendizado de máquina por impulsionamento e fornece exemplos
em R para construir um modelo preditivo. Veja também métodos de bagging e florestas aleatórias em
Capítulo @ref(bagging-e-floresta-aleatória).

189
PARTE IV: COMPONENTE PRINCIPAL
MÉTODOS

190
A análise de componentes principais (PCA) nos permite resumir e visualizar o
informações em um conjunto de dados contendo indivíduos/observações descritas por múltiplos
variáveis quantitativas inter-relacionadas. Cada variável poderia ser considerada como uma diferente
dimensão. Se você tiver mais de 3 variáveis em seus conjuntos de dados, pode ser muito difícil
visualizar um hiperespaço multidimensional.
A análise de componentes principais é usada para extrair as informações importantes de um
tabela de dados multivariados e expressar essa informação como um conjunto de algumas novas variáveis
chamados de componentes principais. Essas novas variáveis correspondem a uma combinação linear
dos originais. O número de componentes principais é menor ou igual ao número
das variáveis originais.

As informações em um conjunto de dados específico correspondem aovariação totalele contém.


O objetivo da PCA é identificar direções (ou componentes principais) ao longo das quais o
a variação nos dados é máxima.
Em outras palavras, a PCA reduz a dimensionalidade de dados multivariados para duas ou três.
componentes principais, que podem ser visualizados graficamente, com perda mínima de
informação.

Neste capítulo, descrevemos a ideia básica da PCA e, demonstramos como calcular e


visualizar PCA usando o software R. Além disso, mostraremos como revelar os mais
important variables that explain the variations in a data set.

Conteúdo:

Noções Básicas
Cálculo

oPacotes R

oFormato de dados

oPadronização de dados

oCódigo R

Visualização e Interpretação

oValores próprios / Variâncias

oGráfico de variáveis

oDescrição da dimensão

oGráfico de indivíduos

oPersonalização de gráfico

oBiplot

Elementos suplementares

191
oDefinição e tipos

oEspecificação em PCA

oVariáveis quantitativas

oIndivíduos

oVariáveis qualitativas

Filtrando resultados

Exportando resultados

oExportar gráficos para arquivos PDF/PNG

o Exportar resultados para arquivos txt/csv

Summary

Leitura adicional

Noções básicas

Entender os detalhes da PCA requer conhecimento de álgebra linear. Aqui, nós iremos
explique apenas o básico com uma representação gráfica simples dos dados.

No Gráfico 1A abaixo, os dados estão representados no sistema de coordenadas X-Y. O


a redução de dimensão é alcançada identificando as direções principais, chamadas de principais
componentes, nos quais os dados variam.

O PCA assume que as direções com as maiores variâncias são as mais "importantes" (ou seja,
o mais principal).

Na figura abaixo, oeixo PC1é oprimeira direção principalao longo do qual o


as amostras mostram a maior variação. OEixo PC2é osegundo mais importante
direçãoe éortogonalpara o eixo PC1.

The dimensionality of our two-dimensional data can be reduced to a single dimension


projetando cada amostra na primeira componente principal (Gráfico 1B)

192
Tecnicamente falando, a quantidade de variância retida por cada componente principal é
medido pelo chamado autovalor.

Note que o método PCA é particularmente útil quando as variáveis dentro do conjunto de dados
são altamente correlacionados. A correlação indica que há redundância nos dados. Devido a
essa redundância, a PCA pode ser usada para reduzir as variáveis originais em um número menor
de novas variáveis (=componentes principais) que explicam a maior parte da variância em
variáveis originais.

Tomados juntos, o principal objetivo da análise de componentes principais é:

identificar padrão oculto em um conjunto de dados


reduza a dimensionalidade dos dados removendo o ruído e a redundância em
os dados

identificar variáveis correlacionadas

Cálculo

Várias funções de diferentes pacotes estão disponíveis no software R para computação


PCA:

193
prcomp() e princomp() [pacote Rstats embutido],
PCA() [pacote FactoMineR],

[Link]() [pacote ade4],

andepPCA() [PacoteExPosition]

Não importa qual função você decidir usar, você pode facilmente extrair e visualizar o
resultados da PCA usando funções R fornecidas nofactoextraPacote R.

Aqui, usaremos os dois pacotes FactoMineR (para a análise) e factoextra (para


visualização baseada em ggplot2).

Instale os dois pacotes da seguinte forma:

[Link](c("FactoMineR", "factoextra"))

Carregue-os no R, digitando isto:

biblioteca("FactoMineR")
biblioteca("factoextra")
Formato de dados

Usaremos os conjuntos de dados de demonstraçãodecathlon2do pacote factorextra:

dados(decathlon2)
# cabeça(decathlon2)

Conforme ilustrado na Figura 3.1, os dados utilizados aqui descrevem o desempenho dos atletas durante
dois eventos esportivos (Desctar e OlimpíadasG). Ele contém 27 indivíduos (atletas)
descrito por 13 variáveis.

194
Observe que apenas alguns desses indivíduos e variáveis serão usados para realizar o
análise de componentes principais. As coordenadas dos indivíduos restantes e
variáveis no mapa de fatores serão previstas após a PCA.

Em termos de PCA, nossos dados contêm:

Indivíduos ativos (em azul claro, linhas 1:23): Indivíduos que são utilizados durante o
análise de componentes principais.
Indivíduos suplementares (em azul escuro, linhas 24:27): As coordenadas destes
indivíduos serão previstos usando as informações e parâmetros do PCA
obtido com indivíduos/variáveis ativas

Variáveis ativas (em rosa, colunas 1:10): Variáveis que são usadas para o
análise de componentes principais.

Variáveis suplementares: Como indivíduos suplementares, as coordenadas destes


as variáveis também serão previstas. Estas podem ser:

oVariáveis contínuas suplementares (vermelho): Colunas 11 e 12


correspondentes, respectivamente, à classificação e aos pontos dos atletas.

oVariáveis qualitativas suplementares (verde): Coluna 13 correspondente


para as duas reuniões atléticas (Jogos Olímpicos de 2004 ou Decastar de 2004).
Esta é uma variável categórica (ou fator). Pode ser usada para colorir
indivíduos por grupos.

195
Começamos subdefinindo indivíduos ativos e variáveis ativas para o principal
análise de componentes

[Link] <- decathlon2[1:23, 1:10]


cabeça([Link][, 1:6], 4)
## X100m [Link] [Link] [Link] X400m [Link]
## SEBRLE 11.0 7.58 14.8 2.07 49.8 14.7
## CLAY 10.8 7.40 14.3 1.86 49.4 14.1
## BERNARD 11.0 7.23 14.2 1.92 48.9 15.0
## YURKOV 11.3 7.09 15.2 2.10 50.4 15.3

Padronização de dados

Na análise de componentes principais, as variáveis são frequentemente escalonadas (ou seja, padronizadas). Isso é
particularmente recomendado quando as variáveis são medidas em escalas diferentes (por exemplo:
quilogramas, quilômetros, centímetros, ...); caso contrário, os resultados da PCA obtidos serão
severamente afetado.

O objetivo é tornar as variáveis comparáveis. Geralmente, as variáveis são escaladas para ter i)
desvio padrão um e ii) média zero.

A padronização de dados é uma abordagem amplamente utilizada no contexto da expressão gênica


análise de dados antes da PCA e análise de agrupamento. Também podemos querer escalar os dados
quando a média e/ou o desvio padrão das variáveis são significativamente diferentes.

When scaling variables, the data can be transformed as follow:

)x(oivsed)x(a−
m
idéix
Onde significa(x)

é a média dos valores de x, e sd(x)

é o desvio padrão (DP).

A função base do R `scale()` pode ser usada para padronizar os dados. Ela aceita um número.
matriz como entrada e realiza a escalonagem nas colunas.

Observe que, por padrão, a função PCA() [em FactoMineR] padroniza os dados.
automaticamente durante a PCA; então você não precisa fazer essa transformação antes do
PCA.

Código R

The functionPCA() [FactoMineRpackage] can be used. A simplified format is :

PCA(X, [Link] = TRUE, ncp = 5, graph = TRUE)

Xum data frame. As linhas são indivíduos e as colunas são variáveis numéricas
[Link] valor lógico. Se VERDADEIRO, os dados são escalonados para variância unitária antes de
a análise. Esta padronização para a mesma escala evita que algumas variáveis

196
tornar-se dominante apenas por causa de suas grandes unidades de medida. Isso faz
variável comparável.

ncpnúmero de dimensões mantidas nos resultados finais.

gráficoum valor lógico. Se VERDADEIRO, um gráfico é exibido.

O código R abaixo calcula a análise de componentes principais sobre o ativo


indivíduos/variáveis:

biblioteca("FactoMineR")
[Link] <- PCA([Link], graph = FALSE)

A saída da função PCA() é uma lista, incluindo os seguintes componentes:

imprimir([Link])
## **Resultados da Análise de Componentes Principais (ACP)**
A análise foi realizada em 23 indivíduos, descritos por 10
variáveis
Os resultados estão disponíveis nos seguintes objetos:
##
## name description
## 1 "$eig" "eigenvalues"
## 2 "$var" "results for the variables"
## 3 "$var$coord" "coord. for the variables"
## 4 "$var$cor" "correlations variables - dimensions"
## 5 "$var$cos2" "cos2 for the variables"
## 6 "$var$contrib" "contributions of the variables"
## 7 "$ind" "results for the individuals"
## 8 "$ind$coord" "coord. for the individuals"
## 9 "$ind$cos2" "cos2 for the individuals"
## 10 "$ind$contrib" "contributions of the individuals"
## 11 "$call" "summary statistics"
## 12 "$call$centre" "mean of the variables"
## 13 "$call$[Link]" "standard error of the variables"
## 14 "$call$row.w" "weights for the individuals"
## 15 "$call$col.w" "weights for the variables"

O objeto que é criado usando a funçãoPCA() contém muitas informações encontradas em


muitas listas e matrizes diferentes. Esses valores são descritos na próxima seção.

Visualização e Interpretação

Usaremos o pacote factoextraR para ajudar na interpretação da PCA. Não importa o que
função que você decide usar [stats::prcomp(), FactoMiner::PCA(), ade4::[Link](),
ExPosition::epPCA()], você pode facilmente extrair e visualizar os resultados da PCA usando R
funções fornecidas no pacote factoextraR.

Estas funções incluem:

obter_autovalor([Link])Extraia os autovalores/variâncias do principal


componentes
fviz_eig([Link])Visualize os valores próprios

197
obter_ind_pca([Link]), obter_var_pca([Link])Extraia os resultados para
indivíduos e variáveis, respectivamente.

fviz_pca_ind([Link]), fviz_pca_var([Link])Visualize os resultados


indivíduos e variáveis, respectivamente.

fviz_pca_biplot([Link])Faça um biograma de indivíduos e variáveis.

Nas próximas seções, vamos ilustrar cada uma dessas funções.

Valores próprios / Variâncias

Conforme descrito em seções anteriores, os autovalores medem a quantidade de variação


retidos por cada componente principal. Os autovalores são grandes para os primeiros PCs e pequenos.
para os PCs subsequentes. Ou seja, os primeiros PCs correspondem às direções com o
máxima quantidade de variação no conjunto de dados.

Examinamos os autovalores para determinar o número de componentes principais a serem


considerados. Os autovalores e a proporção de variâncias (ou seja, informações) retidas
os componentes principais (PCs) podem ser extraídos usando a função get_eigenvalue()
[factoextrapackage].

biblioteca("factoextra")
[Link] <- get_eigenvalue([Link])
[Link]
## eigenvalue [Link] [Link]
## Dim.1 4.124 41.24 41.2
## Dim.2 1.839 18.39 59.6
## Dim.3 1.239 12.39 72.0
## Dim.4 0.819 8.19 80.2
## Dim.5 0.702 7.02 87.2
## Dim.6 0.423 4.23 91.5
## Dim.7 0.303 3.03 94.5
## Dim.8 0.274 2.74 97.2
## Dim.9 0.155 1.55 98.8
## Dim.10 0.122 1.22 100.0

A soma de todos os autovalores dá uma variância total de 10.

A proporção da variação explicada por cada autovalor é dada na segunda coluna.


Por exemplo, 4.124 dividido por 10 é igual a 0.4124, ou, cerca de 41,24% da variação é
explicado por este primeiro autovalor. A porcentagem cumulativa explicada é obtida por
adicionando as proporções sucessivas de variação explicadas para obter o total acumulado. Para
por exemplo, 41,242% mais 18,385% é igual a 59,627%, e assim por diante. Portanto, cerca de
59,627% da variação é explicada pelos dois primeiros autovalores juntos.

Os autovalores podem ser usados para determinar o número de componentes principais a serem mantidos
após PCA (Kaiser 1961):

Um autovalor > 1 indica que os PCs representam mais variância do que contada
por uma das variáveis originais nos dados padronizados. Isso é comumente usado como um
ponto de corte para o qual os PCs são retidos. Isso é verdade apenas quando os dados são
padronizado.

198
Você também pode limitar o número de componentes a esse número que conta para um
certa fração da variância total. Por exemplo, se você está satisfeito com 70%
da variância total explicada, então use o número de componentes para alcançar
isso.

Infelizmente, não há uma maneira objetiva bem aceita para decidir quantos principais
os componentes são suficientes. Isso dependerá do campo específico de aplicação e o
conjunto de dados específico. Na prática, tendemos a olhar para os primeiros componentes principais em
ordem para encontrar padrões interessantes nos dados.

Na nossa análise, os três primeiros componentes principais explicam 72% da variação. Isso
é uma porcentagem aceitavelmente grande.

Um método alternativo para determinar o número de componentes principais é olhar para um


Gráfico de Scree, que é o gráfico de autovalores ordenados do maior para o menor. O
o número de componentes é determinado no ponto, além do qual o restante
os autovalores são todos relativamente pequenos e de tamanho comparável (Jollife 2002, Peres-Neto,
Jackson e Somers (2005)).

O gráfico de inclinação pode ser produzido usando a funçãofviz_eig()oufviz_screeplot()


[pacoteextrapolo].

fviz_eig([Link], addlabels = TRUE, ylim = c(0, 50))

Do gráfico acima, podemos querer parar no quinto componente principal. 87% do


as informações (variâncias) contidas nos dados são retidas pelos cinco primeiros principais
componentes.

Gráfico de variáveis

Results

Um método simples para extrair os resultados, para variáveis, de uma saída de PCA é usar o
funçãoget_pca_var()[factoextrapackage]. Esta função fornece uma lista de matrizes

199
contendo todos os resultados para as variáveis ativas (coordenadas, correlação entre
variáveis e eixos, cosseno ao quadrado e contribuições

var <- get_pca_var([Link])


var
Resultados da Análise de Componentes Principais para variáveis
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the variables"
## 2 "$cor" "Correlations between variables and dimensions"
## 3 "$cos2" "Cos2 for the variables"
## 4 "$contrib" "contributions of the variables"

Os componentes doget_pca_var()pode ser usado no gráfico de variáveis da seguinte forma:

var$coordcoordenadas de variáveis para criar um gráfico de dispersão


var$cos2representa a qualidade da representação para variáveis no fator
mapa. Ele é calculado como as coordenadas ao quadrado: var.cos2 = [Link] *
[Link].

var$contribcontém as contribuições (em porcentagem) das variáveis para o


componentes principais. A contribuição de uma variável (var) para um determinado principal
o componente é (em porcentagem): (var.cos2 * 100) / (total cos2 do componente).

Observe que é possível plotar variáveis e colorir conforme i) suas


qualidade no mapa de fatores (cos2) ou ii) seus valores de contribuição ao principal
componentes (contrib).

Os diferentes componentes podem ser acessados da seguinte forma:

# Coordenadas
cabeça(var$coord)
# Cos2: qualidade no mapa de fatores
cabeça(var$cos2)
Contribuições para os componentes principais
cabeça(var$contrib)

Nesta seção, descrevemos como visualizar variáveis e tirar conclusões sobre elas.
correlações. Em seguida, destacamos variáveis de acordo com i) sua qualidade de
representação no mapa de fator ou ii) suas contribuições para os componentes principais.

Círculo de correlação

A correlação entre uma variável e um componente principal (PC) é usada como a


as coordenadas da variável no PC. A representação das variáveis difere de
gráfico das observações: As observações são representadas por suas projeções, mas a
as variáveis são representadas por suas correlações (Abdi e Williams 2010).

Coordenadas das variáveis


cabeça(var$coord, 4)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## X100m -0.851 -0.1794 0.302 0.0336 -0.194
## [Link] 0.794 0.2809 -0.191 -0.1154 0.233
## [Link] 0.734 0.0854 0.518 0.1285 -0.249

200
## [Link] 0.610 -0.4652 0.330 0.1446 0.403

Para plotar variáveis, digite isto:

fviz_pca_var([Link], [Link] = "preto")

O gráfico acima também é conhecido como gráficos de correlação de variáveis. Ele mostra os relacionamentos
entre todas as variáveis. Pode ser interpretado da seguinte forma:

Variáveis positivamente correlacionadas são agrupadas juntas.


Variáveis com correlação negativa estão posicionadas em lados opostos do gráfico
origem (quadrantes opostos).

A distância entre as variáveis e a origem mede a qualidade da


variáveis no mapa de fatores. Variáveis que estão longe da origem estão bem
representado no mapa de fatores.

Qualidade da representação

A qualidade da representação das variáveis no mapa fatorial é chamada de cos2.


cosseno, coordenadas ao quadrado) . Você pode acessar o cos2 da seguinte forma:

cabeça(var$cos2, 4)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## X100m 0.724 0.03218 0.0909 0.00113 0.0378
## [Link] 0.631 0.07888 0.0363 0.01331 0.0544
## [Link] 0.539 0.00729 0.2679 0.01650 0.0619

201
## [Link] 0.372 0.21642 0.1090 0.02089 0.1622

Você pode visualizar o cos2 das variáveis em todas as dimensões usando o corrplot
package:

biblioteca("corrplot")
corrplot(var$cos2, [Link]=FALSE)

Também é possível criar um gráfico de barras das variáveis cos2 usando a funçãofviz_cos2()
in factoextra

# Total cos2 das variáveis na Dim.1 e Dim.2


fviz_cos2([Link], escolha = "var", eixos = 1:2)

Observe que,

202
Um alto cos2 indica uma boa representação da variável no principal
componente. Neste caso, a variável está posicionada próxima à circunferência de
o círculo de correlação.

Um baixo cos2 indica que a variável não é perfeitamente representada pelos PCs. Em
neste caso, a variável está próxima ao centro do círculo.

Para uma determinada variável, a soma dos cos² em todos os componentes principais é igual a
um.

Se uma variável é perfeitamente representada por apenas dois componentes principais (Dim.1 &
Dim.2), a soma dos cos2 desses dois PCs é igual a um. Neste caso, as variáveis
será posicionado no círculo de correlações.

Para algumas das variáveis, mais de 2 componentes podem ser necessários para perfeitamente
representar os dados. Neste caso, as variáveis estão posicionadas dentro do círculo de
correlações.

Em resumo:

Os valores de cos2 são usados para estimar a qualidade da representação


Quanto mais próximo uma variável estiver do círculo de correlações, melhor será sua representação.
no mapa fator (e mais importante é interpretar esses componentes)

Variáveis que estão mais próximas do centro do gráfico são menos importantes para o primeiro
componentes.

É possível colorir variáveis pelos seus valores de cos2 usando o [Link] =


cos2Isso produz cores em gradiente. Neste caso, o [Link]
ser usado para fornecer uma cor personalizada. Por exemplo,[Link] = c("white",
"blue", "red") significa que:

variáveis com valores baixos de cos2 serão coloridas de "branco"


variáveis com valores de mid cos2 serão coloridas de "azul"

variáveis com altos valores de cos2 serão coloridas de vermelho

Cor por valores cos2: qualidade no mapa de fatores


fviz_pca_var([Link], [Link] = "cos2",
[Link] = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE # Avoid text overlapping
)

203
Observe que também é possível alterar a transparência das variáveis de acordo com
seus valores de cos2 usando a opçã[Link] = "cos2". Por exemplo, digite isto:

Mude a transparência pelos valores de cos2


fviz_pca_var([Link], [Link] = "cos2")
Contribuições das variáveis para os componentes principais

As contribuições das variáveis na contabilização da variabilidade em um determinado principal


os componentes são expressos em porcentagem.

As variáveis que estão correlacionadas com o PC1 (ou seja, Dim.1) e PC2 (ou seja, Dim.2) são as
mais importante na explicação da variabilidade no conjunto de dados.

Variáveis que não se correlacionam com nenhum PC ou se correlacionam com o último


as dimensões são variáveis com baixa contribuição e podem ser removidas para
simplifique a análise geral.

A contribuição das variáveis pode ser extraída da seguinte forma:

cabeça(var$contrib, 4)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## X100m 17.54 1.751 7.34 0.138 5.39
## [Link] 15.29 4.290 2.93 1.625 7.75
## Lançamento do peso 13.06 0.397 21.62 2.014 8.82
## [Link] 9.02 11.772 8.79 2.550 23.12

Quanto maior o valor da contribuição, mais a variável contribui para o


componente.

É possível usar a funçãocorrplot()[pacote corrplot] para destacar o mais


variáveis de contribuição para cada dimensão:

biblioteca("corrplot")
corrplot(var$contrib, [Link]=FALSE)

204
A funçãofviz_contrib()[pacote factoextra] pode ser usado para desenhar um gráfico de barras de
contribuições variáveis. Se seus dados contêm muitas variáveis, você pode decidir mostrar
apenas as principais variáveis contribuintes. O código R abaixo mostra as 10 principais variáveis
contribuindo para os componentes principais:

# Contributions of variables to PC1


fviz_contrib([Link], escolha = "var", eixos = 1, topo = 10)
Contribuições das variáveis para o PC2
fviz_contrib([Link], escolha = "var", eixos = 2, top = 10)

205
A contribuição total para PC1 e PC2 é obtida com o seguinte código R:

fviz_contrib([Link], choice = "var", axes = 1:2, top = 10)

A linha vermelha pontilhada no gráfico acima indica a contribuição média esperada. Se


a contribuição das variáveis era uniforme, o valor esperado seria
1/comprimento(variáveis) = 1/10 = 10%. Para um componente dado, uma variável com uma contribuição
maior do que este limite poderia ser considerado importante na contribuição para o
componente.

Note que a contribuição total de uma determinada variável na explicação das variações retidas
por dois componentes principais, digamos PC1 e PC2, é calculado como contrib = [(C1 * Eig1)
+ (C2 * Eig2)]/(Eig1 + Eig2), onde

C1 e C2 são as contribuições da variável no PC1 e PC2, respectivamente.

Eig1 e Eig2 são os autovalores de PC1 e PC2, respectivamente. Lembre-se que


Os autovalores medem a quantidade de variação retida por cada PC.

Nesse caso, a contribuição média esperada (limite) é calculada da seguinte forma: Como
mencionado acima, se as contribuições das 10 variáveis fossem uniformes, o esperado
a contribuição média em um determinado PC seria 1/10 = 10%. A média esperada
a contribuição de uma variável para PC1 e PC2 é: [(10 * Eig1) + (10 * Eig2)] / (Eig1 + Eig2)

Pode-se ver que as variáveis - X100m, salto em distância e salto com vara - contribuem
maiormente nas dimensões 1 e 2.

As variáveis mais importantes (ou que contribuem) podem ser destacadas na correlação
plotar da seguinte forma:

fviz_pca_var([Link], [Link] = "contrib",


[Link] = c("#00AFBB", "#E7B800", "#FC4E07")
)

206
Observe que também é possível alterar a transparência das variáveis de acordo com suas
valores de contrib usando a opçã[Link] = "contrib". Por exemplo, digite isto:

# Mudar a transparência pelos valores de contribuição


fviz_pca_var([Link], [Link] = "contrib")
Cor por uma variável contínua personalizada

Nas seções anteriores, mostramos como colorir as variáveis de acordo com suas contribuições e
seu cos2. Observe que é possível colorir variáveis por qualquer variável contínua personalizada.
A variável de coloração deve ter o mesmo comprimento que o número de variáveis ativas em
a PCA (aqui n = 10).

Por exemplo, digite isto:

Crie uma variável contínua aleatória de comprimento 10


[Link](123)
[Link] <- rnorm(10)
# Variáveis de cor pela variável contínua
fviz_pca_var([Link], [Link] = [Link],
[Link] = c("blue", "yellow", "red"),
[Link] = "[Link]")

Cor por grupos

Também é possível mudar a cor das variáveis por grupos definidos por um
variável qualitativa/categórica, também chamada defatorem terminologia R.

Como não temos nenhuma variável de agrupamento em nossos conjuntos de dados para classificar variáveis, nós vamos
crie isso.

No seguinte exemplo de demonstração, começamos classificando as variáveis em 3 grupos usando


okmeansalgoritmo de agrupamento. Em seguida, usamos os clusters retornados pelo kmeans
algoritmo para colorir variáveis.

207
Observe que, se você estiver interessado em aprender sobre agrupamento, publicamos anteriormente um livro
Guia Prático de Análise de Cluster em R[Link]

Criar uma variável de agrupamento usando kmeans


Crie 3 grupos de variáveis (centros = 3)
[Link](123)
[Link] <- kmeans(var$coord, centros = 3, nstart = 25)
grp <- [Link]([Link]$cluster)
# Color variables by groups
fviz_pca_var([Link], [Link] = grp,
palette = c("#0073C2FF", "#EFC000FF", "#868686FF"),
[Link] = "Cluster")

Observe que, para mudar a cor dos grupos, o argumento palette deve ser usado. Para mudar
cores em gradiente, o argumento [Link] deve ser usado.

Descrição da dimensão

Na seção @ref(pca-variable-contributions), descrevemos como destacar variáveis


de acordo com suas contribuições para os componentes principais.

Observe também que a funçãodimdesc()[in FactoMineR], para descrição de dimensões, pode


ser usado para identificar as variáveis mais significativamente associadas a um determinado principal
componente. Pode ser utilizado da seguinte forma:

[Link] <- dimdesc([Link], axes = c(1,2), proba = 0.05)


# Description of dimension 1
[Link]$Dim.1
$quanti
## correlation [Link]
## [Link] 0.794 6.06e-06
## Disco 0.743 4.84e-05
## [Link] 0.734 6.72e-05
## [Link] 0.610 1.99e-03
## Javeline 0.428 4.15e-02
## X400m -0.702 1.91e-04
## X110m. barreira -0.764 2.20e-05
## X100m -0.851 2.73e-07

208
# Description of dimension 2
[Link]$Dim.2
$quanti
## correlation [Link]
## [Link] 0.807 3.21e-06
## X1500m 0.784 9.38e-06
## [Link] -0.465 2.53e-02

Na saída acima, $quantimeans resultados para variáveis quantitativas. Note que,


as variáveis são ordenadas pelo valor p da correlação.

Gráfico de indivíduos

Results

Os resultados, para indivíduos, podem ser extraídos usando a funçãoget_pca_ind()


[factoextrapackage]. Similarly to theget_pca_var(), a funçãoget_pca_ind()
fornece uma lista de matrizes contendo todos os resultados para os indivíduos (coordenadas,
correlação entre indivíduos e eixos, cosseno ao quadrado e contribuições)

ind <- obter_ind_pca([Link])


ind
Resultados da Análise de Componentes Principais para indivíduos
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the individuals"
## 2 "$cos2" "Cos2 for the individuals"
## 3 "$contrib" "contributions of the individuals"

Para ter acesso aos diferentes componentes, use isto:

# Coordinates of individuals
cabeça(ind$coord)
Qualidade dos indivíduos
cabeça(ind$cos2)
Contribuições de indivíduos
cabeça(ind$contrib)
Gráficos: qualidade e contribuição

Ofviz_pca_ind()é usado para produzir o gráfico de indivíduos. Para criar um simples


trama, digite isso:

fviz_pca_ind([Link])

Assim como as variáveis, também é possível colorir os indivíduos pelos seus valores de cos2:

fviz_pca_ind([Link], [Link] = "cos2",


[Link] = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE # Avoid text overlapping (slow if many
points)
)

209
Note que indivíduos semelhantes são agrupados no gráfico.

Você também pode alterar o tamanho do ponto de acordo com o cos² dos indivíduos correspondentes:

fviz_pca_ind([Link], tamanho_ponto = "cos2",


pointshape = 21, fill = "#E7B800",
repel = TRUE # Evitar sobreposição de texto (lento se muitos
pontos)
)

Para mudar tanto o tamanho do ponto quanto a cor pelo cos2, tente o seguinte:

fviz_pca_ind([Link], [Link] = "cos2", pointsize = "cos2",


[Link] = c("#00AFBB", "#E7B800", "#FC4E07"),

210
repel = TRUE # Avoid text overlapping (slow if many
pontos)
)

Para criar um gráfico de barras da qualidade de representação (cos2) dos indivíduos no fator
mapa, você pode usar a funçãofviz_cos2()conforme descrito anteriormente para variáveis:

fviz_cos2([Link], escolha = "ind")

Para visualizar a contribuição dos indivíduos para os dois primeiros componentes principais, digite
isso:

Contribuição total no PC1 e PC2


fviz_contrib([Link], escolha = "ind", eixos = 1:2)

Colorir por uma variável contínua personalizada

Quanto às variáveis, os indivíduos podem ser coloridos por qualquer variável contínua personalizada por
especificando o [Link].

Por exemplo, digite isto:

# Crie uma variável contínua aleatória de comprimento 23,


Tamanho igual ao número de indivíduos ativos na PCA
[Link](123)
[Link] <- rnorm(23)
Colorir indivíduos pela variável contínua
fviz_pca_ind([Link], [Link] = [Link],
[Link] = c("blue", "yellow", "red"),
[Link] = "[Link]")
Colorir por grupos

Aqui, descrevemos como colorir indivíduos por grupo. Além disso, mostramos como adicionar
elipses de concentração e elipses de confiança por grupos. Para isso, usaremos os dados da íris.
como conjuntos de dados de demonstração.

Conjuntos de dados da íris parecem assim:

cabeça(íris, 3)
## [Link] [Link] [Link] [Link] Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa

211
## 3 4.7 3.2 1.3 0.2 setosa

A coluna "Espécies" será usada como variável de agrupamento. Começamos calculando


análise de componentes principais da seguinte forma:

A variável Espécie (índice = 5) foi removida


antes da análise de PCA
[Link] <- PCA(iris[,-5], graph = FALSE)

No código R abaixo: o argumentovestuá[Link] ser usado para especificar o


variável de fator para colorir os indivíduos por grupos.

Para adicionar uma elipse de concentração em torno de cada grupo, especifique o argumentoaddEllipses =
VERDADEIROO argumentopaletapode ser usado para mudar as cores do grupo.

fviz_pca_ind([Link],
[Link] = "point", # show points only (nbut not "text")
[Link] = iris$Species, # color by groups
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
addEllipses = TRUE, # Concentration ellipses
[Link] = "Groups"
)

Para remover o ponto médio do grupo, especifique o argumento [Link] = FALSE.

Se você quiser elipses de confiança em vez de elipses de concentração, use [Link] =


confiança

Adicionar elipses de confiança


fviz_pca_ind([Link], [Link] = "ponto", [Link] = iris$Espécies,
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
addEllipses = TRUE, [Link] = "confidence",
[Link] = "Groups"
)

Note that, allowed values for palette include:

cinza para paletas de cores cinza;

212
paletas de brewers, por exemplo, "RdBu", "Blues", ...; Para visualizar todas, digite isso no R:
RColorBrewer::[Link]().

paleta de cores personalizada, por exemplo, c(“azul”, “vermelho”);

e paletas de revistas científicas depacote R ggsci, por exemplo: “npg”, “aaas”


“lancet”, “jco”, “ucscgb”, “uchicago”, “simpsons” and “rickandmorty”.

Por exemplo, para usar a paleta de cores do jco (journal of clinical oncology), digite isto:

fviz_pca_ind([Link],
label = "none", # hide individual labels
habillage = iris$Species, # color by groups
addEllipses = TRUE, # Concentration ellipses
palette = "jco"
)
Personalização de gráficos

Note que,fviz_pca_ind()efviz_pca_var()e funções relacionadas são envoltórias


em torno da função principalfviz()[infactoextra]. fviz() é um wrapper em torno da função
ggscatter()[em ggpubr]. Portanto, argumentos adicionais, a serem passados para a função
fviz() e ggscatter(), podem ser especificados em fviz_pca_ind() e fviz_pca_var().

Aqui, apresentamos alguns desses argumentos adicionais para personalizar o gráfico PCA de
variáveis e indivíduos.

Dimensões

Por padrão, variáveis/indivíduos são representados nas dimensões 1 e 2. Se você quiser


visualizá-los nas dimensões 2 e 3, por exemplo, você deve especificar o argumento
axes = c(2, 3).

Variáveis nas dimensões 2 e 3


fviz_pca_var([Link], axes = c(2, 3))
Indivíduos nas dimensões 2 e 3
fviz_pca_ind([Link], eixos = c(2, 3))

Plot elements: point, text, arrow

O argumentogeom(para geometria) e derivadas são usados para especificar a geometria


elementos ou elementos gráficos a serem usados para o plotagem.

1. [Link] texto especificando a geometria a ser usada para plotar variáveis.


Allowed values are the combination of c(“point”, “arrow”, “text”).

[Link] = "point", para mostrar apenas pontos;

[Link] = "text" para mostrar apenas rótulos de texto;

[Link] = c("point", "text") para mostrar tanto pontos quanto rótulos de texto

[Link] = c("arrow", "text") mostrar setas e rótulos (padrão).

213
Por exemplo, digite isto:

Mostrar pontos variáveis e rótulos de texto


fviz_pca_var([Link], [Link] = c("ponto", "texto"))

[Link] texto especificando a geometria a ser usada para plotar indivíduos.


Os valores permitidos são a combinação de c("ponto", "texto").

[Link] = "point", para mostrar apenas pontos;

[Link] = "text" mostrar apenas rótulos de texto;

[Link] = c("point", "text") para mostrar tanto rótulos de pontos quanto de texto
(padrão)

Por exemplo, digite isto:

Mostrar apenas rótulos de texto individuais


fviz_pca_ind([Link], [Link] = "texto")
Tamanho e forma dos elementos do lote

1. tamanhodetalhetamanho da fonte para os rótulos de texto, por exemplo:labelsize = 4.


[Link] da fonteo tamanho dos pontos, por exemplo:pointsize = 1.5.

[Link] tamanho das flechas. Controla a espessura das flechas, por exemplo:
arrowsize = 0.5.

[Link] do pontoa forma dos pontospointshape = 21. Tipo


ggpubr::mostrar_formas_pontos()para ver as formas de ponto disponíveis.

# Mudar o tamanho das setas e rótulos


fviz_pca_var([Link], tamanho_seta = 1, tamanho_rótulo = 5,
repel = TRUE)
# Mudar o tamanho, formato e cor de preenchimento dos pontos
# Mudar tamanho do rótulo
fviz_pca_ind([Link],
pointsize = 3, pointshape = 21, fill = "lightblue",
labelsize = 5, repel = TRUE)

Elipses

Como descrevemos na seção anterior @ref(color-ind-by-groups), ao colorir


indivíduos por grupos, você pode adicionar elipses de concentração de pontos usando o argumento
addEllipses = TRUE.

Observe que, o [Link] pode ser usado para mudar o tipo de elipses.
Os valores possíveis são:

convexoplotar o casco convexo de um conjunto de pontos.


confiançadesenhe elipses de confiança em torno dos pontos médios do grupo como o
funçãocoord.éllipse()[em FactoMineR].

tassume uma distribuição t multivariada.

214
normaassume uma distribuição normal multivariada.

euclidesdesenha um círculo com o raio igual ao nível, representando o


distância euclidiana do centro. Esta elipse provavelmente não aparecerá circular
a menos quecoord_fixed()é aplicado.

O argumentoní[Link]ém está disponível para mudar o tamanho da concentração


elipse em probabilidade normal. Por exemplo, especifique [Link] = 0.95 ou [Link] =
0,66.

Adicionar elipses de confiança


fviz_pca_ind([Link], [Link] = "ponto",
[Link] = iris$Espécies, # cor por grupos
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
addEllipses = TRUE, [Link] = "confidence",
[Link] = "Groups"
)
Casco Convexo
fviz_pca_ind([Link], [Link] = "ponto",
[Link] = iris$Espécies, # cor por grupos
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
addEllipses = TRUE, [Link] = "convex",
[Link] = "Groups"
)
Pontos médios do grupo

Ao colorir indivíduos por grupos (seção @ref(color-ind-by-groups)), a média


os pontos dos grupos (baricentros) também são exibidos por padrão.

Para remover os pontos médios, use o [Link] = FALSE.

fviz_pca_ind([Link],
[Link] = "point", # show points only (but not "text")
[Link] = iris$Species, # cor por grupos
[Link] = "Groups",
[Link] = FALSE)
Linhas do eixo

O [Link] pode ser usado para especificar o tipo de linha dos eixos. O padrão é
"tracejado". Os valores permitidos incluem "em branco", "sólido", "pontilhado", etc. Para ver todas as possibilidades
tipo de valoresggpubr::mostrar_tipos_de_linha()em R.

Para remover linhas do eixo, use [Link] = "em branco":

fviz_pca_var([Link], [Link] = "blank")

Parâmetros gráficos

Para alterar facilmente o gráfico de qualquer ggplot, você pode usar a funçãoggpar()[ggpubr
pacote

Os parâmetros gráficos que podem ser alterados usando ggpar() incluem:

215
Main titles, axis labels and legend titles
Legend position. Possible values: “top”, “bottom”, “left”, “right”, “none”.

Paleta de cores.

Temas. Os valores permitidos incluem: theme_gray(), theme_bw(), theme_minimal(),


tema_clássico(), tema_vazio().

ind.p <- fviz_pca_ind([Link], geom = "ponto", [Link] =


iris$Espécies)
ggpubr::ggpar(ind.p,
title = "Principal Component Analysis",
subtitle = "Iris data set",
caption = "Source: factoextra",
xlab = "PC1", ylab = "PC2",
[Link] = "Species", [Link] = "top",
ggtheme = theme_gray(), palette = "jco"
)

Biplot

Para fazer um biplot simples de indivíduos e variáveis, digite isto:

fviz_pca_biplot([Link], repel = TRUE,


[Link] = "#2E9FDF", # Variables color
[Link] = "#696969" # Individuals color
)

216
Note que o biplot pode ser útil apenas quando há um baixo número de variáveis e
indivíduos no conjunto de dados; caso contrário, o gráfico final seria ilegível.

Note também que as coordenadas de indivíduos e variáveis não são construídas em


mesmo espaço. Portanto, no biplot, você deve se concentrar principalmente na direção de
variáveis, mas não em suas posições absolutas no gráfico.

De maneira geral, um biplot pode ser interpretado da seguinte forma:

um indivíduo que está do mesmo lado de uma determinada variável tem um alto valor para isso
variável;
um indivíduo que está do lado oposto de uma variável dada possui um valor baixo para
essa variável.

Agora, usando [Link], let’s :

faça um biplot de indivíduos e variáveis


mudar a cor dos indivíduos por grupos: [Link] = iris$Espécies

mostre apenas os rótulos para variáveis:label = "var" ou [Link] = "point"

fviz_pca_biplot([Link],
[Link] = iris$Species, palette = "jco",
addEllipses = TRUE, label = "var",
[Link] = "black", repel = TRUE,
[Link] = "Species")

217
No exemplo a seguir, queremos colorir tanto os indivíduos quanto as variáveis por grupos.
O truque é usar pointshape = 21 para pontos individuais. Esta forma de ponto em particular pode
ser preenchido por uma cor usando o [Link] cor da linha de borda do indivíduo
pontos está definido como "preto" [Link]. Para colorir a variável por grupos, o argumento
[Link]á usado.

Para personalizar indivíduos e cores variáveis, usamos as funções auxiliares


preencher_paleta()epaleta_de_cores()[no pacote ggpubr].

fviz_pca_biplot([Link],
# Preencher indivíduos por grupos
[Link] = "point",
pointshape = 21,
tamanhodoponto = 2.5,
[Link] = iris$Espécies,
[Link] = "black",
# Variável de cor por grupos
[Link] = factor(c("sepal", "sepal", "petal",
"pétala"),

[Link] = list(fill = "Species", color =


"Clusters"
repel = TRUE # Avoid label overplotting
)+
ggpubr::fill_palette("jco") + # Cor de preenchimento individual
ggpubr::color_palette("npg") # Cores das variáveis

218
Outro exemplo complexo é colorir indivíduos por grupos (cor discreta) e
variáveis por suas contribuições aos componentes principais (cores em gradiente).
Além disso, mudaremos a transparência das variáveis de acordo com suas contribuições usando o
[Link].

fviz_pca_biplot([Link],
Indivíduos
[Link] = "point",
[Link] = iris$Species, [Link] = "black",
pointshape = 21, pointsize = 2,
palette = "jco",
addEllipses = TRUE,
# Variáveis
[Link] ="contrib", [Link] = "contrib",
[Link] = "RdYlBu",

[Link] = list(fill = "Species", color =


Contrib
alpha = "Contrib")
)

219
Elementos suplementares

Definição e tipos

Conforme descrito acima (seção @ref(pca-data-format)), odecatloconjuntos de dados contêm


variáveis contínuas suplementares ([Link], colunas 11:12), suplementar
variáveis qualitativas ([Link], coluna 13) e indivíduos suplementares ([Link],
linhas 24:27).

Variáveis e indivíduos suplementares não são utilizados para a determinação do


componentes principais. Suas coordenadas são previstas apenas com base nas informações
fornecido pela análise de componentes principais realizada em variáveis/indivíduos ativos.

Especificação em PCA

Para especificar indivíduos e variáveis suplementares, a funçãoPCA() pode ser usada como
seguir

PCA(X, [Link] = NULL,


[Link] = NULL, [Link] = NULL, graph = TRUE)

Xum data frame. As linhas são indivíduos e as colunas são variáveis numéricas.
[Link] vetor numérico especificando os índices dos suplementares
indivíduos

[Link], [Link] vetor numérico especificando, respectivamente, os índices


das variáveis quantitativas e qualitativas

gráficoum valor lógico. Se VERDADEIRO, um gráfico é exibido.

Por exemplo, digite isto:

[Link] <- PCA(decathlon2, [Link] = 24:27,


[Link] = 11:12, [Link] = 13, graph=FALSE)

220
Variáveis quantitativas

Resultados previstos (coordenadas, correlação e cos2) para o suplementar


variáveis quantitativas:

[Link]$[Link]
## $coord
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Rank -0.701 -0.2452 -0.183 0.0558 -0.0738
## Points 0.964 0.0777 0.158 -0.1662 -0.0311
##
## $cor
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Rank -0.701 -0.2452 -0.183 0.0558 -0.0738
## Pontos 0.964 0.0777 0.158 -0.1662 -0.0311
##
$cos2
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Rank 0.492 0.06012 0.0336 0.00311 0.00545
## Points 0.929 0.00603 0.0250 0.02763 0.00097

Visualize todas as variáveis (ativas e suplementares):

fviz_pca_var([Link])

Observe que, por padrão, variáveis quantitativas suplementares são mostradas na cor azul e
linhas tracejadas.

Argumentos adicionais para personalizar o gráfico:

# Mudar a cor das variáveis


fviz_pca_var([Link],
[Link] = "black", # Active variables
[Link] = "red" # Suppl. quantitative variables
)
# Ocultar variáveis ativas no gráfico,
# mostre apenas variáveis suplementares

221
fviz_pca_var([Link], invisível = "var")
# Hide supplementary variables
fviz_pca_var([Link], invisível = "[Link]")

Usando o fviz_pca_var(), as variáveis suplementares quantitativas são exibidas


automaticamente no gráfico do círculo de correlação. Observe que você pode adicionar o [Link]
variáveis manualmente, usando a função fviz_add(), para uma personalização adicional. Um
exemplo é mostrado abaixo.

Gráfico de variáveis ativas


p <- fviz_pca_var([Link], invisível = "[Link]")
Adicionar variáveis ativas suplementares
fviz_add(p, [Link]$[Link]$coord,
geom = c("arrow", "text"),
color = "red")

Indivíduos

Resultados previstos para os indivíduos suplementares ([Link]):

[Link]$[Link]

Visualize all individuals (active and supplementary ones). On the graph, you can
adicionar também as variáveis qualitativas suplementares ([Link]), que
As coordenadas podem ser acessadas usando [Link]$[Link]$coord.

p <- fviz_pca_ind([Link], [Link] = "azul", repel = TRUE)


p <- fviz_add(p, [Link]$[Link]$coord, cor = 'vermelho')
p

Os indivíduos suplementares são mostrados em azul. Os níveis do suplementar


As variáveis qualitativas são mostradas na cor vermelha.

222
Variáveis qualitativas

Na seção anterior, mostramos que você pode adicionar o qualitativo suplementar


variáveis em gráfico de indivíduos usandofviz_add().

Observe que as variáveis qualitativas suplementares também podem ser usadas para colorir.
indivíduos por grupos. Isso pode ajudar a interpretar os dados. Os conjuntos de dadosdecathlon2
contém uma variável qualitativa suplementar na coluna 13 correspondente ao tipo de
competências.

Os resultados referentes à variável qualitativa suplementar são:

[Link]$quali

Para colorir indivíduos por uma variável qualitativa suplementar, o argumentovestuário


é usado para especificar o índice da variável qualitativa suplementar. Historicamente, isso
o nome do argumento vem do pacote FactoMineR. É uma palavra francesa que significa
“vestindo” em inglês. Para manter a consistência entre FactoMineR e factoextra, nós
decidi manter o mesmo nome de argumento

fviz_pca_ind([Link], habillage = 13,


addEllipses = TRUE, [Link] = "confiança",
palette = "jco", repel = TRUE)

Lembre-se de que, para remover os pontos médios dos grupos, especifique o argumento [Link] =
FALSO.

Filtrando resultados

Se você tiver muitos indivíduos/variáveis, é possível visualizar apenas alguns deles.


usando os [Link].

[Link], [Link]: uma seleção de indivíduos/variáveis a serem plotadas. Permitido


os valores são NULL ou uma lista contendo os argumentos nome, cos2 ou contrib:

223
nomeé um vetor de caracteres contendo nomes de indivíduos/variáveis a serem plotados
cos2se cos2 está em [0, 1], ex: 0.6, então indivíduos/variáveis com um cos2 > 0.6 são
traçado

se cos2 > 1, ex: 5, então os 5 principais indivíduos/variáveis ativos e os 5 principais


colunas/linhas suplementares com o maior cos2 são plotadas

contribuiçãose contrib > 1, ex: 5, então as 5 principais pessoas/variáveis com o


as maiores contribuições estão plotadas

# Visualize variable with cos2 >= 0.6


fviz_pca_var([Link], [Link] = list(cos2 = 0.6))
As 5 principais variáveis ativas com o maior cos2
fviz_pca_var([Link], [Link]= list(cos2 = 5))
Selecionar por nomes
name <- list(name = c("[Link]", "[Link]", "X100m"))
fviz_pca_var([Link], [Link] = name)
# 5 principais indivíduos contribuidores e variável
fviz_pca_biplot([Link], [Link] = list(contrib = 5),
[Link] = list(contrib = 5),
ggtheme = theme_minimal()

Quando a seleção é feita de acordo com os valores de contribuição, suplementar


os indivíduos/variáveis não são mostrados porque não contribuem para a construção de
os eixos.

Exportando resultados

Exportar gráficos para arquivos PDF/PNG

Ofactoextrao pacote produz gráficos baseados em ggplot2. Para salvar quaisquer ggplots, o
o código padrão R é o seguinte:

# Imprima o gráfico em um arquivo pdf


pdf("[Link]")
imprimir(minha_plotagem)
[Link]()

Nos exemplos a seguir, mostraremos como salvar os diferentes gráficos em pdf ou


arquivos png.

O primeiro passo é criar os gráficos que você deseja como um objeto R:

Gráfico de Scree
[Link] <- fviz_eig([Link])
Gráfico de indivíduos
[Link] <- fviz_pca_ind([Link])
Gráfico de variáveis
[Link] <- fviz_pca_var([Link])

Em seguida, os gráficos podem ser exportados para um único arquivo pdf da seguinte forma:

pdf("[Link]") # Cria um novo dispositivo pdf


imprimir([Link])
imprimir([Link])

224
imprimir([Link])
[Link]() # Fecha o dispositivo pdf

Observe que, usando o código R acima, um arquivo PDF será criado no seu diretório atual de trabalho
diretório. Para ver o caminho do seu diretório de trabalho atual, digite getwd() no R
console.

Para imprimir cada gráfico em um arquivo png específico, o código R fica assim:

# Imprimir gráfico de scree em um arquivo png


png("[Link]")
imprimir([Link])
[Link]()
# Imprimir o gráfico dos indivíduos em um arquivo png
png("[Link]")
imprimir([Link])
[Link]()
# Imprimir variáveis plot para um arquivo png
png("[Link]")
imprimir([Link])
[Link]()

Outra alternativa para exportar ggplots é usar a funçãoggexport()[em ggpubr


pacote]. Nós gostamos do ggexport(), porque é muito simples. Com uma linha de código R, ele permite
nós exportamos gráficos individuais para um arquivo (pdf, eps ou png) (um gráfico por página). Também pode
organize os gráficos (2 gráficos por página, por exemplo) antes de exportá-los. Os exemplos
abaixo demonstra como exportar ggplots usando ggexport().

Exporte gráficos individuais para um arquivo pdf (um gráfico por página):

library(ggpubr)
ggexport(plotlist = list([Link], [Link], [Link]),
filename = "[Link]")

Organizar e exportar. Especificarnlinhaencolpara exibir vários gráficos na mesma página:

ggexport(plotlist = list([Link], [Link], [Link]),


nrow = 2, ncol = 2,
filename = "[Link]")

Exporte gráficos para arquivos png. Se você especificar uma lista de gráficos, serão gerados vários arquivos png.
automaticamente criado para segurar cada trama.

ggexport(plotlist = list([Link], [Link], [Link]),


filename = "[Link]")
Exportar resultados para arquivos txt/csv

Todos os resultados da ACP (coordenadas de indivíduos/variáveis, contribuições, etc) podem ser


exportado de uma vez, em um arquivo TXT/CSV, usando a funçã[Link]()[em
Pacote FactoMineR:

# Exportar para um arquivo TXT


[Link]([Link], "[Link]", sep = "\t")
Exportar para um arquivo CSV

225
[Link]([Link], "[Link]", sep = ";")

Resumo

Em conclusão, descrevemos como realizar e interpretar a análise de componentes principais.


(PCA). Computamos a PCA usando a função PCA() [FactoMineR]. Em seguida, usamos o
pacote factoextraR para produzir visualizações baseadas em ggplot2 dos resultados da PCA.

Existem outras funções [pacotes] para calcular PCA em R:

1. Usando prcomp() [stats]

[Link] <- prcomp(iris[, -5], scale. = TRUE)

Leia mais:[Link]

2. Usando princomp() [stats]

[Link] <- princomp(iris[, -5], cor = TRUE)

Leia mais:[Link]

3. Usando [Link]() [ade4]

biblioteca("ade4")
[Link] <- [Link](iris[, -5], scannf = FALSE, nf = 5)

Leia mais:[Link]

4. Usando epPCA() [ExPosition]

biblioteca("ExPosition")
[Link] <- epPCA(iris[, -5], gráfico = FALSO)

Não importa quais funções você decidir usar, na lista acima, o pacote factoextra pode
gerenciar a saída para criar gráficos bonitos semelhantes ao que descrevemos em
seções anteriores para o FactoMineR:

fviz_eig([Link]) # Gráfico de Scree


fviz_pca_ind([Link]) # Gráfico dos indivíduos
fviz_pca_var([Link]) # Gráfico de variáveis

226
IV.1. PCA em R Usando Ade4: Scripts Rápidos
Este artigo fornece códigos R de início rápido para calcular a análise de componentes principais.
(PCA) usando a função [Link]() no pacote R ade4. Vamos usar o pacote R factoextra
pacote para visualizar os resultados do PCA. Também descreveremos como prever as coordenadas
para novos indivíduos / dados de variáveis usando funções do ade4.

Saiba mais sobre os fundamentos e a interpretação da análise de componentes principais em


nosso artigo anterior:PCA - Fundamentos da Análise de Componentes Principais.

Install:

[Link]("magrittr") # para encadeamento %>%


[Link]("ade4") # Cálculo de PCA
[Link]("factoextra")# Visualização de PCA

Load:

biblioteca(ade4)
biblioteca(factoextra)
library(magrittr)
Conjuntos de dados

Demo data: decathlon2[em factoextra]


Descrição dos dados disponível em:PCA - Data format.

Data contents:

oActive individuals (rows 1 to 23) and active variables (columns 1 to 10).


Usado para calcular a PCA.

oIndivíduos suplementares (linhas 24 a 27) e variáveis suplementares


(colunas 11 a 13). Suas coordenadas serão previstas usando a PCA
informações e parâmetros obtidos com indivíduos/variáveis ativas.

227
Carregue os dados e extraia apenas indivíduos ativos e variáveis:

biblioteca("factoextra")
dados(decathlon2)
[Link] <- decathlon2[1:23, 1:10]
cabeça([Link][, 1:6])
## X100m [Link] [Link] [Link] X400m [Link]
## SEBRLE 11.0 7.58 14.8 2.07 49.8 14.7
## CLAY 10.8 7.40 14.3 1.86 49.4 14.1
## BERNARD 11.0 7.23 14.2 1.92 48.9 15.0
## YURKOV 11.3 7.09 15.2 2.10 50.4 15.3
## ZSIVOCZKY 11.1 7.30 13.5 2.01 48.6 14.2
## McMULLEN 10.8 7.31 13.8 2.13 49.9 14.4

Calcule PCA usando [Link]()


biblioteca(ade4)
[Link] <- [Link]([Link],
scannf = FALSE, # Hide scree plot
nf = 5 # Número de componentes mantidos em
os resultados
)
Visualize os resultados da PCA

Visualizar usando factoextra

O pacote R factoextra cria visualizações baseadas em ggplot2.

1. Visualize eigenvalues(scree plot). Show the percentage of variances explained


por cada componente principal.

fviz_eig([Link])

2. Graph of individuals. Individuals with a similar profile are grouped together.

fviz_pca_ind([Link],
[Link] = "cos2", # Color by the quality of
representação
[Link] = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE # Avoid text overlapping
)

228
3. Gráfico de variáveis. Variáveis positivamente correlacionadas apontam para o mesmo lado do
Plot. Variáveis negativamente correlacionadas apontam para lados opostos do gráfico.

fviz_pca_var([Link],
[Link] = "contrib", # Color by contributions to the PC
[Link] = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE # Avoid text overlapping
)

4. Biplot de indivíduos e variáveis

fviz_pca_biplot([Link], repel = VERDADEIRO,


[Link] = "#2E9FDF", # Variables color
[Link] = "#696969" # Individuals color
)

229
Visualize usando ade4

O pacote ade4 cria gráficos básicos em R.

Gráfico de Scree
gráfico de scree([Link], main = "Gráfico de Scree - Valores próprios")

Círculo de correlação de variáveis


[Link]([Link]$co)

230
Gráfico de indivíduos
[Link]([Link]$li,
xax = 1, # Dimension 1
yax = 2) # Dimension 2

Biplot de indivíduos e variáveis


dispersar([Link],
posieig = "none", # Hide the scree plot
[Link] = 0 # Hide row labels
)

231
nulo
Acesso aos resultados da PCA

biblioteca(factoextra)
Valores próprios
[Link] <- get_eigenvalue([Link])
[Link]

# Resultados para Variáveis


[Link] <- get_pca_var([Link])
[Link]$coord # Coordinates
[Link]$contrib # Contributions to the PCs
[Link]$cos2 # Qualidade da representação
# Resultados para indivíduos
[Link] <- get_pca_ind([Link])
[Link]$coord # Coordinates
[Link]$contrib # Contributions to the PCs
[Link]$cos2 # Quality of representation
Predictar usando PCA

Nesta seção, mostraremos como prever as coordenadas de indivíduos suplementares


e variáveis usando apenas as informações fornecidas pela PCA realizada anteriormente.

Indivíduos suplementares

1. Dados: linhas 24 a 27 e colunas 1 a 10 [no conjunto de dados decathlon2]. O novo


os dados devem conter colunas (variáveis) com os mesmos nomes e na mesma
ordem como os dados ativos usados para calcular PCA.

# Dados para os indivíduos suplementares


[Link] <- decathlon2[24:27, 1:10]
[Link][, 1:6]
## X100m [Link] [Link] [Link] X400m [Link]
## KARPOV 11.0 7.30 14.8 2.04 48.4 14.1
## WARNERS 11.1 7.60 14.3 1.98 48.7 14.2
## Nool 10.8 7.53 14.3 1.88 48.8 14.8
## Drews 10.9 7.38 13.1 1.88 48.5 14.0

232
2. Prever as coordenadas de novos dados de indivíduos.

[Link] <- suprow([Link], [Link]) %>%


.$lisup
[Link][, 1:4]
## Eixo1 Eixo2 Eixo3 Eixo4
## KARPOV -0.795 0.7795 1.633 1.724
## WARNERS 0.386 -0.1216 1.739 -0.706
## Nool 0.559 1.9775 0.483 -2.278
## Drews 1.109 0.0174 3.049 -1.534

3. Gráfico de indivíduos, incluindo os indivíduos suplementares:

Gráfico de indivíduos ativos


p <- fviz_pca_ind([Link], repel = TRUE)
Adicionar indivíduos suplementares
fviz_add(p, [Link], color ="azul")

Variáveis suplementares

Variáveis qualitativas / categóricas

Os conjuntos de dadosdecathlon2contém
uma variável qualitativa suplementar na coluna 13
correspondente ao tipo de competições.

Variáveis qualitativas / categóricas podem ser usadas para colorir indivíduos por grupos. O
a variável de agrupamento deve ter o mesmo comprimento que o número de indivíduos ativos (aqui
23).

gráficos baseados em factoextra

grupos <- [Link](decathlon2$Competição[1:23])


fviz_pca_ind([Link],
[Link] = groups, # color by groups
palette = c("#00AFBB", "#FC4E07"),
addEllipses = TRUE, # Concentration ellipses
[Link] = "confidence",

233
[Link] = "Groups",
repel = TRUE
)

gráficos baseados em ade4:

grupos <- [Link](decathlon2$Competição[1:23])


[Link]([Link]$li,
fac = groups, # color by groups
col = c("#00AFBB", "#FC4E07")
)

Biplot
res <- scatter([Link], [Link] = 0, posieig = "none")
[Link]([Link]$li,
fac = grupos,
col = c("#00AFBB", "#FC4E07"),

234
[Link] = TRUE, # Add onto the scatter plot
cstar = 0, # Remove stars
cellipse = 0 # Remove ellipses
)

Variáveis quantitativas

Data: columns 11:12. Should be of same length as the number of active individuals
(aqui 23)

[Link] <- decathlon2[1:23, 11:12, drop = FALSE]


cabeça([Link])
## Posição Pontos
## SEBRLE 1 8217
ARGILA 2 8122
## BERNARD 4 8067
## YURKOV 5 8036
## ZSIVOCZKY 7 8004
## McMULLEN 8 7995

As coordenadas de uma determinada variável quantitativa são calculadas como a correlação


entre as variáveis quantitativas e os componentes principais.

# Prever coordenadas e calcular cos2


[Link] <- supcol([Link], scale([Link])) %>%
.$cosup
quanti.cos2 <- [Link]^2
Gráfico de variáveis incluindo variáveis suplementares
p <- fviz_pca_var([Link])
fviz_add(p, [Link], color ="azul", geom="seta")

235
236

Você também pode gostar