O Jupiterweb entre outras informações fornece o conteudo desta disciplina.
Caso tiverem dúvidas sobre alguns dos exercicios ou sobre o envio de algum trabalho via e-nail, revissão de prova, etc, escrevam ao e-mail
prob2.man2024@gmail.com
Não escrevam para o meu e-mail @usp (sua mensagem será tratada como spam).
Notas: JupiterWeb
Todos os exercícios e alguns tópicos adicionais podem ser encontrados na seguinte lista.
Gabarito dos exercícios relativos a P1 e P2.
Os dados a serem utilizados na lista de exercícios e no decorrer do semestre são os seguintes:
orto,
escola,
cancer,
energy,
chicken,
stroke,
cabbage,
Cars93,
hospital,
trabalho,
e
Covid-RP. Qualquer um destes dados pode ser carregado em R utilizando a função read.table, por exemplo
dados <- read.table("http://dcm.ffclrp.usp.br/~rrosales/aulas/cancer.txt", head=TRUE)
R é livre e pode ser baixado do seguinte site. Instalar R é relativamente simples. O site oficial também inclui vários tipos de documentação, inclusive em portugês (no menu a esqueda no site oficial: Contributed). O seguinte documento apresenta uma introdução mínima a linguagem R.
O primeiro Capítulo da referência 1, listada na Bibliografía abaixo, pode ser obtido aqui.
Os seguintes comandos tem por objetivo ilustrar a definição de amostras e estimadores.
A função sample pode ser
utilizada para gerar amostras de uma
população descrita por uma variável
aleatória discreta com um número finito de
valores. Por exemplo,
sample(x=c(1,2,3,4,5,6), size=300, replace=TRUE, prob=c(2/3,1/15,1/15,1/15,1/15,1/15))
gera a amostra
[1] 1 1 1 1 3 1 1 1 1 6 6 1 1 1 1 5 1 6 1 6 4 4 1 1 1 1 6 1 1 2 1 1 1 1 1 1 1 [38] 1 1 3 1 1 3 1 4 1 4 4 1 5 1 1 1 1 5 1 1 4 1 1 1 1 1 3 1 4 1 5 1 1 1 5 1 1 [75] 1 1 4 1 1 6 1 1 5 2 1 6 1 1 1 1 1 1 1 4 1 3 4 1 1 5 2 4 2 1 1 1 1 2 4 1 1 [112] 2 1 1 1 1 3 4 1 1 1 3 5 5 2 1 1 5 3 4 1 3 1 5 1 2 1 1 1 1 6 2 1 1 1 1 3 5 [149] 1 2 5 1 4 2 4 1 1 1 3 1 4 1 1 1 1 1 4 1 1 2 5 1 1 4 1 1 1 1 1 3 1 1 1 3 3 [186] 1 1 3 1 1 1 4 3 1 3 1 6 1 1 1 4 5 1 1 1 2 4 1 1 1 4 1 6 5 1 1 1 6 1 2 3 1 [223] 5 1 1 4 5 3 1 1 4 1 1 1 5 1 2 1 1 1 1 1 6 6 6 3 4 2 2 1 1 1 1 1 4 1 2 5 1 [260] 1 6 1 1 1 4 4 1 1 1 1 1 6 3 2 3 5 1 4 1 1 1 1 1 3 1 4 1 1 2 4 1 1 1 1 1 4 [297] 2 1 1 1
a qual representa o resultado de termos lançado 300 vezes um dado não honesto, com probabilidade 2/3 de resultar em 1. Para simular 10 lançamentos de uma moeda honesta e de outra com probabilidade 1/4 de resultar em cara podemos fazer (1 representa cara)
sample(x=c(0,1), size=10, replace=TRUE, prob=c(1/2,1/2)) sample(x=c(0,1), size=10, replace=TRUE, prob=c(3/4,1/4))
Com o objetivo ilustrar o estimador $\widehat p$
para a proporção de um atributo em uma população $X$,
suponhamos que $X$ é resultado de lançarmos uma moeda e
que a probabilidade
desta resulta em cara é $p = \frac12$. Dada uma amostra de
$X$, constituída por $n$ lançamentos da moeda, $X_1$,
$X_2$, $\ldots$, $X_n$, lembramos que
\[
\widehat p = \frac{1}{n} \sum_{i=1}^n \xi_i
\]
onde $\xi_i = 1_{\{X_i\ \text{ é cara}\}}$, $i=1,
\ldots, n$. Utilizamos sample para gerar os
valores de uma amostra com $n=30$, definindo a seguinte
função chamada moeda,
moeda <- function(n=30, p=1/2){
return(sample(x=c(1,0), size=n, replace=TRUE, prob=c(p,1-p)))
}
onde cara é 1 e corõa é 0. Assim, por exemplo
moeda(n=30) moeda(n=300)
gera os valores de duas amostras simulando 30 e 300
lançamentos de uma moeda honesta, i.e. com $p=\frac12$.
Observe que a função que acabamos de definir acima permite
simular uma moeda com probilidade qualquer de resultar
em cara; sugiro tentar moeda(n=100,p=0.35).
Por fim, seguinte função implementa o estimador $\widehat{p}$,
p.chapeu <- function(x){
return(sum(x)/length(x))
}
As seguintes linas mostram o efeito de aumentarmos o tamanho da amostra no valor do estimador $\widehat p$,
p.chapeu(moeda(30)) p.chapeu(moeda(300)) p.chapeu(moeda(30000)) p.chapeu(moeda(3000000))
R posue funções para gerar amostras de uma grande quantidade de distribuições, alguns exemplos são: rnorm, rpois, rgeom, rbinom, rchisq e rt. O seguinte exemplo gera uma amostra de tamanho 200 de uma população Poisson$(\lambda)$ com $\lambda=10$,
rpois(lambda=10, n=200) [1] 12 15 11 10 10 12 12 7 7 10 14 6 15 11 9 9 6 14 6 9 15 15 8 13 6 [26] 13 12 10 11 8 12 11 9 10 10 8 9 13 4 7 9 9 18 13 10 15 8 11 7 10 [51] 10 9 15 5 10 13 4 7 9 10 10 12 8 12 7 15 14 11 6 14 9 5 12 12 15 [76] 15 14 12 13 11 7 12 6 10 12 3 8 6 13 5 14 9 12 11 12 6 8 5 11 17 [101] 3 14 11 12 10 11 6 9 8 8 2 9 6 14 13 7 12 10 10 9 9 11 11 8 10 [126] 9 5 13 17 13 7 9 5 8 17 13 10 11 8 7 9 10 8 4 8 7 6 11 10 14 [151] 12 11 15 8 10 8 5 8 12 6 11 10 21 6 11 10 4 8 9 12 7 14 11 11 20 [176] 10 12 14 6 13 10 8 7 6 17 5 9 5 6 5 10 10 14 15 9 6 9 12 9 8
Suponhamos que a população das alturas dos estudantes da USP seja normal com média 1.68 (m) e variância 0.01. A seguinte linha utiliza a função rnorm para gerar uma amostra de tamanho 10 desta população e armacena os valores gerados no vetor alturas,
alturas <- rnorm(n=10, mean=1.68, sd = sqrt(0.01))
Definimos a seguir uma função da amostra, $g(X_1, \ldots, X_n)$, com o objetivo de estimar a média da população (suponha que o valor 1.68 utilizado para gerar a mostra seja realmente um parâmetro desconhecido),
g <- function(x){
print(sum(x)/length(x))
}
A função $g$ calcula a media amostral, isto é, para a amostra $x_1, x_2, \ldots, x_{10}$, o estatístico $g$ retorna \[g(x_1, \ldots, x_{10}) = \frac{1}{10}\sum_{i=1}^{10} x_i.\] Em particular, lembramos que este é o valor numérico do estimador $\bar X = \frac{1}{n} \sum_{i=1}^n X_i$ na amostra \[(X_1, X_2, \ldots, X_n)(\omega) = (x_1, x_2, \ldots, x_n).\] No R, o resultado ao aplicarmos o estimador na amostra gerada é
g(alturas)
Podemos gerar mais amostras e observar os valores do estimador em cada uma, por exemplo
for (i in 1:5) g(rnorm(n=10, mean=1.68, sd = sqrt(0.01))) [1] 1.706853 [1] 1.662526 [1] 1.690708 [1] 1.688903 [1] 1.752636
gera 5 amostras e calcula a media amostral de cada
uma. Em sala de aula denotamos $g(X_1, \ldots, X_n)$ por
$\bar X$, o estimador média amostral. O importante
aqui é observarmos como a depender da amostra podem
resultar valores diferentes para o estimador $\bar X$: estes
valoressão todos estimativas de $\bar X$.
Cada chamada a rnorm muda a semente utilizada
pelo gerador de números aleatórios utilizados
por esta função gerando portanto amostras
possívelmente diferentes. Em lugar
de g(), definida acima, R possue a
função mean.
Dada uma amostra $X_1$, $X_2$, $\ldots$, $X_n$ de uma população $X$, seja $S^2$ a variável aleatória definida por \[ S^2 = \frac{1}{n-1}\sum_{i=1}^n (X_i -\bar X)^2. \] $S^2$, conhecido como a variância amostral, é utilizado como um estimador da variância da população $\sigma^2 =$Var$(X)$. $S^2$ pode ser implementado pela função,
S2 <- function(x){
n <- length(x)
xbarra <- sum(x)/n
print(sum((x-xbarra)^2/(n-1)))
}
Assim, para $\sigma = 0.1 = \sqrt{0.01}$ e 5 amostras de tamanho 10
temos
for (i in 1:5) S2(rnorm(n=10, mean=1.68, sd = sqrt(0.01))) [1] 0.005877579 [1] 0.01414221 [1] 0.007516044 [1] 0.007520869 [1] 0.01134922De novo, o importante aqui é vocês observar como o valor de $S^2$ varia aleatóriamente de amostra em amostra.
No R, as funções g() e S2() são
implementadas respectivamente por mean()
e var(); logo não é necessário definilas, mas o
meu objetivo era explicar como isto pode ser feito.
source("http://dcm.ffclrp.usp.br/~rrosales/aulas/empirical_pdf.R")
dado(N=10)
plotFn(dado(N=10))
for (i in 1:6) plotFn(dado(N=10), add=T)
plotFn(dado(N=10000), add=T, col.hor="red", lwd=3)
# amostras de uma populacao normal padrao (mu=0, sd=1)
plotFn(normal(N=30), xlim=c(-3,3))
for (i in 1:3) plotFn(normal(N=30), add=T)
plotFn(normal(N=15000), add=T, col.hor="blue", lwd=3)
A primeira linha carrega as funções
definidas em empirical_pdf.R. A
segunda linha gera uma amostra $X_1$, $X_2$,
$\ldots$, $X_{10}$, a qual representa o
lançamento de um dado honesto 10
vezes. Isto é implementado com a
função dado, a qual por
sua vez utiliza a função do
R sample.
A terceira linha calcula e grafica a estimativa
para $\widehat F_{n}(x)$ baseada na amostra gerada
com dado. A quarta linha calcula e
grafica mais outras seis estimativas, cada uma
obtida com uma amostra diferente (subsequentes
chamadas a sample geram amostras
"aleatórias" diferentes; tente você
mesmo). A quinta linha calcula e grafica a
estimativa obtida com uma amostra de tamanho
n=10000, ou seja uma sequência de
números obtida ao lançarmos 10000 um
dado!. A estimativa desta ultima deve estar bem
próxima da função de
distribuição de um dado honesto.
As ultimas linhas repetem esta experiencia para
amostras de uma população normal
padrão, isto é, com média 0 e
variância 1. Ambos os resultados são
mostrados na figura abaixo.