Objetivo: Realizar teste de Regressão linear para verificar a associação de um conjunto de dados em que as variáveis explicativas e resposta são quantitativas.
Este material está disponível em: http://rpubs.com/leonardoreffatti.
#Carregar o conjunto de Dados.
setwd("C:/R/Curso do R/MODULO_4.3")
dados<-read.table("pratica1.txt", header = TRUE)
attach(dados)
summary(dados)
## UA Ambiente Área Riqueza
## Min. : 1.00 primário :22 Min. : 40.0 Min. :14.00
## 1st Qu.:13.25 secundário:28 1st Qu.: 79.5 1st Qu.:23.00
## Median :25.50 Median :102.5 Median :29.50
## Mean :25.50 Mean :102.5 Mean :29.22
## 3rd Qu.:37.75 3rd Qu.:127.8 3rd Qu.:35.00
## Max. :50.00 Max. :167.0 Max. :48.00
## Abund_sp1
## Min. :0.00
## 1st Qu.:1.00
## Median :2.00
## Mean :2.16
## 3rd Qu.:3.00
## Max. :8.00
str(dados)
## 'data.frame': 50 obs. of 5 variables:
## $ UA : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Ambiente : Factor w/ 2 levels "primário","secundário": 1 1 1 1 1 1 1 1 1 1 ...
## $ Área : int 101 115 143 92 51 89 128 149 127 108 ...
## $ Riqueza : int 35 31 39 25 22 35 43 48 35 38 ...
## $ Abund_sp1: int 3 3 1 6 1 0 3 5 0 2 ...
#verificar se existre um padrão de relação entre área e riqueza
plot(Riqueza~Área, pch=16)
#lm(), linear model
resultado<-lm(Riqueza~Área)
#Verificar Pressupostos
#1 - Pressuposto de Normalidade dos resíduos
qqnorm(resultado$residuals)
qqline(resultado$residuals, lty=2, col="red")
#2 - Pressuposto da Homocedasticidade, esperando que os resíduos variem em torno da reta da regressão de maneira homogenea
#inspeção visual dos resíduos
plot(resultado$fitted.values, resultado$residuals)
#fitted.values, valores ajustados na reta
abline(h=0, lty=2)
#Verificar o Resultado
summary(resultado)
##
## Call:
## lm(formula = Riqueza ~ Área)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.5419 -3.6136 -0.0566 3.9721 12.3206
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 14.99044 2.63204 5.695 7.30e-07 ***
## Área 0.13885 0.02419 5.739 6.25e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.249 on 48 degrees of freedom
## Multiple R-squared: 0.407, Adjusted R-squared: 0.3946
## F-statistic: 32.94 on 1 and 48 DF, p-value: 6.253e-07
#Riqueza = 14.99 + 0.13885*Área
#Tanto o Intercepto quanto a Área tiveram efeitos significativos.
#Intercepto = A riqueza que eu vou encontrar quando a Área for 0 -> 14.99 espécies.
#Parâmetro B1 (Área) = Esse define a inclinação da reta, 0.13, no exemplo, a cada km2 a mais de área a riqueza em média aumenta em 0.138 espécies.
#Parâmetro R2 (coef. de determinação) = Adjusted R-squared: 0.3946
#R2 = Proporção da variação na variável resposta que foi explicada pela variável explicativa.
#No exemplo, o quanto da variação de riqueza pode ser explicado pela área dos fragmentos.
#R2 = 1, quando todos os pontos caem em cima da reta de regressão
#39% da variação da riqueza de espécies foi explicada pela área dos fragmentos.
#Ainda temos a ANOVA da Regressão
#F-statistic: 32.94 on 1 and 48 DF, p-value: 6.253e-07
#Testa a validade de toda a equação
#Finalizando, com gráfico
plot(Riqueza~Área, pch=16)
abline(resultado, lty=2, col="red")
#abline com a linha do objeto resultado criado, a linha representa a equação
resultado.p<-lm(Riqueza[Ambiente=="primário"]~Área[Ambiente=="primário"])
resultado.s<-lm(Riqueza[Ambiente=="secundário"]~Área[Ambiente=="secundário"])
#Verificar Pressupostos, mata primária
#1 - Pressuposto de Normalidade dos resíduos
qqnorm(resultado.p$residuals)
qqline(resultado.p$residuals, lty=2)
#2 - Pressuposto da Homocedasticidade, esperando que os resíduos variem em torno da reta da regressão de maneira homogenea
#através de inspeção visual dos resíduos
plot(resultado.p$fitted.values, resultado.p$residuals)
#fitted.values, valores ajustados na reta
abline(h=0, lty=2)
#Verificar Pressupostos, mata secundária
#1 - Pressuposto de Normalidade dos resíduos
qqnorm(resultado.s$residuals)
qqline(resultado.s$residuals, lty=2)
#2 - Pressuposto da Homocedasticidade, esperando que os resíduos variem em torno da reta da regressão de maneira homogenea
#através de inspeção visual dos resíduos
plot(resultado.s$fitted.values, resultado.s$residuals)
#fitted.values, valores ajustados na reta
abline(h=0, lty=2)
summary(resultado.p)
##
## Call:
## lm(formula = Riqueza[Ambiente == "primário"] ~ Área[Ambiente ==
## "primário"])
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.640 -3.639 -1.092 3.974 11.617
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11.61574 3.47606 3.342 0.00325 **
## Área[Ambiente == "primário"] 0.19612 0.03219 6.092 5.92e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.108 on 20 degrees of freedom
## Multiple R-squared: 0.6498, Adjusted R-squared: 0.6323
## F-statistic: 37.12 on 1 and 20 DF, p-value: 5.916e-06
summary(resultado.s)
##
## Call:
## lm(formula = Riqueza[Ambiente == "secundário"] ~ Área[Ambiente ==
## "secundário"])
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.2452 -5.0998 0.7625 4.1806 11.4737
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.59948 3.28663 5.051 2.94e-05 ***
## Área[Ambiente == "secundário"] 0.10398 0.03003 3.462 0.00187 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.121 on 26 degrees of freedom
## Multiple R-squared: 0.3155, Adjusted R-squared: 0.2892
## F-statistic: 11.99 on 1 and 26 DF, p-value: 0.001867
plot(Riqueza~Área, las=1, pch=16, col=c("green4", "red")[Ambiente])
abline(resultado.p, lty=2, col="green4")
abline(resultado.s, lty=2, col="red")
legend("topleft", pch=16, col=c("green4", "red"), legend=levels(Ambiente))
#Anotações e Fórmulas nos Gráficos
#função text(), para escrever dentro do gráfico
#a função text utiliza as coordenadas x e y
text(85, 47, "y=11.6+0.19x", col="green4")
text(85, 43, "y=16.6+0.10x", col="red")
#se quiser notações mais complexas, utilizar função expression()
#veja as regras em ?plotmath()
#exemplo
plot(Riqueza~Área, las=1, pch=16, col=c("green4", "red")[Ambiente])
text(85, 45, expression(X^2))
text(85, 42, expression(X[b]))
#Para escrever nas margens
mtext(expression(X^2), side=3)