0

我有以下数据集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。谁能帮我找出问题所在?

4

3 回答 3

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
于 2011-04-05T19:28:58.523 回答
3

您的代码以各种方式被冲洗。这里有几个:

  1. myfactor在循环之外创建,然后将其设为迭代器。
  2. dataset1是你的数据(data.frame?)。我什至不确定myfactorfor (myfactor in dataset1).
  3. 您不会将发送到的数据子集化shapiro.test
  4. myvars没有定义,dataset1$Size应该是dataset1$Height.

试试这个。

res <- list()
for (mf in levels(dataset1$Group)) {
    res[[mf]] <- shapiro.test(dataset1$Height[dataset1$Group == mf])
}
于 2011-04-05T19:29:20.427 回答
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:sex = GROUP 在前面的例子中
再次感谢
希望这段代码有助于减少代码 M。

于 2011-05-27T00:09:15.653 回答