0

このデータ フレームには、4 つの遺伝子と 3 つのサンプルが重複して測定されています。TSが標準です。

各タンパク質の TS を含むサンプル S1 と TS を含む S2 の間で wilcox 検定を実行したいのですが、for サイクルに問題があります。

    MS.rawMV <- read.table("C:/Users/aaa/Desktop/genomic/MS.csv", header=T)
         S1_1     S1_2    S2_1    S2_2     TS_1     TS_2
gene 1    1         1      2        3       5         5 
gene 2    10        10     4        5       9         10   
gene 3    5         6      4        4       5         7
gene 4    9         9      8        7       6         6     


 Samples=list(
  S1=grep("S1_*", colnames(MS.rawMV), value=TRUE),
  S2=grep("S2_*", colnames(MS.rawMV), value=TRUE),
  TS=grep("TS_*", colnames(MS.rawMV), value=TRUE))

sample.names <- names(Samples)
ref.sample <- "TS_"

# Build a data.frame 
GRates <- data.frame(MS.rawMV[Reduce("c", Samples)])

## Statistics: non parametric test using TS as a standart 
for (i in names(Samples)) {
  WILCOXTEST <- wilcox.test(GRates[c(Samples[[i]])],Samples[[ref.sample]])
  pnames <- paste(i,".wilcoxtest",sep="")
  GRates[pnames] <- WILCOXTEST["p.value"]
}

Error in wilcox.test.default(GRates[Samples[[i]]], Samples[[ref.sample[i]]]) : 
  'x' must be numeric
4

3 に答える 3

1

@DWinのコメントはよく理解されています(Wilcoxonテストに組み込むのが難しいデータに追加の構造があります)。ただし、_1 列と _2 列の違いを無視して、S1 対 TS および S2 対 TS で Wilcoxon 検定を実行する場合は、データを並べ替えて実行する方法を次に示します。

dat <- read.table(text="
gene S1_1 S1_2    S2_1    S2_2     TS_1     TS_2
1      1    1      2        3       5         5 
2     10   10      4        5       9         10   
3      5    6      4        4       5         7
4      9    9      8        7       6         6",
                  header=TRUE)

library(reshape2)
library(plyr)
m1 <- melt(dat,id.var="gene")
## break var_num into separate components
m2 <- subset(data.frame(m1,
             colsplit(m1$variable,"_",names=c("var","num"))),
             select=-variable)
## combine treatments with standards
m3 <- merge(subset(m2,var!="TS"),
      subset(m2,var=="TS"),by=c("gene","num"))
## clean up
m4 <- subset(rename(m3,c(value.x="value",var.x="var",value.y="standard")),
             select=-var.y)

## apply Wilcoxon test to each component, save the p value
ddply(m4,"var",
      function(x) with(x,wilcox.test(value,standard))$p.value)

または、各レプリケーションを個別にテストする場合 (@agstudy の回答のように)、次のようにします。

ddply(m4,c("var","num"),
      function(x) with(x,wilcox.test(value,standard))$p.value)

代わりは。

于 2013-03-25T17:53:34.630 に答える
1

データが要因として扱われているようです。

最も簡単な修正は、factor->character->numeric を介して数値に戻すことです。

これを試して

wilcox.test(
    as.numeric(as.character(GRates[c(Samples[[i]])])),
    as.numeric(as.character(Samples[[ref.sample]]))
)

factor から直接数値に変換しようとすると、実際の値ではなく、因子クラスを表す整数になってしまいます。

于 2013-03-25T17:43:10.240 に答える
0

wilcox.testはベクトル化されていないため、2 つのループが必要だと思い ます。私でさえ、これの統計的意味についてはわかりません。ここでどのように行うことができますか:

nn <- colnames(dat)
lapply(1:2,function(x){ 
  col.L <- grep(paste0('S',x,'_*'),nn)
  col.R <- dat[,paste0('TS_',x)]
  lapply(col.L,function(y) 
      wilcox.test(dat[,y],col.R)['p.value'])
})

ここで私dat

dat <- read.table(text='S1_1     S1_2    S2_1    S2_2     TS_1     TS_2
gene_1    1         1      2        3       5         5 
gene_2    10        10     4        5       9         10   
gene_3    5         6      4        4       5         7
gene_4    9         9      8        7       6         6',header=TRUE) 
于 2013-03-25T18:04:44.290 に答える