1

私はRを初めて使用し、シャピロ-ウィルク検定を使用して一連のデータの正常性をテストしています。私の問題は、テストを使用することではなく、p値が0.05より大きい結果の行を識別するための結果テーブルを生成することです。私の質問を説明するために、「ALL」および「AML」患者からの一連の遺伝子発現値を提供するgolubデータセットを使用しています。

私がしたことは次のとおりです。

library (multtest)
data (golub)
gol.fac <- factor(golub.cl,levels=0:1, labels= c("ALL","AML"))

# the golub dataset has the expression values for 3051 genes so I've decided to use only the first 10 genes from the dataset to make it easier to work with
ALL10 <- golub[1:10, gol.fac=="ALL"]

# calculate Shapiro-Wilk test for normality
sh10 <- apply (ALL10, 1, function(x) shapiro.test(x)$p.value)

# get the names of the first 10 genes from the golub.gnames matrix
ALL10names <- golub.gnames[1:10,2]

# combine gene names with normality p-value scores 
list10 <- cbind(ALL10names,sh10)

# find those that have normal distribution
normdist<- list10[,2]>0.05

# print a list of those with normal distribution
list10[which(normdist),]

私が得る結果は次のとおりです。

              ALL10names                                sh10                  
[1,] "AFFX-HUMISGF3A/M97935_MA_at (endogenous control)" "2.97359627770755e-07"
[2,] "AFFX-HUMISGF3A/M97935_3_at (endogenous control)"  "0.299103621399385"   
[3,] "AFFX-HUMGAPDH/M33197_5_at (endogenous control)"   "6.60564216346286e-07"
[4,] "AFFX-HUMGAPDH/M33197_M_at (endogenous control)"   "6.81945800629973e-07"
[5,] "AFFX-HSAC07/X00351_5_at (endogenous control)"     "3.3088559810058e-06" 
[6,] "AFFX-HSAC07/X00351_M_at (endogenous control)"     "1.30227973255158e-08"

ご覧のとおり、これは間違っています。実際には<0.05である値がいくつかあり、実際には> 0.05である値が1つだけあります(これが私が望むものです)

私が行った場合:

which(normdist)
[1]  1  3  7  8  9 10

しかし

which (sh10 > 0.05)
[1] 3

明らかにエラーはで発生しました

normdist<- list10[,2]>0.05

私の質問は、なぜこれが起こったのかということです。list10の列2の値が0.05を超えるものがすべて必要です...正しく見えますが、間違った結果が得られます。私が言ったように、私はRを学んでいるので、何が悪かったのかを理解したいので、間違いを繰り返さないようにします。前もって感謝します!

4

1 に答える 1

5

あなたの問題はcbind(ALL10names,sh10)、マトリックスを作成し、すべてを文字に強制することです。

代わりに を作成しますdata.frame(列は異なるタイプを持つことができます)

list10 <- data.frame(ALL10names,sh10)

そして、すべてがあなたが望むように機能します

于 2012-10-03T03:46:58.317 に答える