0

私は次のdataset1を持っています:

Height | Group
1,556  |  A
2,111  |  B
1,556  |  A
2,341  |  B
1,256  |  A
2,411  |  B

変数グループごとに高さのシャピロウィルク正規性検定を計算したいと思います

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?)。myfactorによって作成されたループ内に何が入るかさえわかりませんfor (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 に答える