2015-02-04 21 views
0

我有大約17000行的文件,我預製上識別所有的異常值從迴歸分析

Gene_id expA expB 
    GeneA 5.462109 5.006181 
    GeneB 2.667692 4.208152 
    GeneC 4.796976 4.122660 
    GeneD 3.127125 3.676322 
    GeneE 4.500583 4.104575 
    GeneF 4.598430 4.853717 

一個簡單的線性迴歸和我預製利用迴歸分析

plot(log2(data$expA)~log2(data$expB)) 
regression <- lm(log2(moved.data$expA)~log2(moved.data$expB)) 
abline(regression) 

我感興趣我的迴歸分析發現哪些基因異常。

我試過使用identify(log2(data$expA)~log2(data$expB), row.names(data))函數,但我在圖中有很多點,所以要逐個點擊它們對我來說似乎不可行。

我也看了這裏: Outliers with robust regression in R

,但並沒有告訴我如何找出異常

+1

你是如何界定「異常」?沒有普遍接受的統計定義。 – MrFlick

+0

不應該是顯着偏離線性迴歸線的東西,它不適合「線性模型」井 – user3816990

回答

0

你不是在殘差真正感興趣的基因名稱(多少結果對於每個基因都不同於迴歸)?殘差告訴你數據與你的模型密切相關。在這種情況下,你有一個簡單的線性模型。有很多大的殘差會表明你需要一個更好的模型。

如果可能,我絕不會刪除異常值。如果你確實刪除了它們,請誠實地報告它們已被刪除,並將其刪除。要完全誠實和透明,請提供您的數據和R腳本。

總之,保持我剛纔記說,這裏是一個方法命名「異常值」:

# Create sample data 
Gene_id <- c("GeneA", "GeneB", "GeneC", "GeneD", "GeneE", "GeneF") 
expA <- c(5.462109, 2.667692, 4.796976, 3.127125, 4.500583, 4.598430) 
expB <- c(5.006181, 4.208152, 4.122660, 3.676322, 4.104575, 4.853717) 

# Calculate log base two for results from each experiment 
log2_A <- log2(expA) 
log2_B <- log2(expB) 

# Plot data 
plot(log2_A~log2_B) 

# Calculate and display the regression line 
regression <- lm(log2_A~log2_B) 
abline(regression) 

# Show regression formula 
print(regression) 

# Create data frame for sample data 
data <- data.frame(Gene_id, expA, expB) 

# Calculate residuals 
data$residuals <- residuals(regression) 

# Choose a threshhold 
outlier_threshold <- 0.3 

# Print only names of outliers 
outliers <- data[ abs(data$residuals) > outlier_threshold, ] 
print(outliers$Gene_id) 
+0

是的,你是對的,殘差。我不打算刪除它們,我想進一步檢查它們。你是怎麼知道選擇哪個閾值的。是0.3常規?就像經常使用0.05的pvalue一樣? – user3816990

+0

@ user3816990這是任意的,與p值無關。這是一個導致六個樣本數據點中的兩個被視爲離羣值的值。 –

+0

我想你可以做一個殘差的直方圖,並得到什麼選擇閾值的感覺,即使它是任意的權利? – user3816990