Regressão de componentes principais em r (passo a passo)


Dado um conjunto de p variáveis preditoras e uma variável de resposta, a regressão linear múltipla usa um método conhecido como mínimos quadrados para minimizar a soma residual dos quadrados (RSS):

RSS = Σ(y i – ŷ i ) 2

Ouro:

  • Σ : Um símbolo grego que significa soma
  • y i : o valor real da resposta para a i-ésima observação
  • ŷ i : O valor da resposta prevista com base no modelo de regressão linear múltipla

No entanto, quando as variáveis preditoras são altamente correlacionadas, a multicolinearidade pode se tornar um problema. Isso pode tornar as estimativas dos coeficientes do modelo pouco confiáveis e exibir alta variância.

Uma maneira de evitar esse problema é usar a regressão de componentes principais , que encontra M combinações lineares (chamadas de “componentes principais”) dos p preditores originais e, em seguida, usa mínimos quadrados para ajustar um modelo de regressão linear usando os componentes principais como preditores.

Este tutorial fornece um exemplo passo a passo de como realizar a regressão de componentes principais em R.

Passo 1: Carregue os pacotes necessários

A maneira mais fácil de realizar a regressão de componentes principais em R é usar funções no pacote pls .

 #install pls package (if not already installed)
install.packages(" pls ")

load pls package
library(pls)

Passo 2: Ajustar o modelo PCR

Para este exemplo, usaremos o conjunto de dados R integrado chamado mtcars , que contém dados sobre diferentes tipos de carros:

 #view first six rows of mtcars dataset
head(mtcars)

                   mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3,460 20.22 1 0 3 1

Para este exemplo, ajustaremos um modelo de regressão de componentes principais (PCR) usando hp como variável de resposta e as seguintes variáveis como variáveis preditoras:

  • mpg
  • mostrar
  • merda
  • peso
  • qsec

O código a seguir mostra como ajustar o modelo PCR a esses dados. Observe os seguintes argumentos:

  • scale=TRUE : diz a R que cada uma das variáveis preditoras deve ser dimensionada para ter uma média de 0 e um desvio padrão de 1. Isso garante que nenhuma variável preditora tenha muita influência no modelo se for medida em unidades diferentes. .
  • validação=”CV” : diz ao R para usar a validação cruzada k-fold para avaliar o desempenho do modelo. Observe que isso usa k=10 dobras por padrão. Observe também que você pode especificar “LOOCV” para realizar a validação cruzada Leave-One-Out .
 #make this example reproducible
set.seed(1)

#fit PCR model
model <- pcr(hp~mpg+disp+drat+wt+qsec, data=mtcars, scale= TRUE , validation=" CV ")

Etapa 3: Escolha o número de componentes principais

Depois de ajustar o modelo, precisamos determinar quantos componentes principais valem a pena manter.

Para fazer isso, basta observar a raiz do erro quadrático médio do teste (teste RMSE) calculado pela validação k-cruzada:

 #view summary of model fitting
summary(model)

Data: 
	Y dimension: 32 1
Fit method: svdpc
Number of components considered: 5

VALIDATION: RMSEP
Cross-validated using 10 random segments.
       (Intercept) 1 comp 2 comps 3 comps 4 comps 5 comps
CV 69.66 44.56 35.64 35.83 36.23 36.67
adjCV 69.66 44.44 35.27 35.43 35.80 36.20

TRAINING: % variance explained
    1 comp 2 comps 3 comps 4 comps 5 comps
X 69.83 89.35 95.88 98.96 100.00
hp 62.38 81.31 81.96 81.98 82.03

Existem duas tabelas interessantes no resultado:

1. VALIDAÇÃO: RMSEP

Esta tabela nos mostra o teste RMSE calculado pela validação cruzada k-fold. Podemos ver o seguinte:

  • Se usarmos apenas o termo original no modelo, o RMSE do teste será 69,66 .
  • Se somarmos o primeiro componente principal, o teste RMSE cai para 44,56.
  • Se adicionarmos o segundo componente principal, o teste RMSE cai para 35,64.

Podemos ver que a adição de componentes principais adicionais resulta, na verdade, em um aumento no RMSE do teste. Assim, parece que seria ótimo usar apenas dois componentes principais no modelo final.

2. TREINAMENTO: % de variância explicada

Esta tabela nos informa a porcentagem de variância na variável resposta explicada pelos componentes principais. Podemos ver o seguinte:

  • Utilizando apenas a primeira componente principal, podemos explicar 69,83% da variação da variável resposta.
  • Adicionando o segundo componente principal, podemos explicar 89,35% da variação da variável resposta.

Observe que ainda seremos capazes de explicar mais variância usando mais componentes principais, mas podemos ver que adicionar mais de dois componentes principais não aumenta muito a porcentagem de variância explicada.

Também podemos visualizar o teste RMSE (junto com o teste MSE e R-quadrado) como uma função do número de componentes principais usando a função validaçãoplot() .

 #visualize cross-validation plots
validationplot(model)
validationplot(model, val.type="MSEP")
validationplot(model, val.type="R2") 

Regressão de componentes principais em R

Gráfico de validação cruzada de regressão de componentes principais em R

Regressão de componente principal R-quadrado em R

Em cada gráfico, podemos ver que o ajuste do modelo melhora ao adicionar dois componentes principais, mas tende a piorar quando adicionamos mais componentes principais.

Assim, o modelo ótimo inclui apenas os dois primeiros componentes principais.

Etapa 4: use o modelo final para fazer previsões

Podemos usar o modelo final de PCR de dois componentes principais para fazer previsões sobre novas observações.

O código a seguir mostra como dividir o conjunto de dados original em um conjunto de treinamento e teste e usar o modelo PCR com dois componentes principais para fazer previsões no conjunto de teste.

 #define training and testing sets
train <- mtcars[1:25, c("hp", "mpg", "disp", "drat", "wt", "qsec")]
y_test <- mtcars[26: nrow (mtcars), c("hp")]
test <- mtcars[26: nrow (mtcars), c("mpg", "disp", "drat", "wt", "qsec")]
    
#use model to make predictions on a test set
model <- pcr(hp~mpg+disp+drat+wt+qsec, data=train, scale= TRUE , validation=" CV ")
pcr_pred <- predict(model, test, ncomp= 2 )

#calculate RMSE
sqrt ( mean ((pcr_pred - y_test)^2))

[1] 56.86549

Vemos que o RMSE do teste é 56,86549 . Este é o desvio médio entre o valor de HP previsto e o valor de HP observado para as observações do conjunto de teste.

O uso completo do código R neste exemplo pode ser encontrado aqui .

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *