我有以下数据集1:
Height | Group
1,556 | A
2,111 | B
1,556 | A
2,341 | B
1,256 | A
2,411 | B
我想通过变量组
计算高度的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. 谁能帮我弄清楚什么是错的?
答案 0 :(得分:3)
编写新代码比查找代码中的所有错误更容易。
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
答案 1 :(得分:3)
你的代码是各种各样的方式。以下是一些:
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])
}
答案 2 :(得分:1)
感谢您的回复
以后通知:
如果您希望通过因子计算(对于数据集中的选定变量)正态性测试:
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:性别=前一个例子中的GROUP
再次谢谢你
希望此代码有助于减少代码
微米。