如何同时测试R中多个变量的正态性?
How to test the normality of many variables in R at the same time?
我有一个包含 20 个观测值和 35 个变量的数据框。
一个变量的正态性检验将是
shapiro.test(mydata$var1)
我想同时检验所有变量的正态性。我如何在 R 中执行此操作?
这在很大程度上取决于您正在寻找什么样的输出以及您希望如何控制全族错误率。这是使用 Bonferroni 校正的一种解决方案
# example data
t <- as.data.frame(matrix(rnorm(700), 20,35))
shapiro_test_df <- function(df, bonf= TRUE, alpha= 0.05) {
l <- lapply(df, shapiro.test)
s <- do.call("c", lapply(l, "[[", 1))
p <- do.call("c", lapply(l, "[[", 2))
if (bonf == TRUE) {
sig <- ifelse(p > alpha / length(l), "H0", "Ha")
} else {
sig <- ifelse(p > alpha, "H0", "Ha")
}
return(list(statistic= s,
p.value= p,
significance= sig,
method= ifelse(bonf == TRUE, "Shapiro-Wilks test with Bonferroni Correction",
"Shapiro-Wilks test without Bonferroni Correction")))
}
shapiro_test_df(t)
我有一个包含 20 个观测值和 35 个变量的数据框。
一个变量的正态性检验将是
shapiro.test(mydata$var1)
我想同时检验所有变量的正态性。我如何在 R 中执行此操作?
这在很大程度上取决于您正在寻找什么样的输出以及您希望如何控制全族错误率。这是使用 Bonferroni 校正的一种解决方案
# example data
t <- as.data.frame(matrix(rnorm(700), 20,35))
shapiro_test_df <- function(df, bonf= TRUE, alpha= 0.05) {
l <- lapply(df, shapiro.test)
s <- do.call("c", lapply(l, "[[", 1))
p <- do.call("c", lapply(l, "[[", 2))
if (bonf == TRUE) {
sig <- ifelse(p > alpha / length(l), "H0", "Ha")
} else {
sig <- ifelse(p > alpha, "H0", "Ha")
}
return(list(statistic= s,
p.value= p,
significance= sig,
method= ifelse(bonf == TRUE, "Shapiro-Wilks test with Bonferroni Correction",
"Shapiro-Wilks test without Bonferroni Correction")))
}
shapiro_test_df(t)