XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX DISTRIBUIÇÃO T STUDENT
Uma pesquisa mostra que cientistas de dados ganham R$ 75,00 por hora. Uma amostra de 9 cientistas é selecionado e perguntado o salário. O desvio padrão da amostra é 10. Qual a probabilidade do salário ser menor que R$ 80 a hora? t=1.5, graus de liberdade=8 (ver tabela)
pt(1.5, 8)
[1] 0.9139984
Qual a proabilidade de ser maior que 80
pt(1.5,8,lower.tail=F)
[1] 0.08600165
1 - pt(1.5,8)
[1] 0.08600165
Somando as 2 caudas
pt(1.5, 8) + pt(1.5,8,lower.tail=F)
[1] 1
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX DISTRIBUIÇÃO BINOMIAL
x = eventos, p = probabilidades, size = eventos Se jogar uma moeda 5 vezes, qual a prob. de dar cara 3 vezes?
***quando se usa dbinom vamos achar a probabilidade pontual, ou seja, a probabilidade de encontrar 3 vezes.
dbinom(x=3,size=5,prob=0.5)
[1] 0.3125
Se eu passar 4 sinais de quatro tempos cada. Qual a probabilidade de eu pegar 0,1,2,3 e 4 sinais verdes?
pbinom(q=4, size=4, prob=0.25)
[1] 1
XXXXXXXXXXXXXXXX Diferença entre dbinom e pbinom
Função dbinom: Suponha que na nossa amostra de 10 pacotes, n = 10, estejamos interessados na probabilidade de encontrarmos 8 pacotes com peso ideal, k =8, com p =0.90. Calculamos a probabilidade P(X = 8 ) da seguinte maneira:
dbinom(x = 8, size = 10, prob = 0.9)
[1] 0.1937102
E para P(X =9)?
dbinom(x = 9, size = 10, prob = 0.9)
[1] 0.3874205
Repare que o argumento size em dbinom representa o número de replicações do experimento (peso ideal ou não), referente ao parâmetro n da binomial.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Se você fizer a prova de um concurso com 12 questões. “chutando” todas as questões, qual a probabilidade de acertar 7 questões? (4 alternativas cada questão)
dbinom(x=7,size=12,prob=0.25)
[1] 0.01147127
Se eu passar 4 sinais de quatro tempos cada. Qual a probabilidade de eu pegar 3 OU MAIS sinais verdes?
pbinom(q=2, size=4, prob=0.25, lower.tail = F)
[1] 0.05078125
dbinom(x=3,size=4,prob=0.25) + dbinom(x=4,size=4,prob=0.25)
[1] 0.05078125
1 - pbinom(q=2, size=4, prob=0.25)
[1] 0.05078125
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX DISTRIBUIÇÃO DE POISSON
Distribuição de Poisson dpois = probabilidade pontual ppois = cumulativa lower.tail False = maior que, cauda direta da distribuição
O número de acidentes em um dia é igual a 2, qual a proabilidade de ocorrerem 3 em 1 dia?
dpois(3,lambda=2)
[1] 0.180447
O número de acidentes em um dia é igual a 2, qual a proabilidade de ocorrerem 3 OU MENOS em 1 dia?
ppois(3,lambda=2)
[1] 0.8571235
O número de acidentes em um dia é igual a 2, qual a proabilidade de ocorrerem MENOS DO QUE 3 em 1 dia?
ppois(2,lambda = 2)
[1] 0.6766764
dpois(0,lambda=2) + dpois(1,lambda=2) + dpois(2,lambda=2)
[1] 0.6766764
O número de acidentes em um dia é igual a 2, qual a proabilidade de ocorrerem MAIS DO QUE 3 em 1 dia?
ppois(3,lambda=2, lower.tail = F)
[1] 0.1428765
1 - ppois(3,lambda=2)
[1] 0.1428765
XXXXXXXXXXXXXXXX
Criamos o conjunto de dados para teste
novela = matrix(c(19,6,43,32),nrow=2, byrow=T)
rownames(novela) = c("Masculino","Feminino")
colnames(novela) = c("Assiste","NaoAssiste")
novela
Assiste NaoAssiste
Masculino 19 6
Feminino 43 32
Executar Quiquadrado Valor de p é maior que 0,05 não há evidências de diferença significativa (hipótese nula) - portanto não há diferença significativa entre homens e mulheres que assistem novela.
chisq.test(novela)
Pearson's Chi-squared test with Yates' continuity correction
data: novela
X-squared = 2.0374, df = 1, p-value = 0.1535
Alteramos a proporção de homens que assiste e não. Executamos o teste novamente, agora valor de p menor que 0,05
novela = matrix(c(22,3,43,32),nrow=2, byrow=T)
rownames(novela) = c("Masculino","Feminino")
colnames(novela) = c("Assiste","NaoAssiste")
novela
Assiste NaoAssiste
Masculino 22 3
Feminino 43 32
chisq.test(novela)
Pearson's Chi-squared test with Yates' continuity correction
data: novela
X-squared = 6.4615, df = 1, p-value = 0.01102
Agora temos evidencias em favor de nossa hipótese alternativa, pois p-value é menor do que 0,05.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ANOVA
Carrega dados
Visualizando a distribuição dos remédios por horas
Executamos Análise de variância. Observar valor de p maior que 0,05 (Pr(>F)). Hipótese nula de que não há diferença significativa entre os diferentes remédios.
an = aov(Horas ~ Remedio, data=tratamento)
summary(an)
Df Sum Sq Mean Sq F value Pr(>F)
Remedio 2 4.08 2.042 0.538 0.592
Residuals 21 79.75 3.798
Anova de dois fatores. Nenhum valor de P mostra diferença significativa
an = aov(Horas ~ Remedio * Sexo, data=tratamento)
summary(an)
Df Sum Sq Mean Sq F value Pr(>F)
Remedio 2 4.08 2.042 0.533 0.596
Sexo 1 4.17 4.167 1.087 0.311
Remedio:Sexo 2 6.58 3.292 0.859 0.440
Residuals 18 69.00 3.833
Se houver diferença o teste de Tukey é executado
tukey = TukeyHSD(an)
tukey
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = Horas ~ Remedio * Sexo, data = tratamento)
$Remedio
diff lwr upr p adj
B-A -0.625 -3.123427 1.873427 0.8011051
C-A 0.375 -2.123427 2.873427 0.9226431
C-B 1.000 -1.498427 3.498427 0.5732500
$Sexo
diff lwr upr p adj
M-F 0.8333333 -0.8459446 2.512611 0.3109477
$`Remedio:Sexo`
diff lwr upr p adj
B:F-A:F -1.500000e+00 -5.89979 2.89979 0.8816496
C:F-A:F 7.500000e-01 -3.64979 5.14979 0.9935270
A:M-A:F 5.000000e-01 -3.89979 4.89979 0.9990466
B:M-A:F 7.500000e-01 -3.64979 5.14979 0.9935270
C:M-A:F 5.000000e-01 -3.89979 4.89979 0.9990466
C:F-B:F 2.250000e+00 -2.14979 6.64979 0.5936233
A:M-B:F 2.000000e+00 -2.39979 6.39979 0.7010347
B:M-B:F 2.250000e+00 -2.14979 6.64979 0.5936233
C:M-B:F 2.000000e+00 -2.39979 6.39979 0.7010347
A:M-C:F -2.500000e-01 -4.64979 4.14979 0.9999681
B:M-C:F 8.881784e-16 -4.39979 4.39979 1.0000000
C:M-C:F -2.500000e-01 -4.64979 4.14979 0.9999681
B:M-A:M 2.500000e-01 -4.14979 4.64979 0.9999681
C:M-A:M 0.000000e+00 -4.39979 4.39979 1.0000000
C:M-B:M -2.500000e-01 -4.64979 4.14979 0.9999681
Gráficos do teste
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
REGRESSÃO LINEAR SIMPLES NO R
Curso do YouTube
#**O material está todo no diretório (c:\Users\Usuario\R_dados) **
if(!require(pacman)) install.packages("pacman")
library(pacman)
pacman::p_load(dplyr,ggplot2,car,rstatix,lmtest,ggpubr)
glimpse(dados)
Rows: 187
Columns: 2
$ Publicidade <dbl> 985.69, 1445.56, 1188.19, 574.51, 568.95, 471.81, 537.35, 514.07, 611.48, 251.19, 97.97, 406.81, 265.40, 1323.29, 196.65, 1326.60, 1…
$ Vendas <int> 120, 360, 270, 220, 170, 70, 210, 200, 70, 150, 190, 240, 100, 250, 210, 280, 230, 210, 230, 210, 230, 250, 60, 330, 150, 150, 180, …
COMENTÁRIOS Nesta etapa temos de analisar a relação entre a variável dependente (é sempre a que eu quero prever:Vendas) e a variável independente(é a que consideramos que tenha uma influência sobre a variável dependente). Normalmente o eixo vertical y recebe a variável Dependente (Resposta) - ou seja, o queremos prever. No eixo horizontal x recebe a variável Independente (Explanatória) - ou seja, o que usamos para prever.
Construção do modelo
mod <- lm(Vendas ~ Publicidade, dados)
mod
Call:
lm(formula = Vendas ~ Publicidade, data = dados)
Coefficients:
(Intercept) Publicidade
125.1795 0.1049
Análise Gráfica
par(mfrow=c(2,2))
plot(mod)
par(mfrow=c(1,1))
#normalidade dos resíduos
shapiro.test(mod$residuals)
Shapiro-Wilk normality test
data: mod$residuals
W = 0.99193, p-value = 0.3856
#Outiliers nos resíduos
summary(rstandard(mod))
Min. 1st Qu. Median Mean 3rd Qu. Max.
-2.1981347 -0.7064734 0.0392186 -0.0000075 0.6828619 2.3753897
#independência dos resíduos
durbinWatsonTest(mod)
lag Autocorrelation D-W Statistic p-value
1 -0.01039454 1.98891 0.88
Alternative hypothesis: rho != 0
#Homocedasticidade (Breusch-Pagan)
bptest(mod)
studentized Breusch-Pagan test
data: mod
BP = 1.4245, df = 1, p-value = 0.2327
#analise do modelo
summary(mod)
Call:
lm(formula = Vendas ~ Publicidade, data = dados)
Residuals:
Min 1Q Median 3Q Max
-131.840 -42.283 2.344 40.945 142.455
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 125.17951 7.43140 16.84 <2e-16 ***
Publicidade 0.10495 0.01021 10.28 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 60.14 on 185 degrees of freedom
Multiple R-squared: 0.3634, Adjusted R-squared: 0.36
F-statistic: 105.6 on 1 and 185 DF, p-value: < 2.2e-16
ggplot(data = dados, mapping = aes(x = Publicidade, y = Vendas)) +
geom_point() +
geom_smooth(method = "lm", col = "red") +
stat_regline_equation(aes(label = paste(..eq.label.., ..adj.rr.label..,
sep = "*plain(\",\")~~")),
label.x = 0, label.y = 400,
parse = TRUE, coef.digits = 5) +
theme_classic()
Warning: Duplicated aesthetics after name standardisation: parseWarning: Ignoring unknown parameters: coef.digits
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX REGRESSÃO LINEAR SIMPLES
Cars: mostra a velocidade e distância de parada.
#install.packages("corrgram")
library(corrgram)
cars
dim(cars)
[1] 50 2
Correlação entre distância e velocidade de parada
cor(cars)
speed dist
speed 1.0000000 0.8068949
dist 0.8068949 1.0000000
corrgram(cars, order=TRUE, lower.panel=panel.shade,
upper.panel=panel.pie, text.panel=panel.txt,
main="Carros")
Geramos o modelo usando função lm Queremos prever a velocidade que o carro estava baseado na distância de parada Interceptação e Inclinação o quanto a variável depe. aumenta com o aumento da variavel indepenente
modelo
Call:
lm(formula = speed ~ dist, data = cars)
Coefficients:
(Intercept) dist
8.2839 0.1656
Visualização da relação entre variáveis e linha de melhor ajuste
#Executar com Crtrl+ Shift + Enter
plot(speed ~ dist, data=cars, ylab = "Velocidade", xlab=" Distância", main="Carros")
abline(modelo)
Podemos fazer uma previsão usando diretamente os coeficientes Qual velocidade se levou 22 pra parar?
modelo$coefficients
(Intercept) dist
8.2839056 0.1655676
modelo$coefficients[1] + modelo$coefficients[2] * 22
(Intercept)
11.92639
Usando predict
predict(modelo,data.frame(dist = 22))
1
11.92639
Analisando Melhor o Modelo
summary(modelo)
Call:
lm(formula = speed ~ dist, data = cars)
Residuals:
Min 1Q Median 3Q Max
-7.5293 -2.1550 0.3615 2.4377 6.4179
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.28391 0.87438 9.474 1.44e-12 ***
dist 0.16557 0.01749 9.464 1.49e-12 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.156 on 48 degrees of freedom
Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12
modelo$coefficients
(Intercept) dist
8.2839056 0.1655676
modelo$residuals
1 2 3 4 5 6 7 8 9 10 11 12
-4.61504079 -5.93958139 -1.94617594 -4.92639228 -2.93298684 -0.93958139 -1.26412199 -2.58866258 -3.91320318 -0.09855441 -1.91979773 1.39814831
13 14 15 16 17 18 19 20 21 22 23 24
0.40474287 -0.25752743 -0.91979773 0.41133742 -0.91320318 -0.91320318 -2.90001408 1.41133742 -0.24433833 -4.21796012 -7.52931161 3.40474287
25 26 27 28 29 30 31 32 33 34 35 36
2.41133742 -2.22455467 2.41793197 1.09339137 3.41793197 2.09339137 0.43771563 2.76225622 0.44431018 -2.86704131 -4.19158191 4.75566167
37 38 39 40 41 42 43 44 45 46 47 48
3.09998592 -0.54250072 6.41793197 3.76885078 3.10658048 2.44431018 1.11976958 2.78863443 5.77544533 4.12636413 0.48387749 0.31830992
49 50
-4.15201460 2.64285051
hist(modelo$residuals)
modelo$fitted.values
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
8.615041 9.939581 8.946176 11.926392 10.932987 9.939581 11.264122 12.588663 13.913203 11.098554 12.919798 10.601852 11.595257 12.257527 12.919798
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
12.588663 13.913203 13.913203 15.900014 12.588663 14.244338 18.217960 21.529312 11.595257 12.588663 17.224555 13.582068 14.906609 13.582068 14.906609
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
16.562284 15.237744 17.555690 20.867041 22.191582 14.244338 15.900014 19.542501 13.582068 16.231149 16.893420 17.555690 18.880230 19.211366 17.224555
46 47 48 49 50
19.873636 23.516123 23.681690 28.152015 22.357149
plot(modelo$fitted.values, cars$dist)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX REGRESSÃO LINEAR MÚLTIPLA
Carros,com consumo e outros aspectos mpg: consumo, hp cavalos, cyl numero de cilindros, disp cilindradas
#install.packages("corrgram")
library(corrgram)
mtcars
dim(mtcars)
[1] 32 11
Correlação
cor(mtcars[1:4])
mpg cyl disp hp
mpg 1.0000000 -0.8521620 -0.8475514 -0.7761684
cyl -0.8521620 1.0000000 0.9020329 0.8324475
disp -0.8475514 0.9020329 1.0000000 0.7909486
hp -0.7761684 0.8324475 0.7909486 1.0000000
corrgram(mtcars[1:4], order=TRUE, lower.panel=panel.shade,
upper.panel=panel.pie, text.panel=panel.txt,
main="Carros")
Correlação
cor(mtcars[1:4])
mpg cyl disp hp
mpg 1.0000000 -0.8521620 -0.8475514 -0.7761684
cyl -0.8521620 1.0000000 0.9020329 0.8324475
disp -0.8475514 0.9020329 1.0000000 0.7909486
hp -0.7761684 0.8324475 0.7909486 1.0000000
corrgram(mtcars[1:11], order=TRUE, lower.panel=panel.shade,
upper.panel=panel.pie, text.panel=panel.txt,
main="Carros")
Analisamos cilindradas vs consumo
Modelo usando cilindradas para prever consumo Interceptação e Inclinação
modelo = lm(mpg ~ disp, data=mtcars)
modelo
Call:
lm(formula = mpg ~ disp, data = mtcars)
Coefficients:
(Intercept) disp
29.59985 -0.04122
Coeficiente de Determinação (71% da variavel dependente é explicada pela variavel explanatória) R2 ajustado
summary(modelo)$r.squared
[1] 0.7183433
summary(modelo)$adj.r.squared
[1] 0.7089548
Gráfico com linha do modelo
#Executar com Crtrl+ Shif + Enter
plot(mpg ~ disp, data=mtcars,ylab="Consumo", xlab="Cilindradas", main="Carros")
abline(modelo)
Prevendo consumo com 200 cilindradas
predict(modelo,data.frame(disp = 200))
1
21.35683
Adicionamos mais duas variável indepedentes, hp e cilindros
modelo = lm(mpg ~ disp + hp + cyl, data=mtcars)
modelo
Call:
lm(formula = mpg ~ disp + hp + cyl, data = mtcars)
Coefficients:
(Intercept) disp hp cyl
34.18492 -0.01884 -0.01468 -1.22742
Coeficiente de Determinação (71% da variavel dependente é explicada pela variavel explanatória) R2 ajustado
summary(modelo)$r.squared
[1] 0.7678877
summary(modelo)$adj.r.squared
[1] 0.7430186
Prevendo consumo com 200 cilindradas, 100 hp e 4 cilindros
predict(modelo,data.frame(disp = 200, hp=100, cyl=4))
1
24.03969
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX REGRESSÃO LOGÍSTICA
Carga dos dados
Gráfico de Visualização
plot(eleicao$DESPESAS,eleicao$SITUACAO)
summary(eleicao)
CANDIDATO SITUACAO DESPESAS
Length:47 Min. :0.0000 Min. : 10
Class :character 1st Qu.:0.0000 1st Qu.: 300
Mode :character Median :1.0000 Median : 800
Mean :0.5106 Mean :1086
3rd Qu.:1.0000 3rd Qu.:1700
Max. :1.0000 Max. :3300
Correlação
cor(eleicao$DESPESAS,eleicao$SITUACAO)
[1] 0.8121872
Comentário: Existe uma relação positiva forte (pelo menos matemática) entre o investimento e a eleição
Modelo de Regressão Logística
modelo=glm(SITUACAO ~ DESPESAS,data=eleicao,family = "binomial")
summary(modelo)
Call:
glm(formula = SITUACAO ~ DESPESAS, family = "binomial", data = eleicao)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.79020 -0.29574 0.00379 0.20326 2.10968
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -4.602880 1.315934 -3.498 0.000469 ***
DESPESAS 0.004984 0.001404 3.550 0.000385 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 65.135 on 46 degrees of freedom
Residual deviance: 18.540 on 45 degrees of freedom
AIC: 22.54
Number of Fisher Scoring iterations: 7
Modelo Comparado aos Dados Geração de um gráfico comparando os dados reais com o modelo ajustado
plot(eleicao$DESPESAS,eleicao$SITUACAO,col='red',pch=20)
points(eleicao$DESPESAS,modelo$fitted,pch=4)
Comentário: Os pontos vermelhos são os candidatos, e os x fazem parte do nosso modelo ajustado de regressão linear
XXXXXXXXXXXX TESTAR O MODELO COM OS PRÓPRIOS CANDIDATOS XXXXXXXXXXXXXXXX
prever=predict(modelo,newdata=eleicao,type="response")
prever=prever >= 0.5
prever
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
Avaliar Performance
confusao=table(prever,eleicao$SITUACAO)
confusao
prever 0 1
FALSE 21 3
TRUE 2 21
taxaacerto=(confusao[1]+confusao[4])/sum(confusao)
taxaacerto
[1] 0.893617
Comentários:
Novos Candidatos
prevereleicao=read.csv("NovosCandidatos.csv",sep=';',header=T)
prevereleicao
PREVISAO
prevereleicao$RESULT=predict(modelo,newdata=prevereleicao,type="response")
prevereleicao$RESULT
[1] 0.009923466 0.010425261 0.026438255 0.108027149 0.470635921 0.946475247 0.999967947
prevereleicao$RESULT >=0.5
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE