我有以下数据:
Height | Group
1,556 | A
2,111 | B
1,556 | A
2,341 | B
1,256 | A
2,411 | B
我想通过变量Group计算身高的shapiro wilk正态性检验
myvar <- c("Height")
res<- vector("list", length(myvars))
a <- factor(dataset1$Group)
myfactor <- levels(a)
i=1
for (myfactor in dataset1) {
res[[i]] <- shapiro.test(dataset1$Size)
i=i+1
}
res -返回n组测试,但都具有相同的p值和W。有人能帮我弄清楚是怎么回事吗?
编写新代码比找出代码中的所有错误更容易。
lapply(split(dataset1$Height,dataset1$Group),shapiro.test)
$` A`
Shapiro-Wilk normality test
data: X[[1L]]
W = 0.75, p-value = 3.031e-08
$` B`
Shapiro-Wilk normality test
data: X[[2L]]
W = 0.9134, p-value = 0.4295
您的代码被各种方式冲洗。以下是一些:
- 在循环之外创建
myfactor
,但随后将其作为迭代器。 -
dataset1
是您的数据(data.frame?)我甚至不确定myfactor
将在for (myfactor in dataset1)
创建的循环中。 - 您没有将发送到
shapiro.test
的数据子集。 -
myvars
没有定义,dataset1$Size
应该是dataset1$Height
。
试试这个
res <- list()
for (mf in levels(dataset1$Group)) {
res[[mf]] <- shapiro.test(dataset1$Height[dataset1$Group == mf])
}
感谢您的回复。
今后通知:
如果您希望计算(对于数据集中选定的变量)按因子的正态性检验:
variaveis <- colnames(dataset1)[c(1:2)]
/////alternative: variaveis <- c("height", "weight")
res<- vector("list", length(variaveis))
for (i in 1:length(variaveis)) {
#calcula o shapiro por factor para variaveis selecionadas
res[[i]] <- lapply(split(dataset1[,variaveis[i]] ,dataset1$sex), shapiro.test)
}
res
PS: sex = GROUP在前面的例子中
再次谢谢
希望这段代码有助于减少代码m .