#---------------------------------------------------------------------------------- # PRATICA 2 - ANALISE AMOSTRA DE CRIANCAS #---------------------------------------------------------------------------------- library(epiDisplay) library("car") # Altere o diret?rio de trabalho utilizando a funcao setwd("") setwd("C:/A DATA/PSP5103/2021/Dados") # Carregando o banco de dados #---------------------------------------------------------------------------------- # Importe o banco de dados "Amostra de Criancas" e de o nome de "dados" # Utilize o Menu # File -> Import Dataset -> from Excel library(readxl) dados <- read_excel("C:/A DATA/PSP5103/2021/Dados/Amostra de criancas.xlsx") View(dados) names(dados) # mostra o nome das variaveis no banco de dados dim(dados) # mostra as dimensoes (No. de linhas e colunas) do bd head(dados) dados #---------------------------------------------------------------------------------- # MODELO DE REGRESSAO LINEAR MULTIPLA #---------------------------------------------------------------------------------- # Matriz de correlacao #--------------------- library(RcmdrMisc) rcorr.adjust(dados[,c("peso", "idade", "altura")], type="pearson", use="complete") # Pearson correlations: # peso idade altura # peso 1.0000 0.7698 0.8143 # idade 0.7698 1.0000 0.6138 # altura 0.8143 0.6138 1.0000 partial.cor(dados[,c("peso", "idade", "altura")], tests=TRUE, use="complete") # Partial correlations: # peso idade altura # peso 0.00000 0.58916 0.67818 # idade 0.58916 0.00000 -0.03506 # altura 0.67818 -0.03506 0.00000 # Matriz de dispersao #--------------------- scatterplotMatrix(~peso + idade + altura, regLine=TRUE, smooth=FALSE, diagonal=list(method="none"), data=dados) # Modelos simples #--------------------- mod.1 <- lm(peso~idade, data=dados) summary(mod.1) anova(mod.1) mod.2 <- lm(peso~altura, data=dados) summary(mod.2) anova(mod.2) # Nos modelos simples: # Estimate Std. Error t value Pr(>|t|) # mod.1 idade 3.6429 0.9551 3.814 0.00341 ** # mod.2 altura 1.0722 0.2417 4.436 0.00126 ** # Modelo múltiplo #--------------------- # Vamos iniciar a modelagem com a variável mais importante # (mais significativa) dos modelos simples modm.1 <- lm(peso~altura, data=dados) summary(modm.1) anova(modm.1) modm.2 <- lm(peso~altura+idade, data=dados) summary(modm.2) anova(modm.2) anova(modm.1, modm.2) # Estimate Std. Error t value Pr(>|t|) # modm.1 altura 1.0722 0.2417 4.436 0.00126 ** # modm.2 altura 0.7220 0.2608 2.768 0.0218 * # idade 2.0501 0.9372 2.187 0.0565 . # Tabela de ANOVA #-------------------- # Somas de quadrados para o modelo multiplo #------------------------------------------ SQT <- sum( (dados$peso - mean(dados$peso))^2 ) SQM <- sum( (fitted(modm.2) - mean(dados$peso))^2 ) SQR <- sum( (dados$peso - fitted(modm.2))^ 2) SQM; SQR; SQT # Graus de liberdade #-------------------- gl.t <- 11 gl.m <- 2 gl.r <- 9 gl.m; gl.r; gl.t # Quadrados medios #-------------------- QMM <- SQM / gl.m QMR <- SQR / gl.r QMM; QMR anova(modm.2) # Em um modelo multiplo, exibe F-parciais # Note que: 588.92 + 103.90 = 692.8226 # Outra forma de obter a ANOVA: anova(modm.2) SQM <- anova(modm.2)[1,2] + anova(modm.2)[2,2] SQR <- anova(modm.2)[3,2] SQT <- anova(modm.2)[1,2] + anova(modm.2)[2,2] + anova(modm.2)[3,2] SQM; SQR; SQT SQM/SQT # Graus de liberdade #-------------------- gl.m <- anova(modm.2)[1,1] + anova(modm.2)[2,1] gl.r <- anova(modm.2)[3,1] gl.t <- anova(modm.2)[1,1] + anova(modm.2)[2,1] + anova(modm.2)[3,1] gl.m; gl.r; gl.t # Quadrados medios #-------------------- QMM <- SQM / gl.m QMR <- SQR / gl.r QMM; QMR # Teste F #-------------------- # Ho: Beta1 = Beta2 = 0 # H1: pelo menos um Beta <> 0 F2.9 <- QMM/QMR F2.9 pf(F2.9, df1=gl.m, df2=gl.r, lower.tail=FALSE) summary(modm.2) # Testes T #-------------------- # Ho: Beta1 = 0 # H1: Beta1 <> 0 # Ho: Beta2 = 0 # H1: Beta2 <> 0 # etc. # No modelo múltiplo, os testes F e T não sao equivalentes # Coeficiente de determinacao (R2) #------------------------------------------- R2 <- SQM / SQT # coeficiente de determinacao R2 # Teste F-parcial #------------------------------------------- modm.2 <- lm(peso~altura+idade, data=dados) anova(modm.2) # Outras formas de obter o Teste F-parcial #------------------------------------------- anova(modm.1, modm.2, test = "F") drop1(modm.2, test = "F") # Avaliando a presenca de interacao #----------------------------------- modm.3 <- lm(peso ~ altura + idade + altura*idade, data=dados) summary(modm.3) anova(modm.3) # modm.2 altura 0.7220 0.2608 2.768 0.0218 * # idade 2.0501 0.9372 2.187 0.0565 . # modm.3 altura 0.83032 1.19112 0.697 0.505 # idade 2.63866 6.37515 0.414 0.690 # altura:idade -0.01146 0.12259 -0.093 0.928 # Modelo final: modm.2 # Analise de residuos do modelo final #------------------------------------- rstandard(modm.2) # par(mfrow=c(2,3)) boxplot(rstandard(modm.2), ylab="Residuo Padronizado") hist(rstandard(modm.2), scale="density", xlab="Residuo Padronizado", ylab="Densaltura de frequ?ncia", main="") qqPlot(rstandard(modm.2), dist="norm", xlab="Percentis da N(0,1)", ylab="Resíduo Padronizado") plot(rstandard(modm.2) ~ dados$altura, ylab="Resíduo Padronizado", xlab="Altura (pés)") abline(h=0, col="blue") abline(h=-1.96, col="blue", lty=2) abline(h= 1.96, col="blue", lty=2) plot(rstandard(modm.2) ~ dados$idade, ylab="Resíduo Padronizado", xlab="Idade (anos)") abline(h=0, col="blue") abline(h=-1.96, col="blue", lty=2) abline(h= 1.96, col="blue", lty=2) plot(rstandard(modm.2) ~ fitted(modm.2), ylab="Resíduo Padronizado", xlab="Valores ajustados") abline(h=0, col="blue") abline(h=-1.96, col="blue", lty=2) abline(h= 1.96, col="blue", lty=2)