Usando o poder computacional de R para testar a hipótese de igualdade de médias

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:


  1. 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.
  2. 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:



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
imagem
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" .

Source: https://habr.com/ru/post/pt441192/


All Articles