r - 在数据框中的多列上使用shapiro.test

标签 r function statistics dataframe

我有一个数据框(我们称之为df),包含n = 100列(C1C2,...,C100)和50行(R1R2,...,R50)。我测试了数据框中的所有列,以确保它们是数字。我想知道使用shapiro.test()函数每列中的数据是否具有正态分布。
我可以使用代码逐列完成此操作:

> shapiro.test(df$Cn)
或者
> shapiro.test(df[,c(Cn)])
但是,当我尝试同时在几列上执行此操作时,它不起作用:
> shapiro.test(df[,c(C1:C100)])
返回错误:

Error in [.data.frame(x, complete.cases(x)) : undefined columns selected


如果有人可以建议一种可以同时进行所有测试并将最终结果存储在新的dataframe/matrix/list/vector中的方法,我将不胜感激。

最佳答案

我并不是说这是一种明智的数据分析方法,但是将功能应用于数据框的列的潜在问题是一个通用任务,可以使用sapply()lapply()(甚至apply())之一轻松实现,但是对于数据帧,最好是前面提到的两个功能之一)。

这是一个使用一些伪数据的示例:

set.seed(42)
df <- data.frame(Gaussian = rnorm(50), Poisson = rpois(50, 2), 
                 Uniform = runif(50))

现在应用shapiro.test()函数。我们将输出捕获到一个列表中(给定此函数返回的对象),因此我们将使用lapply()
lshap <- lapply(df, shapiro.test)
lshap[[1]] ## look at the first column results

R> lshap[[1]]

    Shapiro-Wilk normality test

data:  X[[1L]]
W = 0.9802, p-value = 0.5611

您将需要从这些对象中提取所需的东西,这些对象都具有以下结构:
R> str(lshap[[1]])
List of 4
 $ statistic: Named num 0.98
  ..- attr(*, "names")= chr "W"
 $ p.value  : num 0.561
 $ method   : chr "Shapiro-Wilk normality test"
 $ data.name: chr "X[[1L]]"
 - attr(*, "class")= chr "htest"

如果您希望此对象的statisticp.value组件用于lshap的所有元素,我们这次将使用sapply()来为我们很好地安排结果:
lres <- sapply(lshap, `[`, c("statistic","p.value"))

R> lres
          Gaussian Poisson Uniform 
statistic 0.9802   0.9371  0.918   
p.value   0.5611   0.01034 0.001998

鉴于您有500个,我将转置lres:
R> t(lres)
         statistic p.value 
Gaussian 0.9802    0.5611  
Poisson  0.9371    0.01034 
Uniform  0.918     0.001998

如果您打算通过本练习对p值做任何事情,建议您在使用30卡路里的脚射击之前,先考虑如何校正多个比较。

关于r - 在数据框中的多列上使用shapiro.test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21239826/

相关文章:

r - 来自 R 中 Erlang 分布的样本

r - 计算数据框中每个个体变量的变化次数

r - 如何绘制两个ggplot密度分布之间的差异?

R 惰性求值悖论(R bug?)

r - 如何按组对变量求和 NA?

r - 如何解释 R 中倾向匹配(matchIT)的输出

r - 将 RGB 图像转换为 R EBImage 中的单 channel 灰度图像

javascript - JavaScript : SyntaxError: missing '}' after argument list

ios - 如何捕获 func LocationManager 的 GPS 数据?

javascript - 多个 JavaScript 函数无法正常工作