Saltar al contenido principal
LibreTexts Español

11.3: Simulación de pruebas t

  • Page ID
    150332
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    Ya hemos visto algún código para simular una\(t\) prueba -1000 veces, guardar los\(p\) valores -y luego calcular la proporción de simulaciones que son significativas (p<0.05). Se veía así:

    save_ps<-length(1000)
    for(i in 1:1000){
      group_A <- rnorm(50,100,7)
      group_B <- rnorm(50,105, 7)
      t_results <- t.test(group_A,group_B,var.equal = TRUE)
      save_ps[i] <- t_results$p.value
    }
    prop_p<-length(save_ps[save_ps<0.05])/1000
    print(prop_p)
    [1] 0.953
    

    Podrías jugar con eso, y creo que sería muy útil. ¿Hay algo más que podamos hacer que sea más útil? Seguro que la hay. Con la simulación anterior, hay que cambiar N o la diferencia de medias cada vez para ver cómo resulta la proporción de experimentos significativos. Sería bueno mirar una gráfica donde pudiéramos variar el número de sujetos, y el tamaño de la diferencia de medias. Eso es lo que hace la siguiente simulación. Este tipo de simulación puede hacer que tu computadora haga un trabajo duro dependiendo de cuántas simulaciones ejecutes. Para que mi computadora haga menos trabajo, solo ejecutaremos 100 simulaciones para cada parámetro. Pero, lo que haremos es variar el número de sujetos de 10 a 50 (pasos de 10), y variar el tamaño del efecto de 0 a 20 en pasos de 4.

    library(ggplot2)
    suppressPackageStartupMessages(library(dplyr))
    num_sims        <-500
    N               <-c(10,20,30,40,50)
    mean_difference <-c(0,4,8,12,16,20)
    save_ps<-length(num_sims)
    all_df<-data.frame()
    for(diff in mean_difference){
      for (j in N){
        for(i in 1:num_sims){
          group_A <- rnorm(j,100,7)
          group_B <- rnorm(j,100+diff, 7)
          t_results <- t.test(group_A,group_B,var.equal = TRUE)
          save_ps[i] <- t_results$p.value
        }
        sim_df <-data.frame(save_ps,
                            num_subjects=as.factor(rep(j,num_sims)),
                            mean_diff =rep(diff,num_sims))
        all_df <- rbind(all_df,sim_df)
      }
    }  
    plot_df <- all_df %>%
                dplyr::group_by(num_subjects,mean_diff) %>%
                dplyr::summarise(
                  proportion_sig = length(save_ps[save_ps<0.05])/num_sims,
                  .groups='drop_last'
                )
    ggplot(plot_df, aes(x=mean_diff, 
                        y=proportion_sig, 
                        group=num_subjects, 
                        color=num_subjects))+
      geom_point()+
      geom_line()+
      theme_classic()
     

    Un gráfico como este es muy útil de ver. Generalmente, antes de ejecutar un experimento, puede que no tengamos una muy buena idea del tamaño del efecto que nuestra manipulación podría causar. ¿Será una diferencia media de 0 (sin efecto), o 5, o 10, o 20? Si estás haciendo algo nuevo, es posible que no tengas una buena idea al respecto. Sabrías en general que los efectos mayores son más fáciles de detectar. Serías capaz de detectar efectos cada vez más pequeños si ejecutaras cada vez más temas. Cuando ejecutas este tipo de simulación, puedes variar las posibles diferencias de medias y el número de los sujetos al mismo tiempo, para luego ver qué sucede.

    Cuando la diferencia media es 0, deberíamos obtener un promedio de 5%, o (proporción 0.05) experimentos siendo significativos. Esto es lo que esperamos por casualidad, y no importa cuántos temas dirijamos. Cuando no haya diferencia, rechazaremos el nulo 5% del tiempo (todos estos serían errores tipo 1).

    ¿Qué tal cuando hay una diferencia de 4? Este es un efecto bastante pequeño. Si solo ejecutamos 10 sujetos en cada grupo, podemos ver que menos del 25% de los experimentos simulados mostrarían resultados significativos. Si quisiéramos una mayor probabilidad de éxito para medir un efecto de este tamaño, entonces deberíamos ir hasta 40-50 sujetos, eso nos daría alrededor del 75% de tasas de éxito. Si eso no es lo suficientemente bueno para ti (25% de fallas recuerda, eso sigue siendo mucho), entonces vuelve a ejecutar la simulación con aún más sujetos.

    Otra cosa que vale la pena señalar es que si la diferencia media es mayor que aproximadamente 12.5, se puede ver que todos los diseños producen resultados significativos casi el 100% del tiempo. Si supieras esto, quizás simplemente ejecutarías 10-20 sujetos en tu experimento, en lugar de 50. Después de todo, 10-20 está bien para detectar el efecto, y 50 sujetos pueden ser un desperdicio de recursos (tanto los tuyos como los de sus participantes).


    This page titled 11.3: Simulación de pruebas t is shared under a CC BY-SA 4.0 license and was authored, remixed, and/or curated by Matthew J. C. Crump via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.