diff --git a/exemplos_de_aula/5.intervalo_de_confianca.R b/exemplos_de_aula/5.intervalo_de_confianca.R index e2e75e4..2cf0ff4 100644 --- a/exemplos_de_aula/5.intervalo_de_confianca.R +++ b/exemplos_de_aula/5.intervalo_de_confianca.R @@ -1,84 +1,101 @@ library(infer) +library(tidyverse) -sample_mean <- dados %>% - specify(response = p32c, success = "Sim") %>% - calculate(stat = "prop") -# esse aqui ^ você consegue ler o código -# ele diz o que tá fazendo +dados <- readxl::read_excel("exemplos_de_aula//BD_CIS0684.xlsx") -#mean(dados$p32c == "Sim") -#sum(dados$p32c == "Sim")/2079 -# esse aqui vc tem que interpretar o código ^ +# vamos estimar a distribuição populacional da idade das mulheres. +# "estimar distribuição" é chutar um histograma +idade_mulheres <- dados |> + filter(sexo == "Feminino") |> + with(idade1) -# define a sampling distribution -sampling_dist <- dados %>% - specify(response = p32c, success = "Sim") %>% - assume("z") -# assume 'z' eu tô mandando o R entender -# que pra tudo que seguir eu quero que seja -# considerada uma distribuição teórica normal +n_mulheres <-dados |> + filter(sexo == "Feminino") |> + nrow() -# get the confidence interval---note that the -# point estimate is required here -ci <- get_confidence_interval( - sampling_dist, - level = .95, - point_estimate = sample_mean -) +hist(idade_mulheres) -sqrt(sample_mean*(1-sample_mean))/sqrt(2079) +media_amostral <- mean(idade_mulheres) +desvio_padrao_amostral <- sd(idade_mulheres) -sampling_dist |> - visualise() + - shade_confidence_interval(ci) +# vou chutar o erro da distribuição amostral da média populacional +erro_media_amostral <-desvio_padrao_amostral/sqrt(n_mulheres) -# distribuição t ---------------------------------------------------------- +media_amostral + 2*erro_media_amostral +media_amostral - 2*erro_media_amostral -library(infer) +# intervalo de confiança no infer -sample_mean <- dados %>% - specify(response = idade1) %>% - calculate(stat = "mean") - -# define a sampling distribution -sampling_dist <- dados %>% - specify(response = idade1) %>% +sampling_dist <- dados |> + filter(sexo == "Feminino") |> + specify(response = idade1) |> assume("t") +# aplique o teorema central do limite +# trocando desvio padrao populacional por +# desvio padrao amostral (que dá t) + +sampling_dist |> + visualise() + +media_amostral <- dados |> + filter(sexo == "Feminino") |> + specify(response = idade1) |> + calculate(stat = "mean") -# get the confidence interval---note that the -# point estimate is required here ci <- get_confidence_interval( sampling_dist, - level = .95, - point_estimate = sample_mean -) + level = .99, + point_estimate = media_amostral) sampling_dist |> visualise() + shade_confidence_interval(ci) -# distribuicao t amostra pequena ------------------------------------------ +# eu "roubei" pra fazer essa distribuição... -library(infer) +# o "erro_media_amostral" tem um nome técnico que é "erro padrão" +# eu "roubei" quando eu fiz o desenho ao lado, porque eu troquei +# a média populacional pela amostral. -sample_mean <- dados %>% - sample_n(5) |> - specify(response = idade1) %>% - calculate(stat = "mean") +# mas existem resultados estatísticos que me garantem que +# a distribuição X_barra / desvio_padrao_amostral é aproximadamente t com n-1 +# graus de liberdades. uma t com mais do que 30 graus de liberdade é aproximadamente +# normal -# define a sampling distribution -sampling_dist <- dados %>% - sample_n(5) |> - specify(response = idade1) %>% - assume("t") +# estimar proporções é um caso particular de estimar médias: +#exemplo: +quem_gosta_de_sorvete <- c(1, 1, 0, 1, 0) + +mean(quem_gosta_de_sorvete)*100 + +(3/5)*100 + +sqrt(sum((quem_gosta_de_sorvete-mean(quem_gosta_de_sorvete))^2/5)) + +prop <- mean(quem_gosta_de_sorvete) + +sqrt(prop*(1-prop)) + +###### + +# intervalo para proporções + +sampling_dist <- dados |> + filter(sexo == "Feminino") |> + specify(response = p32c, success = "Sim") |> + assume("z") + +prop_amostral <- dados |> + filter(sexo == "Feminino") |> + specify(response = p32c, success = "Sim") |> + calculate(stat = "prop") + +sqrt(.27*(1-.27))/sqrt(1089) -# get the confidence interval---note that the -# point estimate is required here ci <- get_confidence_interval( sampling_dist, - level = .95, - point_estimate = sample_mean -) + level = .99, + point_estimate = prop_amostral) sampling_dist |> visualise() + diff --git a/exemplos_de_aula/7.testes_de_proporcao.R b/exemplos_de_aula/7.testes_de_proporcao.R index 7aeb60c..07df3c8 100644 --- a/exemplos_de_aula/7.testes_de_proporcao.R +++ b/exemplos_de_aula/7.testes_de_proporcao.R @@ -1,121 +1,28 @@ -# Teste de proporção no R ------------------------------------------------- -numero_desemprego_pnad_2024 = 0.078*180000 +# teste de hipotese sai de graça dos graficos de intervalo de conf -------- -prop.test( - x = 14040, - n = 180000, - p = 0.077, - alternative = "two.sided") - -prop.test( - x = 14040, - n = 180000, - p = 0.077, - alternative = "greater") - -# Área da normal no R ----------------------------------------------------- - -?pnorm - -1-pnorm( - 0.078, - 0.077, - sqrt(0.077*(1-0.077))/sqrt(180000) - ) - -# Ler dados --------------------------------------------------------------- - -library(tidyverse) - -dados <- readxl::read_excel("script/BD_CIS0684.xlsx") - -p32c_mulheres <- dados |> - filter(sexo == "Feminino") |> - count(p32c) - -prop.test( - x = 294, - n = 1089, - p = 0.22 -) - -prop.test( - x = p32c_mulheres$n[2], - n = sum(p32c_mulheres$n), - p = 0.26 -) - -p32c_homens <- dados |> - filter(sexo == "Masculino") |> - count(p32c) - -prop.test( - x = p32c_homens$n[2], - n = sum(p32c_homens$n), - p = 0.26 -) - -# pergunta do helder, porque testamos a segunda categoria? -# porque colocamos "[2]"? - -# porque queremos testar a probabilidade de "sim" - -# daria pra testar a probabilidade de "não" também: - -prop.test( - x = p32c_homens$n[1], - n = sum(p32c_homens$n), - p = 0.74 -) - -# cálculo correto -library(survey) -# -dclus1<-svydesign(id=~nquest, weights=~PESO, data=dados) - -dclus_mulheres <- svydesign( - id=~nquest, - weights=~PESO, - data=filter(dados, sexo == "Feminino") - ) - -tabela_contagem <- svytable(~p32c, dclus_mulheres) - -prop.test(tabela_contagem, p = 0.74) -# o proptest aceita tabelas de survei se precisar! - -# Tidy test --------------------------------------------------------------- - -library(infer) +# tenho por hipotese que 30% das mulheres deveriam ter respondido +# "sim" no ultimo grafico dados |> filter( sexo == "Feminino" ) |> prop_test(p32c ~ NULL, p = 0.3, success = "Sim") -# essa função é alternativa ao prop.test padrão do R -# que aceita tabelas diretamente como input -# pra gente não precisar fazer contagem na mão - -modelo <- dados |> +dados_brutos <- dados |> filter(sexo == "Feminino") |> specify(response = p32c, success = "Sim") -estatistica <- modelo |> - hypothesize(null = "point", p = 0.3) |> +sampling_dist <- dados |> + filter(sexo == "Feminino") |> + specify(response = p32c, success = "Sim") |> + assume("z") + +estatistica_do_teste <- dados_brutos |> + hypothesise(null = "point", p = 0.30) |> calculate(stat = "z") -grafico_ggplot <- modelo |> - assume("z") |> +sampling_dist |> visualise() + - shade_p_value(obs_stat = estatistica, direction = "both") - -grafico_ggplot + - labs(caption = "valor-p calculado de 3,32%") + - theme_bw() + - labs(x = "Valor da estatística do teste", y = "", - title = "Distribuição amostral teórica") - -?infer::prop_test + shade_p_value(estatistica_do_teste, direction = "left") diff --git a/slides/apresentacao_tcl_amostragem.pptx b/slides/apresentacao_tcl_amostragem.pptx new file mode 100644 index 0000000..12a7fc2 Binary files /dev/null and b/slides/apresentacao_tcl_amostragem.pptx differ