1 Regressão Linear - Modelagem e Predição

1.1 Dados

peso <- c(46,50,60,55,58,56,48,53)
peso
## [1] 46 50 60 55 58 56 48 53
altura <- c(1.59,1.51,1.65,1.60,1.65,1.63,1.58,1.59)
altura
## [1] 1.59 1.51 1.65 1.60 1.65 1.63 1.58 1.59

1.2 Setando a linha de regressão manualmente a partir do resultadio do linear model (lm)

plot(peso, altura)
lm(altura ~ peso)
## 
## Call:
## lm(formula = altura ~ peso)
## 
## Coefficients:
## (Intercept)         peso  
##    1.245000     0.006667
abline(1.200575, 0.007519)

1.3 Passando o ajuste direto como parâmetro da linha de regressão

modelo = lm(altura ~ peso)
plot(peso, altura)
abline(lm(altura ~ peso), col="red")

1.4 Medida de Correlação

cor(altura,peso)
## [1] 0.7183187

1.5 Customizando o gráfico

library(ggplot2) 
ggplot(mapping = aes(peso, altura)) +
  geom_point() +
  geom_smooth(method = "lm")

retas <- ggplot(mapping = aes(peso, altura)) +
  geom_point() +
  geom_smooth(se = FALSE, method = "lm") + 
  geom_hline(yintercept = mean(altura))
retas

1.6 Adicionando a linha de valor médio e a distancia entre a V.A. observada da média

retas +
  geom_segment(aes(x = peso, y = altura,
                   xend = peso, yend = mean(altura)), color="red") +
  geom_smooth(method = "lm")

1.7 Podando a reta de amplitude e fornecendo a distancia entre o predito e observado

retas +
  geom_segment(aes(x = peso, y = altura,
                   xend = peso, yend = predict(lm(altura ~ peso))), color="red")+
  geom_smooth(method = "lm")

1.8 Calculandpo o R2

SQt = sum((mean(altura) - altura)**2)
SQres = sum((predict(lm(altura ~ peso)) - altura)**2)
R2 = (SQt - SQres) / SQt
R2
## [1] 0.5159817

1.9 Obtendo R2, P-valores e Estatística F direto da função summary

summary(lm(modelo))
## 
## Call:
## lm(formula = modelo)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.068333 -0.009167  0.008333  0.015833  0.038333 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 1.245000   0.140891   8.837 0.000117 ***
## peso        0.006667   0.002636   2.529 0.044735 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.03432 on 6 degrees of freedom
## Multiple R-squared:  0.516,  Adjusted R-squared:  0.4353 
## F-statistic: 6.396 on 1 and 6 DF,  p-value: 0.04474

1.10 Prevendo Valores

pesos <- data.frame(peso = c(49, 51, 62))
predict(lm(altura ~ peso), pesos)
##        1        2        3 
## 1.571667 1.585000 1.658333

1.11 Jogando o resultado em uma variável

res = as.numeric(predict(lm(altura ~ peso), pesos))
res
## [1] 1.571667 1.585000 1.658333

1.12 Visualizando os valores preditos

retas + 
  geom_point(aes(x = pesos$peso, y =res,
                   xend = pesos$peso, yend = mean(res)), color="red")

2 Qui-quadrado

chisq.test(altura, peso)
## 
##  Pearson's Chi-squared test
## 
## data:  altura and peso
## X-squared = 40, df = 35, p-value = 0.2578

3 Correlação

  • Spearman (amostras maiores)
  • kendall (amostras pequenas)

Coeficiente de Correlação de Spearman ρ

Ideal quando temos variáveis medidas apenas em uma escala ordinal.

library(corrplot)
library(RColorBrewer)
dados = as.data.frame(cbind(altura, peso))
dados
M <-cor(dados)
corrplot(M, type="upper", order="hclust",
         col=brewer.pal(n=8, name="RdYlBu"))

cor.test(dados$altura, dados$peso, method=c("pearson", "kendall", "spearman"))
## 
##  Pearson's product-moment correlation
## 
## data:  dados$altura and dados$peso
## t = 2.5291, df = 6, p-value = 0.04474
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.02763305 0.94476880
## sample estimates:
##       cor 
## 0.7183187
cor.test(dados$altura, dados$peso,method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  dados$altura and dados$peso
## t = 2.5291, df = 6, p-value = 0.04474
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.02763305 0.94476880
## sample estimates:
##       cor 
## 0.7183187

3.1 Dados não normais e/ou sem relação linear

cor.test(dados$altura, dados$peso,method = "spearman")
## 
##  Spearman's rank correlation rho
## 
## data:  dados$altura and dados$peso
## S = 11.127, p-value = 0.005249
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.8675328

Coeficiente de Correlação de Kendall (τ de kendall)

Coeficiente de Kendall é, muitas vezes, interpretado como uma medida de concordância entre dois conjuntos de classificações relativas a um conjunto de objetos de estudo.

cor.test(dados$altura, dados$peso,method = "kendall")
## 
##  Kendall's rank correlation tau
## 
## data:  dados$altura and dados$peso
## z = 2.5131, p-value = 0.01197
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##       tau 
## 0.7412493
library("ggpubr")
ggscatter(dados, x = "peso", y = "altura", 
          add = "reg.line", conf.int = TRUE, 
          cor.coef = TRUE, cor.method = "pearson",
          xlab = "Peso (Kg)", ylab = "Altura (m)")

ggqqplot(dados$altura, ylab = "Altura")

ggqqplot(dados$peso, ylab = "Peso")