The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
statease is an R package designed to simplify statistical analysis by combining a wide range of tests with automatic plain-English interpretation of results. Whether you are a student, researcher, or educator, statease gives you numbers and meaning in one command.
Throughout this vignette we use a simulated dataset of 90 students examining the effect of teaching methods on exam performance.
set.seed(42)
tutorial_data <- data.frame(
student_id = 1:90,
method = rep(c("Traditional", "Online", "Hybrid"), each = 30),
gender = rep(c("Male", "Female"), times = 45),
exam_score = c(
round(rnorm(30, mean = 65, sd = 10)),
round(rnorm(30, mean = 72, sd = 10)),
round(rnorm(30, mean = 78, sd = 10))
),
pre_test = c(
round(rnorm(30, mean = 55, sd = 10)),
round(rnorm(30, mean = 58, sd = 10)),
round(rnorm(30, mean = 57, sd = 10))
),
age = round(rnorm(90, mean = 22, sd = 3)),
passed = rbinom(90, 1, prob = 0.7)
)
head(tutorial_data)
#> student_id method gender exam_score pre_test age passed
#> 1 1 Traditional Male 79 69 22 0
#> 2 2 Traditional Female 59 50 20 0
#> 3 3 Traditional Male 69 62 23 1
#> 4 4 Traditional Female 71 69 23 1
#> 5 5 Traditional Male 69 44 21 1
#> 6 6 Traditional Female 64 46 18 0The describe() function provides a full summary of a
numeric variable including measures of central tendency, spread, and a
normality check.
result <- describe(tutorial_data$exam_score,
var_name = "Exam Score")
print(result)
#>
#> -- statease Descriptive Report ----------------------------------
#> Variable : Exam Score
#> N : 90 | Missing: 0
#> -----------------------------------------------------------------
#> Mean : 72.10
#> Median : 74.00
#> Std Dev : 11.94
#> Min : 38.00 | Max: 93.00
#> Q1 : 64.00 | Q3: 80.00
#> IQR : 16.00
#> -----------------------------------------------------------------
#> Interpretation:
#> The distribution is approximately symmetric.
#> Spread shows moderate variability (CV = 16.6%).
#> Shapiro-Wilk test suggests non-normality (W = 0.958, p = 0.0054).
#> -----------------------------------------------------------------You can also extract individual values:
result$mean
#> [1] 72.1
result$sd
#> [1] 11.93903
result$skew_label
#> [1] "approximately symmetric"Compare exam scores between male and female students:
males <- tutorial_data$exam_score[tutorial_data$gender == "Male"]
females <- tutorial_data$exam_score[tutorial_data$gender == "Female"]
result <- ttest_interpret(
males, females,
var_name = "Exam Score by Gender"
)
print(result)
#>
#> -- statease T-Test Report ----------------------------------------
#> Test : Independent Samples T-Test
#> Variable : Exam Score by Gender
#> Groups : Group 1: n = 45 | Group 2: n = 45
#> -----------------------------------------------------------------
#> t-statistic : 0.026
#> df : 88.0
#> p-value : 0.9790
#> 95% CI : [-4.964, 5.097]
#> Cohen's d : 0.006 (negligible effect)
#> -----------------------------------------------------------------
#> Interpretation:
#> The result is not statistically significant (p = 0.979 > alpha 0.05).
#> Group 1 had a higher mean (72.13 vs 72.07).
#> Effect size is negligible (d = 0.006).
#> 95% CI: true difference lies between -4.964 and 5.097.
#> -----------------------------------------------------------------Test whether the average exam score is significantly different from 70:
result <- ttest_interpret(
tutorial_data$exam_score,
mu = 70,
var_name = "Exam Score"
)
print(result)
#>
#> -- statease T-Test Report ----------------------------------------
#> Test : One-Sample T-Test
#> Variable : Exam Score
#> Groups : n = 90 | Hypothesised mean (mu) = 70.00
#> -----------------------------------------------------------------
#> t-statistic : 1.669
#> df : 89.0
#> p-value : 0.0987
#> 95% CI : [69.599, 74.601]
#> Cohen's d : 0.176 (negligible effect)
#> -----------------------------------------------------------------
#> Interpretation:
#> The result is not statistically significant (p = 0.099 > alpha 0.05).
#> Sample mean was 72.10 vs hypothesised 70.00.
#> Effect size is negligible (d = 0.176).
#> 95% CI: true difference lies between 69.599 and 74.601.
#>
#> WARNING: Shapiro-Wilk suggests x may not be normally distributed.
#> -----------------------------------------------------------------Test whether students improved from pre-test to final exam:
result <- ttest_interpret(
tutorial_data$exam_score,
tutorial_data$pre_test,
paired = TRUE,
var_name = "Score Improvement"
)
print(result)
#>
#> -- statease T-Test Report ----------------------------------------
#> Test : Paired Samples T-Test
#> Variable : Score Improvement
#> Groups : n (pairs) = 90
#> -----------------------------------------------------------------
#> t-statistic : 10.296
#> df : 89.0
#> p-value : 0.0000
#> 95% CI : [13.262, 19.605]
#> Cohen's d : 1.085 (large effect)
#> -----------------------------------------------------------------
#> Interpretation:
#> The result is statistically significant (p = 0.000 < alpha 0.05).
#> Group 1 had a higher mean (72.10 vs 55.67).
#> Effect size is large (d = 1.085).
#> 95% CI: true difference lies between 13.262 and 19.605.
#>
#> WARNING: Shapiro-Wilk suggests x may not be normally distributed.
#> -----------------------------------------------------------------Test whether teaching method affects exam scores:
result <- anova_interpret(
exam_score ~ method,
data = tutorial_data
)
print(result)
#>
#> -- statease ANOVA Report -----------------------------------------
#> Outcome : exam_score
#> Group : method (3 levels)
#> -----------------------------------------------------------------
#> Group Means:
#> Hybrid : Mean = 79.90 (n = 30)
#> Online : Mean = 70.77 (n = 30)
#> Traditional : Mean = 65.63 (n = 30)
#> -----------------------------------------------------------------
#> F-statistic : 14.267
#> df : 2, 87
#> p-value : 0.0000
#> Eta squared : 0.2470 (large effect)
#> -----------------------------------------------------------------
#> Interpretation:
#> The overall ANOVA result is statistically significant (p = 0.0000 < alpha 0.05).
#> Group differences explain 24.7% of variance
#> (eta^2 = 0.2470, large effect).
#> WARNING: Bartlett's test suggests unequal variances (p = 0.0421).
#>
#> -- Post-Hoc Tukey HSD --------------------------------------------
#> Online-Hybrid
#> Mean diff = -9.133 | p adj = 0.0031 | [significant]
#> Traditional-Hybrid
#> Mean diff = -14.267 | p adj = 0.0000 | [significant]
#> Traditional-Online
#> Mean diff = -5.133 | p adj = 0.1456 | [not significant]
#> -----------------------------------------------------------------
#> Note: Tukey HSD controls for family-wise error rate.
#> -----------------------------------------------------------------Test the effect of both teaching method and gender on exam scores:
result <- anova2_interpret(
exam_score ~ method * gender,
data = tutorial_data
)
print(result)
#>
#> statease Two-Way ANOVA Report
#> Outcome : exam_score
#> Factor 1 : method
#> Factor 2 : gender
#> N : 90
#>
#> Means by method:
#> Hybrid : 79.90
#> Online : 70.77
#> Traditional : 65.63
#>
#> Means by gender:
#> Female : 72.07
#> Male : 72.13
#>
#> Interaction Means:
#> Female Male
#> Hybrid 81.27 78.53
#> Online 71.60 69.93
#> Traditional 63.33 67.93
#>
#> ANOVA Results:
#> method : F = 14.123 df = 2,84 significant (p = 0.0000) eta^2 = 0.2470 (large)
#> gender : F = 0.001 df = 1,84 not significant (p = 0.9761) eta^2 = 0.0000 (negligible)
#> Interaction : F = 1.061 df = 2,84 not significant (p = 0.3506) eta^2 = 0.0186 (small)
#>
#> Interpretation:
#> Main effect of method is significant (p = 0.0000).
#> Main effect of gender is not significant (p = 0.9761).
#> Interaction (method x gender) is not significant (p = 0.3506).
#>
#> -- Post-Hoc Tukey HSD (method) ------------------------------
#> Online-Hybrid : diff = -9.133 p adj = 0.0033 [significant]
#> Traditional-Hybrid : diff = -14.267 p adj = 0.0000 [significant]
#> Traditional-Online : diff = -5.133 p adj = 0.1485 [not significant]
#> -----------------------------------------------------------------Test the combined effect of teaching method on both exam score and pre-test score simultaneously:
result <- manova_interpret(
cbind(exam_score, pre_test) ~ method,
data = tutorial_data
)
print(result)
#>
#> -- statease MANOVA Report ----------------------------------------
#> Outcomes : exam_score, pre_test
#> Group : method (3 levels)
#> N : 90
#> -----------------------------------------------------------------
#> Group Means:
#>
#> exam_score:
#> Hybrid : 79.90
#> Online : 70.77
#> Traditional : 65.63
#>
#> pre_test:
#> Hybrid : 56.87
#> Online : 55.37
#> Traditional : 54.77
#> -----------------------------------------------------------------
#> Multivariate Test Results:
#> Pillai's Trace : 0.2565
#> Wilks' Lambda : 0.7435
#> F-statistic : 6.400 (df = 4, 174)
#> p-value : 0.0001
#> Effect size : small (Pillai = 0.2565)
#> -----------------------------------------------------------------
#> Interpretation:
#> The overall MANOVA result is statistically significant (p = 0.0001 < alpha 0.05).
#> Pillai's Trace = 0.2565 indicates a small effect.
#> -----------------------------------------------------------------
#> Follow-Up Univariate ANOVAs:
#>
#> exam_score
#> F = 14.267 (df = 2, 87) p = 0.0000 [significant]
#>
#> pre_test
#> F = 0.403 (df = 2, 87) p = 0.6695 [not significant]
#>
#> Note: Follow-up ANOVAs identify which outcomes
#> differ significantly across groups.
#>
#> WARNING: 'exam_score' may not be normally distributed (Shapiro-Wilk p = 0.0054).
#> -----------------------------------------------------------------Test whether there is an association between teaching method and pass/fail outcome:
tutorial_data$passed_label <- ifelse(tutorial_data$passed == 1,
"Pass", "Fail")
result <- chisq_interpret(
tutorial_data$method,
tutorial_data$passed_label
)
print(result)
#>
#> -- statease Chi-Square Test Report ------------------------------
#> N : 90
#> -----------------------------------------------------------------
#> Contingency Table (Observed):
#> y
#> x Fail Pass
#> Hybrid 6 24
#> Online 8 22
#> Traditional 10 20
#>
#> Expected Frequencies:
#> y
#> x Fail Pass
#> Hybrid 8 22
#> Online 8 22
#> Traditional 8 22
#>
#> -----------------------------------------------------------------
#> Chi-square : 1.364
#> df : 2
#> p-value : 0.5057
#> Cramer's V : 0.123 (small effect)
#> -----------------------------------------------------------------
#> Interpretation:
#> The result is not statistically significant (p = 0.5057 > alpha 0.05).
#> There is no significant association between the two variables.
#> Effect size is small (V = 0.123).
#> -----------------------------------------------------------------Test the relationship between pre-test scores and exam scores:
result <- cor_interpret(
tutorial_data$pre_test,
tutorial_data$exam_score,
var1_name = "Pre-Test Score",
var2_name = "Exam Score"
)
print(result)
#>
#> -- statease Correlation Report -----------------------------------
#> Method : Pearson Product-Moment Correlation
#> Variables : Pre-Test Score & Exam Score
#> N : 90 | Missing: 0
#> -----------------------------------------------------------------
#> r : -0.0038
#> p-value : 0.9720
#> 95% CI : [-0.2107, 0.2035]
#> Strength : negligible
#> Direction : negative (as one variable increases, the other tends to decrease)
#> -----------------------------------------------------------------
#> Interpretation:
#> The correlation is not statistically significant (p = 0.9720 > alpha 0.05).
#> The relationship between Pre-Test Score and Exam Score is
#> negligible and negative (as one variable increases, the other tends to decrease) in direction.
#>
#> WARNING: One or both variables may not be normally distributed. Consider using method = 'spearman' instead.
#> -----------------------------------------------------------------result <- cor_interpret(
tutorial_data$pre_test,
tutorial_data$exam_score,
method = "spearman",
var1_name = "Pre-Test Score",
var2_name = "Exam Score"
)
#> Warning in cor.test.default(x, y, method = method, conf.level = conf.level):
#> Cannot compute exact p-value with ties
print(result)
#>
#> -- statease Correlation Report -----------------------------------
#> Method : Spearman Rank Correlation
#> Variables : Pre-Test Score & Exam Score
#> N : 90 | Missing: 0
#> -----------------------------------------------------------------
#> r : 0.0750
#> p-value : 0.4826
#> Strength : negligible
#> Direction : positive (as one variable increases, the other tends to increase)
#> -----------------------------------------------------------------
#> Interpretation:
#> The correlation is not statistically significant (p = 0.4826 > alpha 0.05).
#> The relationship between Pre-Test Score and Exam Score is
#> negligible and positive (as one variable increases, the other tends to increase) in direction.
#> -----------------------------------------------------------------Predict exam score from pre-test score:
result <- reg_interpret(
exam_score ~ pre_test,
data = tutorial_data
)
print(result)
#>
#> -- statease Simple Linear Regression Report ---------------------
#> Outcome : exam_score
#> Predictor : pre_test
#> N : 90
#> -----------------------------------------------------------------
#> Model Equation:
#> exam_score = 72.369 + -0.005 * pre_test
#> -----------------------------------------------------------------
#> Coefficients:
#> Intercept : 72.369
#> Slope : -0.005 (SE = 0.137)
#> t-statistic : -0.035
#> p-value : 0.9720
#> 95% CI : [-0.278, 0.268]
#> -----------------------------------------------------------------
#> Model Fit:
#> R-squared : 0.0000
#> Adj R-squared: -0.0113
#> F-statistic : 0.001 (df = 1, 88) p = 0.9720
#> -----------------------------------------------------------------
#> Interpretation:
#> The predictor pre_test is not statistically significant (p = 0.9720 > alpha 0.05).
#> The slope is negative - as pre_test increases by 1 unit, exam_score decreases by 0.005 units.
#> R-squared = 0.0000: pre_test explains 0.0% of the
#> variance in exam_score (negligible effect).
#>
#> WARNING: Residuals may not be normally distributed (Shapiro-Wilk p = 0.0056).
#> -----------------------------------------------------------------Predict exam score from both pre-test score and age:
result <- mlr_interpret(
exam_score ~ pre_test + age,
data = tutorial_data
)
print(result)
#>
#> -- statease Multiple Linear Regression Report -------------------
#> Outcome : exam_score
#> Predictors : pre_test, age
#> N : 90
#> -----------------------------------------------------------------
#> Model Equation:
#> exam_score = 70.019 + 0.001*pre_test + 0.093*age
#> -----------------------------------------------------------------
#> Overall Model Fit:
#> R-squared : 0.0005 (negligible effect)
#> Adj R-squared: -0.0225
#> F-statistic : 0.022 (df = 2, 87) p = 0.9782
#> The overall model is not statistically significant (p = 0.9782 > alpha 0.05).
#> -----------------------------------------------------------------
#> Individual Predictors:
#>
#> pre_test
#> Coefficient : 0.001 (SE = 0.141)
#> t-statistic : 0.008
#> p-value : 0.9936 [not significant]
#> 95% CI : [-0.279, 0.282]
#> Direction : positive (b = 0.001)
#>
#> age
#> Coefficient : 0.093 (SE = 0.447)
#> t-statistic : 0.207
#> p-value : 0.8366 [not significant]
#> 95% CI : [-0.796, 0.982]
#> Direction : positive (b = 0.093)
#> -----------------------------------------------------------------
#> Interpretation:
#> The model explains 0.1% of the variance in exam_score
#> (R-squared = 0.0005, negligible effect).
#> Adjusted R-squared = -0.0225 accounting for
#> the number of predictors in the model.
#> Non-significant predictors: pre_test, age
#>
#> WARNING: Residuals may not be normally distributed (Shapiro-Wilk p = 0.0048).
#> -----------------------------------------------------------------Predict pass/fail outcome from pre-test score and age:
result <- logistic_interpret(
passed ~ pre_test + age,
data = tutorial_data
)
#> Waiting for profiling to be done...
print(result)
#>
#> -- statease Logistic Regression Report --------------------------
#> Outcome : passed
#> Predictors : pre_test, age
#> N : 90
#> -----------------------------------------------------------------
#> Overall Model Fit:
#> Chi-square : 3.668 (df = 2) p = 0.1598
#> Nagelkerke R2: 0.0582 (small effect)
#> The overall model is not statistically significant (p = 0.1598 > alpha 0.05).
#> -----------------------------------------------------------------
#> Individual Predictors:
#>
#> pre_test
#> Coefficient : -0.050 (SE = 0.027)
#> z-statistic : -1.842
#> p-value : 0.0655 [not significant]
#> Odds Ratio : 0.951
#> 95% CI (OR) : [0.899, 1.002]
#> Interpretation: each unit increase in pre_test decreases the odds by 4.9%.
#>
#> age
#> Coefficient : -0.006 (SE = 0.086)
#> z-statistic : -0.065
#> p-value : 0.9482 [not significant]
#> Odds Ratio : 0.994
#> 95% CI (OR) : [0.838, 1.180]
#> Interpretation: each unit increase in age decreases the odds by 0.6%.
#> -----------------------------------------------------------------
#> Interpretation:
#> The model is not statistically significant (p = 0.1598 > alpha 0.05).
#> Nagelkerke R2 = 0.0582 suggests a small amount of
#> variance in passed is explained by the predictors.
#> Non-significant predictors: pre_test, age
#> -----------------------------------------------------------------Non-parametric alternative to the independent samples t-test:
result <- mannwhitney_interpret(
males, females,
var_name = "Exam Score by Gender"
)
#> Warning in wilcox.test.default(x, y, paired = FALSE, conf.int = TRUE,
#> conf.level = conf.level): cannot compute exact p-value with ties
#> Warning in wilcox.test.default(x, y, paired = FALSE, conf.int = TRUE,
#> conf.level = conf.level): cannot compute exact confidence intervals with ties
print(result)
#>
#> -- statease Mann-Whitney U Test Report --------------------------
#> Variable : Exam Score by Gender
#> Group 1 : n = 45 | Median = 74.00
#> Group 2 : n = 45 | Median = 75.00
#> -----------------------------------------------------------------
#> W statistic : 1026.500
#> p-value : 0.9132
#> 95% CI : [-5.000, 5.000]
#> Effect size : 0.011 (negligible)
#> -----------------------------------------------------------------
#> Interpretation:
#> The result is not statistically significant (p = 0.9132 > alpha 0.05).
#> Values in Group 2 appear stochastically greater than values in Group 1. (Reported medians: Group 1 = 74.00, Group 2 = 75.00)
#> Effect size is negligible (r = 0.011).
#> Note: Mann-Whitney tests stochastic superiority,
#> not differences in medians.
#> -----------------------------------------------------------------Non-parametric alternative to the paired t-test:
result <- wilcoxon_interpret(
tutorial_data$exam_score,
tutorial_data$pre_test,
var_name = "Score Improvement"
)
print(result)
#>
#> -- statease Wilcoxon Signed Rank Test Report --------------------
#> Variable : Score Improvement
#> N (pairs) : 90
#> Pre Median : 55.00
#> Post Median : 74.00
#> -----------------------------------------------------------------
#> V statistic : 3711.500
#> p-value : 0.0000
#> 95% CI : [14.000, 20.500]
#> Effect size : 0.737 (large)
#> -----------------------------------------------------------------
#> Interpretation:
#> The result is statistically significant (p = 0.0000 < alpha 0.05).
#> Post-measurement values appear stochastically greater than pre-measurement values. (Reported medians: Post = 74.00, Pre = 55.00)
#> Effect size is large (r = 0.737).
#> Note: Wilcoxon test assesses stochastic superiority,
#> not differences in medians.
#> -----------------------------------------------------------------Non-parametric alternative to one-way ANOVA:
result <- kruskal_interpret(
exam_score ~ method,
data = tutorial_data
)
print(result)
#>
#> -- statease Kruskal-Wallis Test Report --------------------------
#> Outcome : exam_score
#> Group : method (3 levels)
#> N : 90
#> -----------------------------------------------------------------
#> Group Medians:
#> Hybrid : Median = 81.00 (n = 30)
#> Online : Median = 73.50 (n = 30)
#> Traditional : Median = 64.00 (n = 30)
#> -----------------------------------------------------------------
#> H statistic : 23.052
#> df : 2
#> p-value : 0.0000
#> Eta squared : 0.2420 (large effect)
#> -----------------------------------------------------------------
#> Interpretation:
#> The result is statistically significant (p = 0.0000 < alpha 0.05).
#> The result is statistically significant (p = 0.0000 < alpha 0.05).
#> Effect size is large (eta^2 = 0.2420).
#> Note: Kruskal-Wallis tests stochastic superiority
#> across groups, not differences in medians.
#> Medians are reported for descriptive purposes only.
#>
#> -- Post-Hoc Pairwise Comparisons (Wilcoxon) ---------------------
#> Hybrid vs Online
#> p = 0.0006 [significant]
#> Hybrid vs Traditional
#> p = 0.0000 [significant]
#> Online vs Traditional
#> p = 0.0653 [not significant]
#>
#> Note: Pairwise Wilcoxon tests used for post-hoc comparisons.
#> -----------------------------------------------------------------Interpret any p-value in plain English:
result <- interpret_p(
0.03,
context = "teaching method effect on exam scores"
)
print(result)
#>
#> -- statease P-Value Interpretation ------------------------------
#> Context : teaching method effect on exam scores
#> P-value : 0.0300
#> Alpha : 0.05
#> -----------------------------------------------------------------
#> Decision : REJECT the null hypothesis at alpha = 0.05
#> Evidence : There is moderate evidence against the null hypothesis.
#> -----------------------------------------------------------------
#> Interpretation:
#> The result is statistically significant. The observed data is unlikely to have occurred by chance if the null hypothesis were true.
#>
#> Note: Statistical significance does not imply practical importance. Always consider effect size alongside the p-value.
#> -----------------------------------------------------------------The analyze() function automatically detects the right
test based on your input — no need to remember which function to
use!
# Descriptive statistics
analyze(x = tutorial_data$exam_score, var_name = "Exam Score")
#> [statease] Single numeric vector -> Running Descriptive Statistics
#>
#> -- statease Descriptive Report ----------------------------------
#> Variable : Exam Score
#> N : 90 | Missing: 0
#> -----------------------------------------------------------------
#> Mean : 72.10
#> Median : 74.00
#> Std Dev : 11.94
#> Min : 38.00 | Max: 93.00
#> Q1 : 64.00 | Q3: 80.00
#> IQR : 16.00
#> -----------------------------------------------------------------
#> Interpretation:
#> The distribution is approximately symmetric.
#> Spread shows moderate variability (CV = 16.6%).
#> Shapiro-Wilk test suggests non-normality (W = 0.958, p = 0.0054).
#> -----------------------------------------------------------------# Auto t-test
analyze(
x = males,
y = females,
var_name = "Exam Score by Gender"
)
#> [statease] Two numeric vectors detected -> Running T-Test
#>
#> -- statease T-Test Report ----------------------------------------
#> Test : Independent Samples T-Test
#> Variable : Exam Score by Gender
#> Groups : Group 1: n = 45 | Group 2: n = 45
#> -----------------------------------------------------------------
#> t-statistic : 0.026
#> df : 88.0
#> p-value : 0.9790
#> 95% CI : [-4.964, 5.097]
#> Cohen's d : 0.006 (negligible effect)
#> -----------------------------------------------------------------
#> Interpretation:
#> The result is not statistically significant (p = 0.979 > alpha 0.05).
#> Group 1 had a higher mean (72.13 vs 72.07).
#> Effect size is negligible (d = 0.006).
#> 95% CI: true difference lies between -4.964 and 5.097.
#> -----------------------------------------------------------------# Auto ANOVA
analyze(formula = exam_score ~ method, data = tutorial_data)
#> [statease] 3+ groups detected -> Running One-Way ANOVA
#>
#> -- statease ANOVA Report -----------------------------------------
#> Outcome : exam_score
#> Group : method (3 levels)
#> -----------------------------------------------------------------
#> Group Means:
#> Hybrid : Mean = 79.90 (n = 30)
#> Online : Mean = 70.77 (n = 30)
#> Traditional : Mean = 65.63 (n = 30)
#> -----------------------------------------------------------------
#> F-statistic : 14.267
#> df : 2, 87
#> p-value : 0.0000
#> Eta squared : 0.2470 (large effect)
#> -----------------------------------------------------------------
#> Interpretation:
#> The overall ANOVA result is statistically significant (p = 0.0000 < alpha 0.05).
#> Group differences explain 24.7% of variance
#> (eta^2 = 0.2470, large effect).
#> WARNING: Bartlett's test suggests unequal variances (p = 0.0421).
#>
#> -- Post-Hoc Tukey HSD --------------------------------------------
#> Online-Hybrid
#> Mean diff = -9.133 | p adj = 0.0031 | [significant]
#> Traditional-Hybrid
#> Mean diff = -14.267 | p adj = 0.0000 | [significant]
#> Traditional-Online
#> Mean diff = -5.133 | p adj = 0.1456 | [not significant]
#> -----------------------------------------------------------------
#> Note: Tukey HSD controls for family-wise error rate.
#> -----------------------------------------------------------------# Auto non-parametric
analyze(
formula = exam_score ~ method,
data = tutorial_data,
nonparam = TRUE
)
#> [statease] 3+ groups + nonparam = TRUE -> Running Kruskal-Wallis Test
#>
#> -- statease Kruskal-Wallis Test Report --------------------------
#> Outcome : exam_score
#> Group : method (3 levels)
#> N : 90
#> -----------------------------------------------------------------
#> Group Medians:
#> Hybrid : Median = 81.00 (n = 30)
#> Online : Median = 73.50 (n = 30)
#> Traditional : Median = 64.00 (n = 30)
#> -----------------------------------------------------------------
#> H statistic : 23.052
#> df : 2
#> p-value : 0.0000
#> Eta squared : 0.2420 (large effect)
#> -----------------------------------------------------------------
#> Interpretation:
#> The result is statistically significant (p = 0.0000 < alpha 0.05).
#> The result is statistically significant (p = 0.0000 < alpha 0.05).
#> Effect size is large (eta^2 = 0.2420).
#> Note: Kruskal-Wallis tests stochastic superiority
#> across groups, not differences in medians.
#> Medians are reported for descriptive purposes only.
#>
#> -- Post-Hoc Pairwise Comparisons (Wilcoxon) ---------------------
#> Hybrid vs Online
#> p = 0.0006 [significant]
#> Hybrid vs Traditional
#> p = 0.0000 [significant]
#> Online vs Traditional
#> p = 0.0653 [not significant]
#>
#> Note: Pairwise Wilcoxon tests used for post-hoc comparisons.
#> -----------------------------------------------------------------# Auto regression
analyze(formula = exam_score ~ pre_test, data = tutorial_data)
#> [statease] Numeric predictor detected -> Running Simple Linear Regression
#>
#> -- statease Simple Linear Regression Report ---------------------
#> Outcome : exam_score
#> Predictor : pre_test
#> N : 90
#> -----------------------------------------------------------------
#> Model Equation:
#> exam_score = 72.369 + -0.005 * pre_test
#> -----------------------------------------------------------------
#> Coefficients:
#> Intercept : 72.369
#> Slope : -0.005 (SE = 0.137)
#> t-statistic : -0.035
#> p-value : 0.9720
#> 95% CI : [-0.278, 0.268]
#> -----------------------------------------------------------------
#> Model Fit:
#> R-squared : 0.0000
#> Adj R-squared: -0.0113
#> F-statistic : 0.001 (df = 1, 88) p = 0.9720
#> -----------------------------------------------------------------
#> Interpretation:
#> The predictor pre_test is not statistically significant (p = 0.9720 > alpha 0.05).
#> The slope is negative - as pre_test increases by 1 unit, exam_score decreases by 0.005 units.
#> R-squared = 0.0000: pre_test explains 0.0% of the
#> variance in exam_score (negligible effect).
#>
#> WARNING: Residuals may not be normally distributed (Shapiro-Wilk p = 0.0056).
#> -----------------------------------------------------------------# Auto MANOVA
analyze(
formula = cbind(exam_score, pre_test) ~ method,
data = tutorial_data
)
#> [statease] Multiple outcomes detected -> Running MANOVA
#>
#> -- statease MANOVA Report ----------------------------------------
#> Outcomes : exam_score, pre_test
#> Group : method (3 levels)
#> N : 90
#> -----------------------------------------------------------------
#> Group Means:
#>
#> exam_score:
#> Hybrid : 79.90
#> Online : 70.77
#> Traditional : 65.63
#>
#> pre_test:
#> Hybrid : 56.87
#> Online : 55.37
#> Traditional : 54.77
#> -----------------------------------------------------------------
#> Multivariate Test Results:
#> Pillai's Trace : 0.2565
#> Wilks' Lambda : 0.7435
#> F-statistic : 6.400 (df = 4, 174)
#> p-value : 0.0001
#> Effect size : small (Pillai = 0.2565)
#> -----------------------------------------------------------------
#> Interpretation:
#> The overall MANOVA result is statistically significant (p = 0.0001 < alpha 0.05).
#> Pillai's Trace = 0.2565 indicates a small effect.
#> -----------------------------------------------------------------
#> Follow-Up Univariate ANOVAs:
#>
#> exam_score
#> F = 14.267 (df = 2, 87) p = 0.0000 [significant]
#>
#> pre_test
#> F = 0.403 (df = 2, 87) p = 0.6695 [not significant]
#>
#> Note: Follow-up ANOVAs identify which outcomes
#> differ significantly across groups.
#>
#> WARNING: 'exam_score' may not be normally distributed (Shapiro-Wilk p = 0.0054).
#> -----------------------------------------------------------------| Test | Function | analyze() support |
|---|---|---|
| Descriptive stats | describe() |
✔ |
| Independent t-test | ttest_interpret() |
✔ |
| One-sample t-test | ttest_interpret() |
✔ |
| Paired t-test | ttest_interpret() |
✔ |
| One-way ANOVA | anova_interpret() |
✔ |
| Two-way ANOVA | anova2_interpret() |
✔ |
| MANOVA | manova_interpret() |
✔ |
| Chi-square | chisq_interpret() |
✔ |
| Correlation | cor_interpret() |
✔ |
| Simple regression | reg_interpret() |
✔ |
| Multiple regression | mlr_interpret() |
✔ |
| Logistic regression | logistic_interpret() |
✔ |
| Mann-Whitney U | mannwhitney_interpret() |
✔ |
| Wilcoxon Signed Rank | wilcoxon_interpret() |
✔ |
| Kruskal-Wallis | kruskal_interpret() |
✔ |
| P-value interpretation | interpret_p() |
- |
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.