Adiciona slides de Jackknife.

parent 06e1bde0
......@@ -37,6 +37,8 @@ navbar:
href: tutoriais/06-met-ac-rej.html
- text: "Trabalho 1"
href: tutoriais/trabalho1.pdf
- text: "Jackknife"
href: slides/08-jackknife.html
# - text: "Scripts"
# icon: fa-file-text
# href: scripts/index.html
......
---
title: "Jackknife"
author: Prof. Walmes M. Zeviani
date: 2017-09-15
bibliography: ../config/Refs.bib
csl: ../config/ABNT-UFPR-2011-Mendeley.csl
---
## Jackknife
* Canivete suiço.
* Equipado com várias ferramentas, fácil transporte.
* Mas ferramentas especializadas são melhores que as do canivete.
* Proposto por Tukey.
## Ideia
A ideia fundamentada no estimador da média
$$
\bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i.
$$
A média com a $j$-ésima observação removida, $X_j$ é
$$
\bar{X}_{-j} = \frac{1}{n - 1}
\left( \sum_{i=1}^{n} X_i \right) - X_j.
$$
Combinando as expressões anteriores, pode-se determinar o valor de $X_j$
por
$$
X_j = n\bar{X} - (n - 1) \bar{X}_{-j}.
$$
Essa expressão não tem valor para o caso da média, que serviu apenas de
inspiração. Mas tem utilidade para outros parâmetros/estatísticas.
## O caso geral
Suponha que $\theta$ seja um parâmetro a ser estimado a partir de uma
função dos dados (amostra de tamanho $n$)
$$
\hat{\theta} = f(X_1, X_2, \ldots, X_n).
$$
A quantidade
$$
\theta_j^{*} = n \hat{\theta} - (n - 1) \hat{\theta}_{-j}
$$
é denominada de *pseudo-valor* e se baseia nas diferença ponderada da
estimativa com todas as observações ($\hat{\theta}$) e na *estimativa
parcial*, ou seja, aquela sem a $j$-ésima observação
($\hat{\theta}_{-j}$).
O estimador pontual de Jackknife é definido por
$$
\hat{\theta}^{*} = \frac{1}{n} \sum_{j = 1}^{n} \theta_j^{*},
$$
ou seja, é a média dos pseudo-valores.
Os valores $\hat{\theta}$ e $\hat{\theta}^{*}$ não são necessariamente
iguais nos casos gerais.
Se for assumido que os valores $\theta_j^{*}$, $j = 1, \ldots, n$, são
independentes, a variância do estimador de Jackknife é dados por
$$
\text{Var}(\hat{\theta}^{*}) = \frac{S^2}{n},
\quad S^2 = \frac{1}{n - 1}
\sum_{j = 1}^n (\theta_j^{*} - \hat{\theta}^{*})^2.
$$
## Exemplo 1 - coeficiente de correlação
```{r}
# Fertilidade (y) vs % de homens ocupados na agricultura (x).
plot(Fertility ~ Agriculture, data = swiss)
# Estimativa com todas as observações.
rho <- with(swiss, cor(x = Fertility, y = Agriculture))
rho
n <- nrow(swiss)
i <- 1:n
n
# Estimativas parciais.
pe <- sapply(i,
FUN = function(ii) {
with(swiss[-ii, ],
cor(x = Fertility, y = Agriculture))
})
pe
# Pseudo valores.
pv <- n * rho - (n - 1) * pe
pv
# Estimativa de Jackknife.
mean(pv)
# Erro-padrão Jackknife.
sqrt(var(pv)/n)
# Intervalo de confiança Jackknife.
mean(pv) + c(-1, 1) * qt(p = 0.975, df = n - 1) * sqrt(var(pv)/n)
# Intervalo de confiança para a correlação de Pearson.
with(swiss,
cor.test(x = Fertility, y = Agriculture))
```
## Detalhes
De acordo com @efron2016computerage
* É um procedimento não paramétrico pois nenhuma suposição é feita
sobre a distribuição dos dados.
* É facilmente automatizável. Um único algoritmo pode ser escrito
tendo como argumentos os dados e a estatística de interesse.
* O método é baseado em amostras de tamanho $n - 1$. Existe a
suposição implicita de comportamento suave com o tamanho da amostra.
* O erro-padrão Jackknife é viciado para estimar o verdadeiro erro
padrão.
## Exemplo 2 - regressão local
```{r}
# Carrega os dados da web.
url <- "https://web.stanford.edu/~hastie/CASI_files/DATA/kidney.txt"
kidney <- read.table(url, header = TRUE, sep = " ")
str(kidney)
# Visualiza os dados.
plot(tot ~ age, data = kidney)
n <- nrow(kidney)
i <- 1:n
# kidney$i <- i
# Ajuste do modelo de regressão local.
m0 <- with(kidney, lowess(x = age, y = tot, f = 1/3))
fit0 <- unique(as.data.frame(m0))
head(fit0)
plot(tot ~ age, data = kidney)
lines(m0)
# Obtendo os erros padrões de predição Jackknife.
res <- lapply(i,
FUN = function(ii) {
m1 <- with(kidney[-ii, ],
lowess(x = age,
y = tot,
f = 1/3))
fit1 <- unique(as.data.frame(m1))
names(fit1)[2] <- "y1"
fit <- merge(fit0, fit1, by = "x")
fit$pv <- with(fit, n * y - (n - 1) * y1)
return(fit[, c("x", "pv")])
})
res <- do.call(rbind, res)
str(res)
head(res)
res <- aggregate(pv ~ x,
data = res,
FUN = function(y) {
c(m = mean(y),
sd = sd(y)/sqrt(n))
})
str(res)
head(res)
# ATTENTION: requer revisão.
plot(tot ~ age, data = kidney)
lines(m0)
abline(v = 25, lty = 2, col = "gray")
for (i in 1:nrow(res)) {
segments(res$x[i],
res$pv[i, 1] - 2 * res$pv[i, 2],
res$x[i],
res$pv[i, 1] + 2 * res$pv[i, 2])
}
res[res$x == 25, ]
# TODO: continuar.
```
## Exemplo 3 - regressão não linear
```{r}
data(segreg, package = "alr3")
library(latticeExtra)
xyplot(C ~ Temp, data = segreg, type = c("p", "smooth"))
start <- list(th0 = 75,
th1 = 0.5,
th2 = 50)
xyplot(C ~ Temp, data = segreg) +
layer(panel.curve(th0 + th1 * (x - th2) * (x >= th2) +
0 * (x < th2)),
data = start)
n0 <- nls(C ~ th0 + th1 * (Temp - th2) * (Temp >= th2) +
0 * (Temp < th2),
data = segreg,
start = start)
summary(n0)
confint.default(n0)
# TODO:
# Usar Jackknife para obter erro padrão para os parâmetros.
```
## Próxima aula
* Mais sobre Jackknife.
* Testes de aleatorização.
* Entrega do trabalho.
## Referências
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment