Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何同时测试R中多个变量的正态性?_R_Normal Distribution - Fatal编程技术网

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

如何同时测试R中多个变量的正态性?,r,normal-distribution,R,Normal Distribution,我有一个由20个观测值和35个变量组成的数据框架 一个变量的正态性测试将为 shapiro.test(mydata$var1) 我想同时测试所有变量的正态性。如何在R中执行此操作?这在很大程度上取决于您正在寻找的输出类型以及您希望如何控制familywise错误率。这里有一个使用Bonferroni校正的解决方案 # example data t <- as.data.frame(matrix(rnorm(700), 20,35)) shapiro_test_df <- func

我有一个由20个观测值和35个变量组成的数据框架

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

shapiro.test(mydata$var1)

我想同时测试所有变量的正态性。如何在R中执行此操作?

这在很大程度上取决于您正在寻找的输出类型以及您希望如何控制familywise错误率。这里有一个使用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)
#示例数据

t
sapply(mydata,shapiro.test)
您希望它如何输出?@jeremycg您的解决方案无法控制家庭错误率,这可能非常重要here@Carl我希望以dataframeRight的形式输出,但是您希望每个测试都有一个新的列,或者每个测试都有一个新行。您是否可以编辑您的问题以给出所需输出的结构?是否可以在循环中添加ifelse以记录非正态分布的转换变量