我有一个微阵列数据集,我在其上进行了limma
lmFit()
测试。如果您之前没有听说过,它是一个强大的线性模型包,可测试> 20k基因的差异基因表达。您可以从模型中提取每个基因的斜率和截距。
我的问题是:给出一个斜率和截距值表,如何匹配一个情节(我不介意ggplot2
的{{1}},geom_abline
lattice
,或必要时的替代方案)及其相应的斜率和截距?
我的表(称之为“slopeInt”)截取为第1列,斜率为第2列,并且具有与基因名称对应的行名称。他们的名字是这样的:
panel.abline
这些名称与另一个表(“数据”)中的基因名称相匹配,其中包含有关我的样本的一些详细信息(我有24个具有不同ID和时间/治疗组合的样本)和基因表达值。
它是长格式的基因名称(如上所示)每24行重复一次(同一基因的不同表达水平,我的每个样本):
"202586_at" "202769_at" "203201_at" "214970_s_at" "219155_at"
我有八个基因我有兴趣绘制,我ID Time Treatment Gene_name Gene_exp
... ... ... ... ...
中的名称与我Data$Gene_name
表的行名相匹配。我也可以将两个表合并在一起,这不是问题。但我尝试了以下两种方法,通过适当的回归为我的每个基因提供图表,但无济于事:
使用slopeInt
:
ggplot2
还使用ggplot(Data, aes(x = Time, y = Gene_exp, group = Time, color = Treatment)) +
facet_wrap(~ Gene_name, scales = "free_x") +
geom_point() +
geom_abline(intercept = Intercept, slope = Time), data = slopeInt) +
theme(panel.grid.major.y = element_blank())`
:
Lattice
我在实际的xyplot(Gene_exp ~ Time| Gene_name, Data,
jitter.data = T,
panel = function(...){
panel.xyplot(...)
panel.abline(a = slopeInt[,1], b = slopeInt[,2])},
layout = c(4, 2))
和geom_abline()
参数中尝试了多种其他方法,包括一些for循环,但我没有R经验,我无法让它工作..我也可以拥有宽格式的数据文件(每个基因的单独列)。
任何帮助和进一步的指示将不胜感激!!!
以下是可重现示例的一些代码:
panel.abline()
答案 0 :(得分:3)
使用格子,这应该有效
xyplot(Gene_exp ~ Time| Gene_name, Data, slopeInt=slopeInt,
jitter.data = T,
panel = function(..., slopeInt){
panel.xyplot(...)
grp <- trellis.last.object()$condlevels[[1]][which.packet()]
panel.abline(a = slopeInt[grp,1], b = slopeInt[grp,2])
},
layout = c(4, 2)
)
在生成样本数据之前使用set.seed(15)
得到以下图
&#34;技巧&#34;这里是使用trellis.last.object()$condlevels
来确定我们当前所处的条件块。然后我们使用该信息从我们现在通过参数传入的其他数据中提取正确的斜率信息。我认为有一种更优雅的方法来确定条件变量的当前值,但是如果有的话我现在还记不起来了。
答案 1 :(得分:1)
如果您将Gene_name
指定为slopeInt
中的列,那么它可以正常工作[我理解您希望它]。另请注意ggplot调用的其他一些更改。
slopeInt$Gene_name <- rownames(slopeInt)
ggplot(Data, aes(x = Time, y = Gene_exp, color = Treatment)) +
facet_wrap(~ Gene_name, scales = "free_x") +
geom_point() +
geom_abline(aes(intercept = Intercept, slope = Slope), data = slopeInt) +
theme(panel.grid.major.y = element_blank())