library(shiny)
library(compute.es)
shinyServer(function(input, output) {
options(warn=-1)
sliderValues <- reactive ({
n1 <- as.integer(input$nx)
n2 <- as.integer(input$ny)
data.frame(
n = c(n1, n2),
Mean = c(input$mx, input$my),
SD = c(input$sdx, input$sdy),
stringsAsFactors=FALSE)
})
difference <- reactive({
nx <- input$nx
mx <- input$mx
sdx <- input$sdx
ny <- input$ny
my <- input$my
sdy <- input$sdy
if (input$varequal) {
df <- nx+ny-2
v <- ((nx-1)*sdx^2+(ny-1)*sdy^2)/df
diff <- round((mx - my), 3)
diff.std <- sqrt(v * (1/nx + 1/ny))
diff.lower <- round(diff + diff.std * qt(0.05/2, df),3)
diff.upper <- round(diff + diff.std * qt(0.05/2, df, lower.tail = FALSE),3)
} else {
stderrx <- sqrt(sdx^2/nx)
stderry <- sqrt(sdy^2/ny)
stderr <- sqrt(stderrx^2 + stderry^2)
df <- round(stderr^4/(stderrx^4/(nx - 1) + stderry^4/(ny - 1)),3)
tstat <- round(abs(mx - my)/stderr,3)
diff <- round((mx - my), 3)
cint <- qt(1 - 0.05/2, df)
diff.lower <- round(((tstat - cint) * stderr),3)
diff.upper <- round(((tstat + cint) * stderr),3)
}
cat("Mean of the differences [95% CI] =", diff, "[", diff.lower,",", diff.upper,"]", "\n")
})
es <- reactive({
nx <- input$nx
mx <- input$mx
sdx <- input$sdx
ny <- input$ny
my <- input$my
sdy <- input$sdy
mes(mx, my, sdx, sdy, nx, ny)
})
ttest <- reactive({
nx <- input$nx
mx <- input$mx
sdx <- input$sdx
ny <- input$ny
my <- input$my
sdy <- input$sdy
if (input$varequal) {
df1 <- input$nx+input$ny-2
v1 <- ((input$nx-1)*input$sdx^2+(input$ny-1)*input$sdy^2)/df1
tstat1 <- round(abs(input$mx-input$my)/sqrt(v1*(1/input$nx+1/input$ny)),3)
diff <- round((input$mx - input$my), 3)
P1 <- 2 * pt(-abs(tstat1), df1)
cat("Independent t-test (equal variances assumed)", "\n",
" t =", tstat1, ",", "df =", df1, ",", "p-value =", P1, "\n")
} else {
stderrx <- sqrt(input$sdx^2/input$nx)
stderry <- sqrt(input$sdy^2/input$ny)
stderr <- sqrt(stderrx^2 + stderry^2)
df2 <- round(stderr^4/(stderrx^4/(input$nx - 1) + stderry^4/(input$ny - 1)),3)
tstat2 <- round(abs(input$mx - input$my)/stderr,3)
P2 <- 2 * pt(-abs(tstat2), df2)
cat("Welch's t-test (equal variances not assumed)", "\n",
" t =", tstat2, ",", "df =", df2, ",", "p-value =", P2, "\n")
}
})
vartest <- reactive({
if (input$vartest) {
nx <- input$nx
sdx <- input$sdx
vx <- sdx^2
ny <- input$ny
sdy <- input$sdy
vy <- sdy^2
if (vx > vy) {
f <- vx/vy
df1 <- nx-1
df2 <- ny-1
} else {
f <- vy/vx
df1 <- ny-1
df2 <- nx-1
}
p <- 2*pf(f, df1, df2, lower.tail=FALSE)
dfs <- c("num df"=df1, "denom df"=df2)
cat(" Test for equality of variances", "\n",
" F =", f, ",", "num df =", df1, ",", "denom df =", df2, "\n",
" p-value = ", p, "\n"
)
} else {
cat("Test for equality of variances will be displayed if the option is selected.")
}
})
# Show the values using an HTML table
output$values <- renderTable({
sliderValues()
})
# Show the final calculated value
output$difference.out <- renderPrint({
difference()
})
output$es.out <- renderPrint({
es()
})
output$ttest.out <- renderPrint({
ttest()
})
output$vartest.out <- renderPrint({
vartest()
})
})
library(shiny)
# Define UI for dataset viewer application
shinyUI(pageWithSidebar(
# Application title
headerPanel("Effect Size Calculator 1"),
# Sidebar
sidebarPanel(
p(strong("Group 1:")),
numericInput("nx", " Sample size (n)", 21),
numericInput("mx", " Mean", 61.33),
numericInput("sdx", " SD", 16.43),
p(br()),
p(strong("Group 2:")),
numericInput("ny", " Sample size (n)", 24),
numericInput("my", " Mean", 59.79),
numericInput("sdy", " SD", 18.50),
p(br()),
strong('Option:'),
checkboxInput("varequal", "t-test with equal variances assumed", FALSE),
checkboxInput("vartest", "Show test for equality of variances", FALSE)
),
mainPanel(
tabsetPanel(
tabPanel("Main",
h3("Checking the input data"),
tableOutput("values"),
br(),
h3("Mean of the differences and 95% CI"),
verbatimTextOutput("difference.out"),
br(),
h3("t-test"),
verbatimTextOutput("ttest.out"),
h3(""),
verbatimTextOutput("vartest.out"),
br(),
h3("Effect size indices"),
verbatimTextOutput("es.out"),
br()
),
tabPanel("About",
strong('Note'),
p('This web application is developed with',
a("Shiny.", href="http://www.rstudio.com/shiny/", target="_blank"),
''),
br(),
strong('Code'),
p('Source code for this application is based on',
a('"The handbook of Research in Foreign Language Learning and Teaching" (Takeuchi & Mizumoto, 2012).', href='http://mizumot.com/handbook/', target="_blank")),
p('The code for this web application is available at',
a('GitHub.', href='https://github.com/mizumot/mes', target="_blank")),
p('If you want to run this code on your computer (in a local R session), run the code below:',
br(),
code('library(shiny)'),br(),
code('runGitHub("mes","mizumot")')
),
br(),
strong('Citation in Publications'),
p('Mizumoto, A. (2015). Langtest (Version 1.0) [Web application]. Retrieved from http://langtest.jp'),
br(),
strong('Article'),
p('Mizumoto, A., & Plonsky, L. (2015).', a("R as a lingua franca: Advantages of using R for quantitative research in applied linguistics.", href='http://applij.oxfordjournals.org/content/early/2015/06/24/applin.amv025.abstract', target="_blank"), em('Applied Linguistics,'), 'Advance online publication. doi:10.1093/applin/amv025'),
br(),
strong('Recommended'),
p('To learn more about R, I suggest this excellent and free e-book (pdf),',
a("A Guide to Doing Statistics in Second Language Research Using R,", href="http://cw.routledge.com/textbooks/9780805861853/guide-to-R.asp", target="_blank"),
'written by Dr. Jenifer Larson-Hall.'),
p('Also, if you are a cool Mac user and want to use R with GUI,',
a("MacR", href="http://www.urano-ken.com/blog/2013/02/25/installing-and-using-macr/", target="_blank"),
'is defenitely the way to go!'),
br(),
strong('Author'),
p(a("Atsushi MIZUMOTO,", href="http://mizumot.com", target="_blank"),' Ph.D.',br(),
'Professor of Applied Linguistics',br(),
'Faculty of Foreign Language Studies /',br(),
'Graduate School of Foreign Language Education and Research,',br(),
'Kansai University, Osaka, Japan'),
br(),
a(img(src="http://i.creativecommons.org/p/mark/1.0/80x15.png"), target="_blank", href="http://creativecommons.org/publicdomain/mark/1.0/")
)
)
)
))