Comparing alpha of t, Welch, and conditional testA conditional test (c), which decides between t and Welch test (w) by looking at the data first, does not keep its nominal alpha level. |
library(shiny)
ui <- fluidPage(
titlePanel("Comparing alpha of t, Welch, and conditional test"),
p("A conditional test (c), which decides between t and Welch test (w) by
looking at the data first, does not keep its nominal alpha level."
),
sidebarPanel(
sliderInput("m1", "Mean Group 1", -1, 1, 0, .1),
sliderInput("m2", "Mean Group 2", -1, 1, 0, .1),
sliderInput("n1", "Sample size Group 1", 1, 20, 6),
sliderInput("n2", "Sample size Group 2", 1, 20, 12),
radioButtons("alpha", "Alpha", c(".01", ".05", ".10"),
selected = ".05", inline = TRUE),
radioButtons("nrep", "Number of replicates", c("500", "1000", "5000"),
selected = "1000", inline = TRUE),
actionButton("simulate", "Simulate alpha")
),
mainPanel(
wellPanel(plotOutput("power"))
)
)
server <- function(input, output){
power <- eventReactive(input$simulate, {
alpha <- as.numeric(input$alpha)
sapply(seq(1, 3, .5), function(s) {
pval <- replicate(input$nrep, {
grp1 <- rnorm(input$n1, input$m1, s)
grp2 <- rnorm(input$n2, input$m2, 1)
c(
t = t.test(grp1, grp2, var.equal = TRUE)$p.value,
w = t.test(grp1, grp2, var.equal = FALSE)$p.value,
c = t.test(grp1, grp2,
var.equal = var.test(grp1, grp2)$p.value >= alpha
)$p.value
)
})
rowMeans(pval < alpha)
})
})
output$power <- renderPlot({
par(mai = c(.6, .6, .3, .1), mgp = c(2, .7, 0))
matplot(seq(1, 3, .5), t(power()), type="b", pch=c("t", "w", "c"),
xlab = expression(sigma[1]/sigma[2]), panel.first = grid(lty = 1),
ylab = "Type I error rate (power)")
})
}
shinyApp(ui, server)