同时对R中的所有变量(包括子集)执行正态性检验(Lilliefors)

问题描述 投票:0回答:1

我已经为Lilliefors测试安装了nortest软件包,但是由于lillie.test(x)只允许我一次测试一个变量,因此我必须手动执行100个测试,因为我的数据集包含许多子组和变量。

是否可以在R上应用通用代码,以同时在所有单个变量/子组(例如maindata$variable1, subset1$variable1, subset2$variable1, subset2$variable2, subset3$variable1, subset3$variable2等)上运行此测试并生成列表?

提前感谢:)


编辑-样本数据集

      EyeColour      HairColour     Weight       Height    Gender
1          Brown        Black          1.4         0.2      M
2          Brown        Blond          1.4         0.2      F
3          Blue         Black          1.3         0.2      M
4          Brown        Blond          1.5         0.2      F
5          Blue         Black          1.4         0.2      M
6          Blue         Blond          1.7         0.4      F
900        ...          ...             ...          ...    ...

本质上,如果我想通过Lilliefors评估BrownEyes + BlackHair,BlueEyes + BlackHair,然后还有BrownEyes + BlackHair + Male,BrownEyes + BlackHair + Female等身高的正常性,则…

我可以手动执行此操作,但是我有大约40个数字变量,想知道是否有比手动手动操作更简单的方法。

我打算针对所有这些变量组合生成lillie.test(x)的自动重复,并得到如下所示:

 HEIGHT                          P-VALUE
BlueEyes+BlackHair              0.11212
BlueEyes+BlackHair              0.40001
BrownEyes+BlackHair+Male         0.532
BrownEyes+BlackHair+Female       0.7674
r statistics bioinformatics biometrics
1个回答
0
投票

提供可复制的数据时,响应更加容易。不难弥补:

set.seed(42)
EyeColour <- sample(c("Blue", "Brown", "Green"), 500, replace=TRUE)
HairColour <- sample(c("Black", "Blond", "Red"), 500, replace=TRUE)
Weight <- rnorm(500, 1.5, .15)
Height <- rnorm(500, .3, .05)
Gender <- sample(c("F", "M"), 500, replace=TRUE)
dfm <- data.frame(EyeColour, HairColour, Weight, Height, Gender)

现在我们只使用splitlapply

dfm.split <-split(dfm, dfm[, c("EyeColour", "HairColour", "Gender")])
library(nortest)
wgt.norm <- lapply(dfm.split, function(x) lillie.test(x$Weight))
hgt.norm <- lapply(dfm.split, function(x) lillie.test(x$Height))

结果将作为所有组合的列表返回。如果某些组的观察值少于5个(测试所需的最小值),则事情会变得更加复杂:

wgt.norm[1]
# $Blue.Black.F
# 
#   Lilliefors (Kolmogorov-Smirnov) normality test
# 
# data:  x$Weight
# D = 0.11064, p-value = 0.4328
hgt.norm[1]
# $Blue.Black.F
# 
#   Lilliefors (Kolmogorov-Smirnov) normality test
# 
# data:  x$Height
# D = 0.11593, p-value = 0.3586

您将需要阅读splitlapply以及如何使用lists,但是它们是为解决您正在解决的问题而设计的。

© www.soinside.com 2019 - 2024. All rights reserved.