簡體   English   中英

對 dataframe 執行逐行 t.test,不同觀測值的重復次數不相等

[英]Performing rowwise t.test on a dataframe with unequal replicates for different observations

例如,我有一個 dataframe 有 11 列(附上示例截圖)。 第一列列出了所有基因,接下來的十列是對照(C1-C5)和處理(T1-T5)樣本的測量值。 測量未配對。
我想執行逐行 t.test 並為每個基因添加一個 p 值列作為 dataframe 的最后一列。 但是,正如您在我的數據中看到的那樣,由於實驗的執行方式,我沒有對每個基因的所有重復(在控制和處理條件下)進行所有測量。 所以我在很多行中有幾個 NA 值。
如何在此 dataframe 中執行 rowwise t.test 而不會因為 NA 值而失敗? 謝謝!

示例數據

據我所知, t.test 不適用於NA's 因此,如果我們執行以下操作:

Input = ("GeneID  C1  C2  C3  C4  C5  T1  T2  T3  T4  T5
          Gene1    5  1   7   9   2   7   5   4   4   3  
          Gene2    3  6   5   NA  NA  5   1   3   NA  NA
          Gene3    2  3   NA  NA  NA  NA  1   6   NA  NA
          Gene4    3  4   5   6   NA  3   4   5   NA  NA")

df = as.data.frame(read.table(textConnection(Input), header = T, row.names = 1))
df$pval <- apply(df,1,function(x) {t.test(x[2:6],x[7:11])$p.value})

這將導致錯誤,例如肯定not enough 'x' observations 有兩種選擇,您可以忽略NA's ,因此對於Gene2 ,我們將有C1,C2,C3 vs T1,T2,T3因為我們只有這些觀察結果。 其次,我們可以執行非參數測試,它的功率較小但更“靈活”。 T.test 很好,但必須滿足很多假設。 樣本的數量應該相當大並且相等 C vs T。更重要的是,這些組應該具有正態分布,至少它們之間是相似的,這也是指方差......否則你的測試會被扭曲。 我會推薦這樣的東西:

df$pval <- apply(df,1,function(x) {wilcox.test(x[2:6],x[7:11])$p.value})

      C1 C2 C3 C4 C5 T1 T2 T3 T4 T5      pval
Gene1  5  1  7  9  2  7  5  4  4  3 0.7109920
Gene2  3  6  5 NA NA  5  1  3 NA NA 0.1386406
Gene3  2  3 NA NA NA NA  1  6 NA NA 1.0000000
Gene4  3  4  5  6 NA  3  4  5 NA NA 1.0000000

在這里查看並檢查符合您數據特征的wilcox.test()的可用 arguments。 不過請記住,如果測量次數減少,那么測試的准確性和威力會更差。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM