Recentemente, surgiu a necessidade de resolver um problema de matemática aparentemente clássico. estatísticas.
Está sendo realizado um teste de um certo efeito de pressão em um grupo de pessoas. É necessário avaliar o efeito. Obviamente, você pode fazer isso usando uma abordagem probabilística.
Mas conversar com os negócios sobre as hipóteses nulas e o valor p é completamente inútil e contraproducente.
Como, em fevereiro de 2019, isso pode ser feito da maneira mais simples e rápida possível com um laptop de “mão média”? Nota abstrata, sem fórmulas.
É uma continuação de publicações anteriores .
Declaração do problema
Existem dois grupos de usuários medidos estatisticamente idênticos (A e B). O grupo B é afetado. Esse efeito leva a uma alteração no valor médio do indicador medido?
A opção mais popular é calcular critérios estatísticos e tirar uma conclusão. Eu gosto do exemplo de "Métodos estatísticos clássicos: teste do qui-quadrado" . Nesse caso, não importa como isso é feito, usando especiais. programas, Excel, R ou outra coisa.
No entanto, a confiabilidade dos resultados pode ser muito duvidosa pelos seguintes motivos:
- De fato, mat. poucas pessoas entendem as estatísticas do começo ao fim. Você deve sempre ter em mente as condições sob as quais um ou outro método pode ser aplicado.
- Como regra, o uso de ferramentas e a interpretação dos resultados são baseados no princípio de um cálculo único e na adoção de uma decisão de “semáforo”. Quanto menos perguntas, melhor para todos os participantes do processo.
Crítica ao valor-p
Muitos materiais, links para os mais espetaculares dos encontrados:
- Natureza. Método científico: erros estatísticos. Os valores de p, o 'padrão ouro' da validade estatística, não são tão confiáveis quanto muitos cientistas supõem., Regina Nuzzo. Nature 506, 150-152
- Métodos da natureza. O valor inconstante de P gera resultados irreproduzíveis, Lewis G Halsey, Douglas Curran-Everett, Sarah L Vowler e Gordon B Drummond. Nature Methods, volume 12, páginas 179–185 (2015)
- ELSEVIER. Uma dúzia suja: Doze equívocos de valor-p, Steven Goodman. Seminários em Hematologia Volume 45, Edição 3, Julho de 2008, Páginas 135-140
O que pode ser feito?
Agora todo mundo tem um computador em mãos, então o método Monte Carlo salva a situação. A partir dos cálculos do valor p, procedemos ao cálculo dos intervalos de confiança para a diferença na média.
Existem muitos livros e materiais, mas, resumidamente, é apresentado de forma muito compacta no relatório de Jake Vanderplas - “Estatísticas para hackers” - PyCon 2016 . A apresentação em si.
Um dos trabalhos iniciais sobre esse tópico, incluindo propostas para visualização gráfica, foi escrito pelo conhecido matemático popularizador da era soviética, Martin Gardner: Intervalos de confiança em vez de valores de P: estimativa em vez de teste de hipóteses. MJ Gardner e DG Altman, Ir. Med J (Clin Res Ed). 1986 15 de março; 292 (6522): 746-750 .
Como usar R para esta tarefa?
Para não fazer tudo com as mãos no nível mais baixo, vejamos o estado atual do ecossistema. Não faz muito tempo, um pacote dabestr
muito conveniente : a análise de dados usando estimativa acoplada ao bootstrap foi transferida para R.
Os princípios de cálculo e análise dos resultados usados no dabestr
no formato de folhas de dicas são descritos aqui: ESTATÍSTICAS DA ESTIMATIVA BETA ANALISAM SEUS DADOS COM TAMANHOS DE EFEITO .
R Exemplo de caderno para "toque": --- title: "A/B bootstrap" output: html_notebook: self_contained: TRUE editor_options: chunk_output_type: inline ---
library(tidyverse) library(magrittr) library(tictoc) library(glue) library(dabestr)
Simulação
Crie uma distribuição lognormal da duração das operações.
my_rlnorm <- function(n, mean, sd){ # . : https://en.wikipedia.org/wiki/Log-normal_distribution#Arithmetic_moments location <- log(mean^2 / sqrt(sd^2 + mean^2)) shape <- sqrt(log(1 + (sd^2 / mean^2))) print(paste("location:", location)) print(paste("shape:", shape)) rlnorm(n, location, shape) } # N (A = Control) A_control <- my_rlnorm(n = 10^3, mean = 500, sd = 150) %T>% {print(glue("mean = {mean(.)}; sd = {sd(.)}"))} # N (B = Test) B_test <- my_rlnorm(n = 10^3, mean = 525, sd = 150) %T>% {print(glue("mean = {mean(.)}; sd = {sd(.)}"))}
Coletamos os dados da forma necessária para a análise usando dabestr
ferramentas da dabestr
e conduzimos a análise.
df <- tibble(Control = A_control, Test = B_test) %>% gather(key = "group", value = "value") tic("bootstrapping") two_group_unpaired <- df %>% dabest(group, value, # The idx below passes "Control" as the control group, # and "Test" as the test group. The mean difference # will be computed as mean(Test) - mean(Control). idx = c("Control", "Test"), paired = FALSE, reps = 5000 ) toc()
Vamos dar uma olhada nos resultados
two_group_unpaired plot(two_group_unpaired)
===================================================== ====
Resultado como IC
DABEST (Data Analysis with Bootstrap Estimation) v0.2.0 ======================================================= Unpaired mean difference of Test (n=1000) minus Control (n=1000) 223 [95CI 209; 236] 5000 bootstrap resamples. All confidence intervals are bias-corrected and accelerated.
e imagens

bastante compreensível e conveniente para conversar com os negócios. Todos os cálculos foram para uma "xícara de café".
Publicação anterior - "Data Science" forças especiais "internamente" .