我有一个大约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))
函数,但我的图中有很多点,所以逐个点击它们对我来说似乎不可行
我还看了看:R 中具有稳健回归的异常值
但这并不能告诉我如何计算异常值的基因名称
你真的对残差不感兴趣吗(每个基因的结果与回归的差异有多大)?残差告诉你你的数据与你的模型有多接近。在这种情况下,您有一个简单的线性模型。有许多大的残差表明你需要一个更好的模型。
如果可能的话,我永远不会删除异常值。如果你确实删除了它们,请诚实地报告它们已被删除以及删除的标准。为了完全诚实和透明,请提供您的数据和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)