Pular para o conteúdo principal
Documentos
Compartir
LinkedIn
Facebook
Twitter
Copy
Gerenciamento de dados em REntrada de dados em RGráficos em RDocumentação RInterface REstatísticas em R

Regressão múltipla (linear) no R

O R oferece suporte abrangente para regressão linear múltipla. Os tópicos abaixo são fornecidos em ordem crescente de complexidade.

Ajuste do modelo

# Multiple Linear Regression Example

fit <- lm(y ~ x1 + x2 + x3, data=mydata)
summary(fit) # show results
# Other useful functions
coefficients(fit) # model coefficients
confint(fit, level=0.95) # CIs for model parameters

fitted(fit) # predicted values
residuals(fit) # residuals
anova(fit) # anova table
vcov(fit) # covariance matrix for model parameters
influence(fit) # regression diagnostics

Gráficos de diagnóstico

Os gráficos de diagnóstico fornecem verificações de heterocedasticidade, normalidade e observações influentes.

# diagnostic plots
layout(matrix(c(1,2,3,4),2,2)) # optional 4 graphs/page
plot(fit)

gráficos de diagnóstico de regressão

Para uma avaliação mais abrangente do ajuste do modelo, consulte os diagnósticos de regressão ou os exercícios em neste curso interativo</a > sobre Aprendizado Supervisionado em R: Regressão.

Comparação de modelos

Você pode comparar modelos aninhados com a função anova( ). O código a seguir fornece um teste simultâneo de que x3 e x4 são adicionados à previsão linear acima e além de x1 e x2.

# compare models
fit1 <- lm(y ~ x1 + x2 + x3 + x4, data=mydata)
fit2 <- lm(y ~ x1 + x2)
anova(fit1, fit2)

Validação cruzada

Você pode fazer a validação cruzada K-Fold</a >usando a função cv.lm( ) no pacote DAAG.

# K-fold cross-validation
library(DAAG)
cv.lm(df=mydata, fit, m=3) # 3 fold cross-validation

Some o MSE para cada dobra, divida pelo número de observações e tire a raiz quadrada para obter o erro padrão de estimativa com validação cruzada.

Você pode avaliar a redução de R2 por meio da validação cruzada K-fold. Usando a função crossval() do pacote bootstrap</a ></strong >, faça o seguinte:

# Assessing R2 shrinkage using 10-Fold Cross-Validation

fit <- lm(y~x1+x2+x3,data=mydata)

library(bootstrap)
# define functions
theta.fit <- function(x,y){lsfit(x,y)}
theta.predict <- function(fit,x){cbind(1,x)%*%fit$coef}

# matrix of predictors
X
<- as.matrix(mydata[c("x1","x2","x3")])
# vector of predicted values
y <- as.matrix(mydata[c("y")])

results <- crossval(X,y,theta.fit,theta.predict,ngroup=10)
cor(y, fit$fitted.values)**2 # raw R2
cor(y,results$cv.fit)**2 # cross-validated R2

Seleção de variáveis

A seleção de um subconjunto de variáveis preditoras de um conjunto maior (por exemplo, seleção por etapas) é um tópico controverso. Você pode executar a seleção por etapas (para frente, para trás, ambas) usando a função stepAIC( ) do pacote MASS. stepAIC( ) executa a seleção do modelo por etapas pelo AIC exato.

# Stepwise Regression
library(MASS)
fit <- lm(y~x1+x2+x3,data=mydata)
step <- stepAIC(fit, direction="both")
step$anova # display results

Como alternativa, você pode executar a regressão de todos os subconjuntos usando a função leaps( ) do pacote leaps. No código a seguir, nbest indica o número de subconjuntos de cada tamanho a ser relatado. Aqui, os dez melhores modelos serão relatados para cada tamanho de subconjunto (1 preditor, 2 preditores, etc.).

# All Subsets Regression
library(leaps)
attach(mydata)
leaps<-regsubsets(y~x1+x2+x3+x4,data=mydata,nbest=10)
# view results
summary(leaps)
# plot a table of models showing variables in each model.
#
models are ordered by the selection statistic.
plot(leaps,scale="r2")
# plot statistic by subset size
library(car)
subsets(leaps, statistic="rsq")

regressão de todos os subconjuntos 1 todos os subconjuntos regressão 2

Outras opções para plot( ) são bic, Cp e adjr2. Outras opções para plotagem comsubset( ) são bic, cp, adjr2 e rss.

Importância relativa

O pacote relaimpo</a > fornece medidas de importância relativa para cada um dos preditores do modelo. Consulte help(calc.relimp) para obter detalhes sobre as quatro medidas de importância relativa fornecidas.

# Calculate Relative Importance for Each Predictor
library(relaimpo)
calc.relimp(fit,type=c("lmg","last","first","pratt"),
   rela=TRUE)

# Bootstrap Measures of Relative Importance (1000 samples)
boot <- boot.relimp(fit, b = 1000, type = c("lmg",
  "last", "first", "pratt"), rank = TRUE,
  diff = TRUE, rela = TRUE)
booteval.relimp(boot) # print result
plot(booteval.relimp(boot,sort=TRUE)) # plot result

importância relativa bootstrapped

Aprimoramentos gráficos

O pacote car oferece uma ampla variedade de gráficos para regressão, incluindo gráficos de variáveis adicionadas, diagnóstico aprimorado e gráficos de dispersão.

Indo além

Regressão não linear

O pacote nls fornece funções para regressão não linear. Consulte o site de John Fox Nonlinear Regression and Nonlinear Least Squares</a > para obter uma visão geral. Huet e colegas Statistical Tools for Nonlinear Regression (Ferramentas estatísticas para regressão não linear): A Practical Guide with S-PLUS and R Examples</a > é um valioso livro de referência.

Regressão robusta

Há muitas funções no R para ajudar na regressão robusta. Por exemplo, você pode realizar uma regressão robusta com a função rlm( ) do pacote MASS. De John Fox (quem mais?) Robust Regression</a > fornece uma boa visão geral inicial. O site da UCLA Statistical Computing tem Exemplos de regressão robusta</a > .

O pacote robust fornece uma biblioteca abrangente de métodos robustos, incluindo regressão. O pacote robustbase</a > também fornece estatísticas robustas básicas, incluindo métodos de seleção de modelos. E David Olive forneceu uma análise on-line detalhada de Applied Robust Statistics</a > com um exemplo de código R .

Para praticar

Este curso de aprendizado de máquina em R</a > inclui exercícios de regressão múltipla e validação cruzada .