Guia Prático de Regressão e Classificação em R
Guia Prático de Regressão e Classificação em R
2
III.6._ GradientetEssenciais de Boostng em R Usando XGBOOST....................................................................182
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:
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
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.
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.
Recursos principais:
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).
b0 é a interceptação,
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).
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.
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:
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
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:
8
oRegressão linear múltipla
oRegressão de Ridge
oRegressão Lasso
Contents:
conjunto
odados de marketing
odados suíços
oDados de Boston
dados de marketing
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.
if(!require(devtools)) [Link]("devtools")
devtools::install_github("kassambara/datarium")
9
## 2 53.4 47.2 54.1 12.5
## 3 20.6 55.1 83.2 11.2
swiss data
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
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:
chasvariável dummy do Charles River (= 1 se o setor faz limite com o rio; 0 caso contrário)
10
imposto, taxa de imposto sobre propriedade a valor total por USD 10.000
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.
Duas métricas importantes são comumente usadas para avaliar o desempenho do preditivo
modelo de regressão
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
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.
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).
biblioteca(tidyverse)
biblioteca(caret)
theme_set(theme_bw())
Preparando os dados
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], ]
14
RMSE(predictions, [Link]$sales)
# (b) R-square
R2(previsões, [Link]$vendas)
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:
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.
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
Note que, se você tiver muitas variáveis preditoras em seus dados, pode simplesmente incluir todas.
as variáveis disponíveis no modelo usando~.:
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:
Como descrito anteriormente, você pode facilmente fazer previsões usando a função R
prever():
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
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
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.
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 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.
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.
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:
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.
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.
Portanto, você deve considerar principalmente o R-quadrado ajustado, que é um R2 penalizado para um
maior número de preditores.
3.F-Statistic:
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.
Fazendo previsões
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:
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
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:
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.
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.
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).
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:
23
ou como:
biblioteca(tidyverse)
biblioteca(caret)
Preparando os dados
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
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
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).
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.
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
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.
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
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
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:
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.
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:
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:
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.
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.
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:
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.
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.
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
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.
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.
Contents:
Preparando os dados
Regressão polinomial
Transformação logarítmica
Regressão spline
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
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], ]
O gráfico de dispersão acima sugere uma relação não linear entre as duas variáveis.
33
Regressão linear {linear-reg}
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:
Regressão polinomial
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.
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 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:
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:
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).
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
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
Visualize os dados:
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.
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.
eé o termo de erro (também conhecido como erros residuais), a parte de y que pode ser
explicado pelo modelo de regressão
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).
biblioteca(tidyverse)
biblioteca(ggpubr)
theme_set(theme_pubr())
40
Primeiro instale odatariumpacote usando
devtools::install_github("kassmbara/datarium"), então carregue e inspecione o
marketingdata as follow:
# 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
cor(marketing$sales, marketing$youtube)
## [1] 0,782
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 função Rlm()pode ser usado para determinar os coeficientes beta do modelo linear:
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.
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:
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:
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)
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.
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).
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:
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:
3. F-statistic
45
## rse [Link] [Link] [Link]
## 1 3.91 0.612 312 1.47e-42
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.
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.
sigma(model)*100/média(marketing$vendas)
23,2
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.
3.F-Statistic:
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.
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.
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).
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.
Certifique-se de que leu nosso artigo anterior: [modelo de regressão linear simples]
(([Link]
regressão-em-r/).
Contents:
Construindo modelo
Interpretação
Leia também
Referências
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.
Queremos construir um modelo para estimar vendas com base no orçamento de publicidade investido.
no youtube, facebook e jornal, como segue:
Interpretação
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 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.
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.
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.
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:
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.
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.
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
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:
Se você quiser realizar a regressão usando todas as variáveis, exceto uma, digamos
jornal, digite isto:
52
I.8._Prever em R: Previsões do Modelo e Intervalos de Confiança
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:
Intervalo de confiança
Intervalo de previsão
Referências
# 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.
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)
)
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":
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:
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.
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.
55
I.9._ Diagnóstico do Modelo de Regressão
56
I.10._ Suposições e Diagnósticos da Regressão Linear em R:
Essenciais
Após realizar uma análise de regressão, você deve sempre verificar se o modelo funciona
bem para os dados em questão.
Neste capítulo atual, você aprenderá etapas adicionais para avaliar quão bem o modelo
se encaixa nos dados.
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,
Contents:
57
Pressupostos da regressão
oGráficos de diagnóstico
Homogeneidade de variância
Valores influentes
Referências
library(tidyverse)
biblioteca(broom)
theme_set(theme_classic())
# 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.
58
## (Intercept) youtube
## 8.4391 0.0475
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.
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
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).
Suposições de regressão
60
Você deve verificar se essas suposições são verdadeiras ou não. Problemas potenciais
incluir:
Todas essas suposições e problemas potenciais podem ser verificados produzindo alguns
gráficos de diagnóstico visualizando os erros residuais.
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.
61
Crie os gráficos de diagnóstico usando ggfortify:
biblioteca(ggfortify)
autoplot(model)
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.
.fittedvalores ajustados
.residerros residuais
.chapéuvalores hat, usados para detectar pontos de alta alavancagem (ou valores extremos em
previsores x variáveis
.cooksdA distância de Cook, usada para detectar valores influentes, que pode ser uma
outlier ou um ponto de alta alavancagem
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)
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:
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.
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.
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
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.
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:
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!
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).
69
I.11._ Noções Essenciais de Multicolinearidade e VIF em R
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.
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)).
Contents:
Preparando os dados
Detectando multicolinearidade
Referências
70
library(tidyverse)
biblioteca(caret)
Preparando os dados
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
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
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.
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.
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)
73
I.13._ Validação do Modelo de Regressão
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.
74
I.14._ Métricas de Precisão do Modelo de Regressão: R-quadrado, AIC, BIC, Cp
e mais
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.
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.
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.
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.
biblioteca(tidyverse)
biblioteca(modelr)
biblioteca(broom)
# Carregar os dados
dados("suiços")
# Inspecionar os dados
amostra_n(suíço, 3)
Construindo modelos de regressão
76
Existem muitas funções e pacotes em R para avaliar a qualidade do modelo, incluindo:
summary(model1)
AIC(modelo1)
BIC(modelo1)
biblioteca(modelr)
[Link](
R2 = rsquare(model1, dados = suíços)
RMSE = rmse(model1, data = swiss)
MAE = mae(model1, data = swiss)
)
biblioteca(caret)
predictions <- model1 %>% predict(swiss)
[Link](
R2 = R2(predições, swiss$Fertilidade)
RMSE = RMSE(predictions, swiss$Fertility),
MAE = MAE(predições, swiss$Fertilidade)
)
biblioteca(broom)
olhar(modelo1)
Aqui, usaremos a funçãoolhar()para simplesmente comparar a qualidade geral dos nossos dois
models:
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
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.
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
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 ideia básica por trás das técnicas de validação cruzada consiste em dividir os dados em dois
sets:
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.
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.
biblioteca(tidyverse)
biblioteca(caret)
80
# Carregar os dados
dados("suíço")
# Inspecione os dados
amostra_n(suíço, 3)
Métricas de desempenho do 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
R2, RMSE e MAE são usados para medir o desempenho do modelo de regressão durante
validação cruzada.
81
As seções a seguir descrevem as diferentes técnicas de validação cruzada.
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 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.
When comparing two models, the one that produces the lowest test sample RMSE is the
modelo preferido.
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.
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
4. Calcule o erro de previsão geral tirando a média de todos esses erros de teste.
estimativas registradas na etapa 2.
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.
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.
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).
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.
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.
85
I.16._ Fundamentos do Reamostragem Bootstrap em R
biblioteca(tidyverse)
biblioteca(caret)
# Carregar os dados
dados("suíço")
# Inspecione os dados
sample_n(suíço, 3)
Procedimento Bootstrap
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.
O exemplo a seguir usa um bootstrap com 100 reamostragens para testar uma regressão linear
model:
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
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).
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.
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
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,
Por exemplo, pode-se ver que o erro padrão (EP) do coeficiente de regressão
associado comAgriculturaé 0,06.
Por exemplo, o intervalo de confiança de 95% para um determinado coeficiente b é definido comob +/-
2*SE(b), onde:
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:
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.
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:
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.
biblioteca(tidyverse)
biblioteca(caret)
biblioteca(leaps)
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.
91
## Educação Exame Agricultura Católica
[Link]
## 1 ( 1 ) " " " " "*" " " " "
## 2 ( 1 ) " " " " "*" "*" " "
## 3 ( 1 ) " " " " "*" "*" "*"
## 4 ( 1 ) "*" " " "*" "*" "*"
## 5 ( 1 ) "*" "*" "*" "*" "*"
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?
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.
O melhor modelo, de acordo com cada uma dessas métricas, pode ser extraído da seguinte forma:
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)).
# 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:
2.obter_erro_cv(), para obter o erro de validação cruzada (CV) para um determinado modelo:
Finalmente, use as funções auxiliares definidas acima para calcular o erro de previsão do
diferentes melhores modelos retornados peloregsubsets()função:
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.
Observe que,
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])
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:
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.
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.
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:
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)
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.
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.
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 quantidade da penalidade pode ser ajustada usando uma constante chamada lambda (λ
é 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 λ
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.
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).
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
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
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], ]
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.
102
glmnet(x, y, alpha = 1, lambda = NULL)
lambaum valor numérico definindo a quantidade de encolhimento. Deve ser especificado por
analista.
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)).
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.
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).
104
A regressão de rede elastic pode ser facilmente computada usando ocaretfluxo de trabalho, que
invoca oglmnetpackage.
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.
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)
)
# 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)
)
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.
Pode-se ver que o modelo de rede elástica tem o menor RMSE mediano.
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.
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.
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.
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
biblioteca(tidyverse)
biblioteca(caret)
biblioteca(pls)
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.
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
Nossa análise mostra que escolher cinco componentes principais (ncomp = 5) fornece o
menor erro de previsão RMSE.
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
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.
112
PARTE II– CLASSIFICATION
MÉTODOS
113
II.1._ Essenciais dos Métodos de Classificação
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.
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
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.
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
y = b0 + b1*x,
exp()é o exponencial e
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
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).
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.
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.
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.
# 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)
A regressão logística simples é utilizada para prever a probabilidade de pertencimento a uma classe.
baseado em uma única variável preditora.
Previsões podem ser facilmente feitas usando a funçãoprever(). Use the option type =
resposta para obter diretamente as probabilidades
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"
)
The multiple logistic regression is used to predict the probability of class membership
baseado em várias variáveis preditoras, como segue:
Aqui, queremos incluir todas as variáveis preditoras disponíveis no conjunto de dados. Isso é
feito usando~.:
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:
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.
coef(model)
resumo(modelo)$coef
Interpretation
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
Fazendo previsões
O procedimento é o seguinte:
contrastes([Link]$diabetes)
## pos
## neg 0
## pos 1
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.
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.
média([Link] == [Link]$diabetes)
## [1] 0.756
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)).
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.
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)
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
biblioteca(tidyverse)
biblioteca(caret)
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.
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)).
124
Modelo de regressão logística completa
biblioteca(MASS)
[Link] <- [Link] %>% stepAIC(trace = FALSE)
coef([Link])
## (Intercept) glucose mass pedigree age
## -9.5612 0.0379 0.0523 0.9697 0.0529
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:
# 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
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
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.
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.
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
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.
127
[Link] <- PimaIndiansDiabetes2[[Link], ]
[Link] <- PimaIndiansDiabetes2[-[Link], ]
Funções R
famíliao tipo de resposta. Use "binomial" para uma variável de resultado binária
lambaum valor numérico definindo a quantidade de encolhimento. Deve ser especificado por
analista.
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])
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
[Link]$lambda.1se
0,0674
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
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
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.
130
Calcule o modelo final usandolambda.1se:
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).
# 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).
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.
131
II.5._ Suposições e Diagnósticos da Regressão Logística em R
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.
biblioteca(tidyverse)
biblioteca(broom)
theme_set(theme_classic())
Construindo um modelo de regressão logística
# 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
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.
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:
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.
Os dados para os 3 maiores valores, de acordo com a distância de Cook, podem ser exibidos
como segue:
135
Filtrar potenciais pontos de dados influentes comabs(.[Link]) > 3:
[Link] %>%
filtrar(abs(.[Link]) > 3)
Multicolinearidade
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.
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
biblioteca(tidyverse)
biblioteca(caret)
biblioteca(nnet)
Preparando os dados
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.
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.
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.
Análise discriminante de mistura (MDA): Cada classe é assumida como uma Gaussiana
mistura de subclasses.
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.
# 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], ]
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.
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.
plot(model)
142
Faça previsões:
predictions <- model %>% predict([Link])
{"names(predictions)":"nomes(previsões)"}
## [1] "class" "posterior" "x"
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:
Model accuracy:
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:
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:
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).
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.
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)
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)
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.
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
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.
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
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.
O seguinte código R calcula SVM para um conjunto de valores de grade deC e escolha automaticamente o
modelo final para previsões:
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.
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)).
152
II.10._ Avaliação da Precisão do Modelo de Classificação: Essenciais
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.
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.
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
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.
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.
Falsos negativos (c): Previmos que estavam negativos para diabetes, mas eles tinham diabetes.
(Também conhecido como erro Tipo II.)
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).
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:
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
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:
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.
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.
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:
O melhor limiar com a maior soma de sensibilidade + especificidade pode ser impresso como
siga. Pode haver mais de um limiar.
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:
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.
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])
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.
acurácia de classificação
matriz de confusão
e curva ROC
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.
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)).
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.
Algoritmo KNN
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.
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:
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.
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).
Nesta seção, descreveremos como prever uma variável contínua usando KNN.
[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], ]
167
O melhor k é aquele que minimiza o erro de previsão RMSE (raiz do erro quadrático médio)
erro).
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.
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).
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 resultado produzido consiste em um conjunto de regras usadas para prever a variável de resultado,
que pode ser ou:
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.
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):
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.
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)
Fazendo previsões
Os diferentes conjuntos de regras estabelecidos na árvore são usados para prever o resultado de um novo
dados de teste.
Á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.
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)
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.
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.
173
tuneLength = 10
)
# Traçar a precisão do modelo vs diferentes valores de
# cp (complexity parameter)
gráfico(modelo2)
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.
Á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)).
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
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], ]
Aqui, o melhorcpo valor é aquele que minimiza o erro de previsão RMSE (raiz média)
erro ao quadrado).
175
pelo modelo. O RMSE é calculado comoRMSE = média((observados - previstos)^2)
%>% raiz()Quanto menor o RMSE, melhor o modelo.
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.
# 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], ]
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
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
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.
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.
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
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.
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.
Importância da variável
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
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]:
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
Randomly split the data into training set (80% for building a predictive model) and test
defina (20% para avaliar o modelo).
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
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:
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.
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.
185
III.6._ Essenciais do Gradient Boosting em R Usando XGBOOST
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)).
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).
O número de árvores B
O parâmetro de encolhimento lambda
Boosting pode ser usado tanto para problemas de classificação quanto de regressão.
biblioteca(tidyverse)
library(caret)
biblioteca(xgboost)
186
Classificação
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.
187
Para mais explicações sobre os parâmetros de ajuste do boosting, digite?xgboostem R para ver
a documentação.
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
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
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.
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
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
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.
O PCA assume que as direções com as maiores variâncias são as mais "importantes" (ou seja,
o mais principal).
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.
Cálculo
193
prcomp() e princomp() [pacote Rstats embutido],
PCA() [pacote FactoMineR],
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.
[Link](c("FactoMineR", "factoextra"))
biblioteca("FactoMineR")
biblioteca("factoextra")
Formato de dados
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.
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.
195
Começamos subdefinindo indivíduos ativos e variáveis ativas para o principal
análise de componentes
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.
)x(oivsed)x(a−
m
idéix
Onde significa(x)
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
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.
biblioteca("FactoMineR")
[Link] <- PCA([Link], graph = FALSE)
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"
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.
197
obter_ind_pca([Link]), obter_var_pca([Link])Extraia os resultados para
indivíduos e variáveis, respectivamente.
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
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.
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
# 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
200
## [Link] 0.610 -0.4652 0.330 0.1446 0.403
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:
Qualidade da representação
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
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:
Variáveis que estão mais próximas do centro do gráfico são menos importantes para o primeiro
componentes.
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:
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.
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
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:
205
A contribuição total para PC1 e PC2 é obtida com o seguinte código R:
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
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:
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:
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).
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.
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]
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
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
Gráfico de indivíduos
Results
# 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
fviz_pca_ind([Link])
Assim como as variáveis, também é possível colorir os indivíduos pelos seus valores de cos2:
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:
Para mudar tanto o tamanho do ponto quanto a cor pelo cos2, tente o seguinte:
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:
Para visualizar a contribuição dos indivíduos para os dois primeiros componentes principais, digite
isso:
Quanto às variáveis, os indivíduos podem ser coloridos por qualquer variável contínua personalizada por
especificando o [Link].
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.
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
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"
)
212
paletas de brewers, por exemplo, "RdBu", "Blues", ...; Para visualizar todas, digite isso no R:
RColorBrewer::[Link]().
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
Aqui, apresentamos alguns desses argumentos adicionais para personalizar o gráfico PCA de
variáveis e indivíduos.
Dimensões
[Link] = c("point", "text") para mostrar tanto pontos quanto rótulos de texto
213
Por exemplo, digite isto:
[Link] = c("point", "text") para mostrar tanto rótulos de pontos quanto de texto
(padrão)
[Link] tamanho das flechas. Controla a espessura das flechas, por exemplo:
arrowsize = 0.5.
Elipses
Observe que, o [Link] pode ser usado para mudar o tipo de elipses.
Os valores possíveis são:
214
normaassume uma distribuição normal multivariada.
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.
Parâmetros gráficos
Para alterar facilmente o gráfico de qualquer ggplot, você pode usar a funçãoggpar()[ggpubr
pacote
215
Main titles, axis labels and legend titles
Legend position. Possible values: “top”, “bottom”, “left”, “right”, “none”.
Paleta de cores.
Biplot
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.
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.
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.
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"),
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",
219
Elementos suplementares
Definição e tipos
Especificação em PCA
Para especificar indivíduos e variáveis suplementares, a funçãoPCA() pode ser usada como
seguir
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
220
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
fviz_pca_var([Link])
Observe que, por padrão, variáveis quantitativas suplementares são mostradas na cor azul e
linhas tracejadas.
221
fviz_pca_var([Link], invisível = "var")
# Hide supplementary variables
fviz_pca_var([Link], invisível = "[Link]")
Indivíduos
[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.
222
Variáveis qualitativas
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.
[Link]$quali
Lembre-se de que, para remover os pontos médios dos grupos, especifique o argumento [Link] =
FALSO.
Filtrando resultados
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
Exportando resultados
Ofactoextrao pacote produz gráficos baseados em ggplot2. Para salvar quaisquer ggplots, o
o código padrão R é o seguinte:
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:
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:
Exporte gráficos individuais para um arquivo pdf (um gráfico por página):
library(ggpubr)
ggexport(plotlist = list([Link], [Link], [Link]),
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.
225
[Link]([Link], "[Link]", sep = ";")
Resumo
Leia mais:[Link]
Leia mais:[Link]
biblioteca("ade4")
[Link] <- [Link](iris[, -5], scannf = FALSE, nf = 5)
Leia mais:[Link]
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:
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.
Install:
Load:
biblioteca(ade4)
biblioteca(factoextra)
library(magrittr)
Conjuntos de dados
Data contents:
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
fviz_eig([Link])
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
)
229
Visualize usando ade4
Gráfico de Scree
gráfico de scree([Link], main = "Gráfico de Scree - Valores próprios")
230
Gráfico de indivíduos
[Link]([Link]$li,
xax = 1, # Dimension 1
yax = 2) # Dimension 2
231
nulo
Acesso aos resultados da PCA
biblioteca(factoextra)
Valores próprios
[Link] <- get_eigenvalue([Link])
[Link]
Indivíduos suplementares
232
2. Prever as coordenadas de novos dados de indivíduos.
Variáveis suplementares
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).
233
[Link] = "Groups",
repel = TRUE
)
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)
235
236