如何同时测试R中许多变量的正态性?

时间:2015-11-03 00:12:25

标签: r normal-distribution

我的数据框由20个观察值和35个变量组成。

一个变量的正态性测试将是

shapiro.test(mydata$var1)

我想同时测试所有变量的正常性。我怎么能在R?中做到这一点?

1 个答案:

答案 0 :(得分:3)

这很大程度上取决于您要查找的输出类型以及您希望如何控制系列错误率。这是使用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)