#-------------------------------------------------------------------------------------------------------- # EXERCÍCIO 1 - ANÁLISE DE REGRESSÃO LINEAR # BANCO PESO #-------------------------------------------------------------------------------------------------------- # Altere o diretório de trabalho: setwd("") # Importe o banco de dados "PESO" e dê o nome de "dados" # Utilize o Menu # File -> Import Dataset -> From Excel... dados names(dados) # nomes das variáveis dim(dados) # dimensão da matriz/tabela/banco head(dados) # metade da matriz/tabela/banco #-------------------------------------------------------------------------------------------------------- # ANÁLISE DESCRITIVA #-------------------------------------------------------------------------------------------------------- # Produzindo um resumo rápido do conteúdo do banco de dados... summary(dados) # valor mínimo, primeiro quartil, mediana, média, terceiro quartil e valor máximo das variáveis # ou de uma variável... summary(dados$PESO) # valor mínimo, primeiro quartil, mediana, média, terceiro quartil e valor máximo de uma variável (peso) summary(dados$IDADE) # valor mínimo, primeiro quartil, mediana, média, terceiro quartil e valor máximo de uma variável (idade) summary(dados$ALTURA) # valor mínimo, primeiro quartil, mediana, média, terceiro quartil e valor máximo de uma variável (altura) # DESCREVENDO UMA VARIÁVEL DE CADA VEZ #-------------------------------------------------------------------------------------------------------- # Medidas descritivas #-------------------------------------------------------------------------------------------------------- mean(dados$PESO) # média peso var(dados$PESO) # variância peso sd(dados$PESO) # desvio padrão peso quantile(dados$PESO, probs = c(0, 0.25, 0.5, 0.75, 1)) #quartis peso #-------------------------------------------------------------------------------------------------------- # Intervalo de confiança install.packages("epiDisplay") library(epiDisplay) ci.numeric(dados$PESO, alpha=0.05) # intervalo de confiança peso ci.numeric(dados$IDADE, alpha=0.05) # intervalo de confiança idade ci.numeric(dados$ALTURA, alpha=0.05) # intervalo de confiança altura #-------------------------------------------------------------------------------------------------------- # Boxplot # Utilizando a sintaxe: boxplot(dados$PESO, ylab="Peso (libras)", col="orange") # boxplot peso boxplot(dados$IDADE, ylab="Idade (anos)", col="orange") # boxplot idade boxplot(dados$ALTURA, ylab="Altura (pés)", col="orange") # boxplot altura # Veja as cores disponíveis no R: colors() #-------------------------------------------------------------------------------------------------------- # Histograma # Utilizando a sintaxe: hist(dados$PESO, scale="density", col="lightblue", xlab="Peso (libras)", ylab="Densidade de frequência") # histograma peso hist(dados$IDADE, scale="density", col="lightblue", xlab="Idade (anos)", ylab="Densidade de frequência") # histograma idade hist(dados$ALTURA, scale="density", col="lightblue", xlab="Altura (pés)", ylab="Densidade de frequência") # histograma altura #-------------------------------------------------------------------------------------------------------- # DESCREVENDO A RELAÇÃO/ASSOCIAÇÃO ENTRE PESO E IDADE #-------------------------------------------------------------------------------------------------------- # Coeficiente de correlação linear de Pearson #-------------------------------------------------------------------------------------------------------- # Utilizando a sintaxe: cor(dados$PESO, dados$IDADE) # valor do teste coeficiente correlação linear de pearson cor.test(dados$PESO, dados$IDADE, alternative="two.sided", method="pearson") # teste coeficiente correlação linear de Pearson #-------------------------------------------------------------------------------------------------------- # Diagrama de dispersão #-------------------------------------------------------------------------------------------------------- # Utilizando a sintaxe: plot(PESO~IDADE, xlab="Idade (anos)", ylab="Peso (libras)", col="blue", data=dados) # diagrama dispersão peso em função da idade #-------------------------------------------------------------------------------------------------------- # AJUSTE DO MODELO DE REGRESSÃO LINEAR SIMPLES #-------------------------------------------------------------------------------------------------------- # Checando as suposições do modelo #-------------------------------------------------------------------------------------------------------- hist(dados$PESO, scale="density", col="lightblue", xlab="Peso (libras)", ylab="Densidade de frequência") # Gráfico para avaliar normalidade install.packages("car") library(car) qqPlot(dados$PESO, dist="norm") # Gráfico para avaliar normalidade qqplot shapiro.test(dados$PESO) # Teste de normalidade Shapiro-Wilk ks.test(dados$PESO, "pnorm", mean = mean(dados$PESO), sd = sd(dados$PESO)) # Teste de normalidade de Kolmogorov-Smirnov # Ajustando o modelo #-------------------------------------------------------------------------------------------------------- RegModel <- lm(PESO~IDADE, data=dados) summary(RegModel) # Extraindo objetos do modelo #-------------------------------------------------------------------------------------------------------- objects(RegModel) coefficients(RegModel) # Coeficientes da reta de regressão ajustada coef(RegModel) # Coeficientes da reta de regressão ajustada anova(RegModel) # Tabela de Análise de Variância fitted(RegModel) # Valores ajustados residuals(RegModel) # Resíduos rstandard(RegModel) # Resíduos studentizados # Obtendo o coeficiente de determinação (R2) #-------------------------------------------------------------------------------------------------------- anova(RegModel) sqreg <- anova(RegModel)[1,2] sqr <- anova(RegModel)[2,2] sqt <- sqreg + sqr sqreg; sqr; sqt R2 <- sqreg / sqt R2 sqrt(R2) # Inserindo a reta ajustada no diagrama de dispersão #-------------------------------------------------------------------------------------------------------- plot(PESO~IDADE, xlab="Idade (anos)", ylab="Peso (libras)", col="blue", data=dados) abline(lm(PESO ~ IDADE, data = dados), col = "red", lwd = 2) # reta ajustada no diagrama de dispersão idade e peso # Intervalo de confiança para os parâmetros do modelo #-------------------------------------------------------------------------------------------------------- confint(RegModel) #-------------------------------------------------------------------------------------------------------- # ANÁLISE DE RESÍDUOS #-------------------------------------------------------------------------------------------------------- # Obtendo o resíduo padronizado #-------------------------------------------------------------------------------------------------------- mean(residuals(RegModel)) sd(residuals(RegModel)) respad <- (residuals(RegModel) - mean(residuals(RegModel))) / sd(residuals(RegModel)) respad # Diagrama de dispersão dos resíduos x variável explicativa plot(dados$IDADE, residuals(RegModel), xlab="Idade (anos)", ylab="Resíduo") abline(h=0) plot(dados$IDADE, respad, xlab="Idade (anos)", ylab="Resíduo Padronizado") abline(h=0) plot(dados$IDADE, rstandard(RegModel), xlab="Idade (anos)", ylab="Resíduo Studentizado") abline(h=0) # Diagrama de dispersão dos resíduos x valores ajustados plot(fitted(RegModel), residuals(RegModel), xlab="Valores ajustados", ylab="Resíduo") abline(h=0) plot(fitted(RegModel), respad, xlab="Valores ajustados", ylab="Resíduo Padronizado") abline(h=0) plot(fitted(RegModel), rstandard(RegModel), xlab="Valores ajustados", ylab="Resíduo Studentizado") abline(h=0) # Box-plot, histograma e qq-plot dos resíduos boxplot(rstandard(RegModel), ylab="Resíduo Studentizado") hist(rstandard(RegModel),scale="density", xlab="Resíduo Studentizado", ylab="Densidade de frequência", main="") qqPlot(rstandard(RegModel), dist="norm", xlab="Percentis da N(0,1)", ylab="Resíduo Studentizado") # Default do R #-------------------------------------------------------------------------------------------------------- par(mfrow=c(2,2)) plot(RegModel) # DESCREVENDO A RELAÇÃO/ASSOCIAÇÃO ENTRE PESO E ALTURA #-------------------------------------------------------------------------------------------------------- # Coeficicente de correlação linear de Pearson #-------------------------------------------------------------------------------------------------------- cor(dados$PESO, dados$ALTURA) # valor do teste coeficiente correlação linear de pearson cor.test(dados$PESO, dados$ALTURA, alternative="two.sided", method="pearson") # teste coeficiente correlação linear de pearson # Diagrama de dispersão #-------------------------------------------------------------------------------------------------------- # Utilizando a sintaxe: plot(PESO~ALTURA, xlab="Altura (pés)", ylab="Peso (libras)", col="blue", data=dados) # diagrama dispersão peso em função da altura # Ajustando o modelo #-------------------------------------------------------------------------------------------------------- RegModel <- lm(PESO~ALTURA, data=dados) summary(RegModel) # Extraindo objetos do modelo #------------------------------------------------------------------------------------------------------- objects(RegModel) coefficients(RegModel) # Coeficientes da reta de regressão ajustada coef(RegModel) # Coeficientes da reta de regressão ajustada anova(RegModel) # Tabela de Análise de Variância fitted(RegModel) # Valores ajustados residuals(RegModel) # Resíduos rstandard(RegModel) # Resíduos studentizados # Obtendo o coeficiente de determinação (R2) #-------------------------------------------------------------------------------------------------------- anova(RegModel) sqreg <- anova(RegModel)[1,2] sqr <- anova(RegModel)[2,2] sqt <- sqreg + sqr sqreg; sqr; sqt R2 <- sqreg / sqt R2 sqrt(R2) # Inserindo a reta ajustada no diagrama de dispersão #-------------------------------------------------------------------------------------------------------- plot(PESO~ALTURA, xlab="Altura (pés)", ylab="Peso (libras)", col="blue", data=dados) abline(lm(PESO ~ ALTURA, data = dados), col = "red", lwd = 2) #reta ajustada no diagrama de dispersão altura e peso # Intervalo de confiança para os parâmetros do modelo #-------------------------------------------------------------------------------------------------------- confint(RegModel) #-------------------------------------------------------------------------------------------------------- # ANÁLISE DE RESÍDUOS #-------------------------------------------------------------------------------------------------------- # Obtendo o resíduo padronizado #-------------------------------------------------------------------------------------------------------- mean(residuals(RegModel)) sd(residuals(RegModel)) respad <- residuals(RegModel) - mean(residuals(RegModel1)) / sd(residuals(RegModel)) respad # Diagrama de dispersão dos resíduos x variável explicativa plot(dados$ALTURA, residuals(RegModel), xlab="Altura (pés)", ylab="Resíduo") abline(h=0) plot(dados$ ALTURA, respad, xlab="Altura (pés)", ylab="Resíduo Padronizado") abline(h=0) plot(dados$ ALTURA, rstandard(RegModel), xlab="Altura (pés)", ylab="Resíduo Studentizado") abline(h=0) # Diagrama de dispersão dos resíduos x valores ajustados plot(fitted(RegModel), residuals(RegModel), xlab="Valores ajustados", ylab="Resíduo") abline(h=0) plot(fitted(RegModel), respad, xlab="Valores ajustados", ylab="Resíduo Padronizado") abline(h=0) plot(fitted(RegModel), rstandard(RegModel), xlab="Valores ajustados", ylab="Resíduo Studentizado") abline(h=0) # Box-plot, histograma e qq-plot dos resíduos boxplot(rstandard(RegModel), ylab="Resíduo Studentizado") hist(rstandard(RegModel),scale="density", xlab="Resíduo Studentizado", ylab="Densidade de frequência", main="") qqPlot(rstandard(RegModel), dist="norm", xlab="Percentis da N(0,1)", ylab="Resíduo Studentizado") # Default do R #-------------------------------------------------------------------------------------------------------- par(mfrow=c(2,2)) plot(RegModel) #-------------------------------------------------------------------------------------------------------- # MODELO DE REGRESSÃO LINEAR MÚLTIPLA #-------------------------------------------------------------------------------------------------------- # Matriz de correlação #-------------------------------------------------------------------------------------------------------- install.packages("polycor") library(polycor) hetcor(dplyr::select(data.frame(dados), PESO, IDADE, ALTURA)) # Matriz de correlação #-------------------------------------------------------------------------------------------------------- scatterplotMatrix(~PESO + IDADE + ALTURA, regLine=TRUE, smooth=FALSE, diagonal=list(method="none"), data=dados) # Ajustando o modelo #-------------------------------------------------------------------------------------------------------- RegModel1 <- lm(PESO ~ IDADE + ALTURA, data=dados) summary(RegModel1) anova(RegModel1) # Somas de quadrados #-------------------------------------------------------------------------------------------------------- SQT <- anova(RegModel1)[1,2] + anova(RegModel1)[2,2] + anova(RegModel1)[3,2] SQM <- anova(RegModel1)[1,2] + anova(RegModel1)[2,2] SQR <- anova(RegModel1)[3,2] SQT; SQM; SQR R2 <- SQM/SQT R2 # Quadrados médios #-------------------------------------------------------------------------------------------------------- QMT <- anova(RegModel1)[1,2] + anova(RegModel1)[2,2] + anova(RegModel1)[3,2] QMT QMM <- anova(RegModel1)[1,2] + anova(RegModel1)[2,2] / 1 QMM QMR <- anova(RegModel1)[3,2] / 9 QMR #-------------------------------------------------------------------------------------------------------- # ANÁLISE DE RESÍDUOS #-------------------------------------------------------------------------------------------------------- # Obtendo o resíduo padronizado #-------------------------------------------------------------------------------------------------------- mean(residuals(RegModel1)) sd(residuals(RegModel1)) respad <- residuals(RegModel1) - mean(residuals(RegModel1)) / sd(residuals(RegModel1)) respad # Diagrama de dispersão dos resíduos x valores ajustados plot(fitted(RegModel1), respad, xlab="Valores ajustados", ylab="Resíduo Padronizado") abline(h=0) # Box-plot, histograma e qq-plot dos resíduos boxplot(respad, ylab="Resíduo Padronizado") hist(respad,scale="density", xlab="Resíduo Padronizado", ylab="Densidade de frequência", main="") qqPlot(respad, dist="norm", xlab="Percentis da N(0,1)", ylab="Resíduo Padronizado") # Default do R #-------------------------------------------------------------------------------------------------------- par(mfrow=c(2,2)) plot(RegModel1)