# Questão 1
Stormchaser = read.csv(file = "http://leg.ufpr.br/~lucambio/ADC/Stormchaser.csv")
# a)
rel.freq <- table(Stormchaser$tornadoes) / length(Stormchaser$tornadoes)
rel.freq2 <- c(rel.freq, rep(0, times = 2))
x.bar <- mean(Stormchaser$tornadoes) ; y <- 0:7
prob <- round(dpois(x=y, lambda = x.bar), 4)
data.frame(y, prob, rel.freq = rel.freq2)
## y prob rel.freq
## 1 0 0.6569 0.78260870
## 2 1 0.2761 0.13043478
## 3 2 0.0580 0.04347826
## 4 3 0.0081 0.01449275
## 5 4 0.0009 0.01449275
## 6 5 0.0001 0.01449275
## 7 6 0.0000 0.00000000
## 8 7 0.0000 0.00000000
plot(x = y - 0.1, y = prob, type = 'h',
xlab = 'Tornados', ylab = 'Probabilidade',
lwd = 2, xaxt = 'n', ylim = c(0,1), col = 'steelblue')
axis(side = 1, at = 0:8)
lines(x = y + 0.1, y = rel.freq2, type = 'h',
lwd = 2, lty = 'solid', col = '#ff5454')
grid()

# Linha azul = observado
# Linha rosa = Poisson
# b)
# O modelo Hurdle pressupõe dois processos distintos,
# onde um determina a presença ou ausência de zeros e o
# outro gera valores positivos. O ZIP assume que zeros
# podem surgir de duas maneiras dentro do mesmo ajuste
# (zeros estruturais e zeros aleatórios).
# c)
# Nesse contexto, o parâmetro quantificaria a probabilidade
# de observarmos zero tornados mesmo quando as condições climáticas
# favorecem a ocorrência dos mesmos.
# d)
library(pscl)
zip <- zeroinfl(tornadoes ~ 1 | 1, dist = "poisson", data = Stormchaser)
hurdle <- hurdle(tornadoes ~ 1, dist = "poisson", data = Stormchaser)
# Estimativa e intervalo de confiança mu.hat ZIP
round(coef(zip)[1], 2) ; round(confint(zip)[1,], 2)
## count_(Intercept)
## 0.41
## 2.5 % 97.5 %
## -0.07 0.89
# Estimativa e intervalo de confiança mu.hat Hurdle
round(coef(hurdle)[1], 2) ; round(confint(hurdle)[1,], 2)
## count_(Intercept)
## 0.41
## 2.5 % 97.5 %
## -0.07 0.89
# Estimativa e intervalo de confiança exp(pi.hat) ZIP
round(exp(coef(zip)[2]), 2) ; round(exp(confint(zip)[2,]), 2)
## zero_(Intercept)
## 2.58
## 2.5 % 97.5 %
## 1.30 5.11
# Estimativa e intervalo de confiança exp(pi.hat) Hurdle
round(exp(coef(hurdle)[2]), 2) ;round(exp(confint(hurdle)[2,]), 2)
## zero_(Intercept)
## 0.28
## 2.5 % 97.5 %
## 0.16 0.49
# Questão 2
starbucks = read.csv(file = "http://leg.ufpr.br/~lucambio/ADC/starbucks.csv")
# a)
# População de inferência: Filiais da starbucks.
# Amostra: Filial de Lincoln, NE, entre às 08:00 e 08:30 da manhã.
# b)
starbucks$Day <- factor(starbucks$Day,
levels = c('Monday','Tuesday','Wednesday','Thursday','Friday'))
plot(Count ~ as.numeric(starbucks$Day), data = starbucks,
xlab = 'Dia da semana', ylab = 'Clientes na fila',
col = '#ff5454', lwd = 1.5, xaxt = 'n')
axis(1, at = 1:5, labels = c('Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta'))

# Não parece plausível que a verdadeira contagem média seja constante ao longo dos dias,
# pois é visível um padrão crescente ao decorrer da semana, apesar dos pontos dos mesmos dias
# nem sempre apresentarem o mesmo comportamento (principalmente na sexta).
# c)
starbucks$t <- 5 # Total de dias
ajuste1 <- glm(Count ~ Day, family = poisson(link = "log"), offset = log(t), data = starbucks)
# Estimação do modelo
round(coef(ajuste1), 2)
## (Intercept) DayTuesday DayWednesday DayThursday DayFriday
## -1.14 0.97 1.10 1.32 1.14
library(car)
Anova(ajuste1, test = 'LR')
## Analysis of Deviance Table (Type II tests)
##
## Response: Count
## LR Chisq Df Pr(>Chisq)
## Day 15.002 4 0.004698 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Dia da semana é significativo
# Questão 3
BladderCancer = read.csv(file = "http://leg.ufpr.br/~lucambio/ADC/BladderCancer.csv")
ajuste_b_c <- glm(Tumors ~ Size, data = BladderCancer, family = poisson(link = "log"), offset = log(Time))
summary(ajuste_b_c)
##
## Call:
## glm(formula = Tumors ~ Size, family = poisson(link = "log"),
## data = BladderCancer, offset = log(Time))
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.3394 0.1768 -13.234 <2e-16 ***
## Size 0.3080 0.3062 1.006 0.315
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 29.850 on 30 degrees of freedom
## Residual deviance: 28.876 on 29 degrees of freedom
## AIC: 103.69
##
## Number of Fisher Scoring iterations: 5
# O tamanho do tumor primário inicial não está relacionado ao número de tumores (não é significativo no modelo)
# Questão 4
library(glmnet)
dt <- read.csv("http://leg.ufpr.br/~lucambio/ADC/dt.csv")
xx <- as.matrix(dt[, c("hosp", "numchron", "gender", "school", "health_excellent", "health_poor")])
yy <- dt$privins
lasso.fit <- glmnet (y = yy , x = xx , family = "binomial")
las.lambda <- lasso.fit$lambda
length(las.lambda)
## [1] 52
las.coefs <- Matrix(rbind(as.matrix(coef(lasso.fit)), las.lambda), sparse = TRUE)
round(las.coefs[,c(1:5)], digits = 3)
## 8 x 5 sparse Matrix of class "dgCMatrix"
## s0 s1 s2 s3 s4
## (Intercept) 1.245 1.053 0.883 0.731 0.593
## hosp . . . . .
## numchron . . . . .
## gender . . . . .
## school . 0.019 0.036 0.051 0.065
## health_excellent . . . . .
## health_poor . . . . .
## las.lambda 0.138 0.126 0.115 0.104 0.095
set.seed (123)
cv.lasso.fit <- cv.glmnet (y = yy , x = xx , family = "binomial")
plot(cv.lasso.fit)
grid()

predict.las <- predict (cv.lasso.fit , newx = xx , type = "response")
head(cbind(dt$privins,round(predict.las,digits = 3)))
## lambda.1se
## [1,] 1 0.659
## [2,] 1 0.788
## [3,] 0 0.766
## [4,] 1 0.511
## [5,] 1 0.659
## [6,] 0 0.668