r - edgeR:设计矩阵未满秩
问题描述
我正在分析具有四个时间点和两个处理的 RNA seq 数据。在多个时间点测量样品并始终得到相同的处理。我想做一个配对模型。以下代码总是给我一个错误说明,即设计矩阵不是满秩的。为什么这个设计矩阵不是满秩的?
|--------|-----------|------------|
| sample | treatment | time_point |
|--------|-----------|------------|
| 1 | a | 1 |
| 1 | a | 2 |
| 1 | a | 3 |
| 1 | a | 4 |
| 2 | b | 1 |
| 2 | b | 2 |
| 2 | b | 3 |
| 2 | b | 4 |
| ... | ... | ... |
|--------|-----------|------------|
merged_vars <- factor(paste(treatment, time_point, sep="."))
design <- stats::model.matrix(~sample+merged_vars)
y <- edgeR::estimateDisp(y, design = design)
解决方案
当您的一个预测变量可以表示为另一个的线性组合时,就会出现错误。
在您的示例中,如果您查看 model.matrix,则 b.1 + b.2 + b.3 + b.4 会给您示例 2 的效果:
df = data.frame(sample=rep(1:2,each=4),
treatment=rep(letters[1:2],each=4),time_point=rep(1:4,2))
df$merged_vars= with(df,factor(paste(treatment, time_point, sep=".")))
model.matrix(~sample +merged_vars,data=df)
(Intercept) sample merged_varsa.2 merged_varsa.3 merged_varsa.4
1 1 1 0 0 0
2 1 1 1 0 0
3 1 1 0 1 0
4 1 1 0 0 1
5 1 2 0 0 0
6 1 2 0 0 0
7 1 2 0 0 0
8 1 2 0 0 0
merged_varsb.1 merged_varsb.2 merged_varsb.3 merged_varsb.4
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
5 1 0 0 0
6 0 1 0 0
7 0 0 1 0
8 0 0 0 1
此外,如果您这样做merged_vars <- factor(paste(treatment, time_point, sep="."))
,则每个级别有 1 个观察值,这意味着没有重复,您不能对它进行 egdeR。
我建议这样做,因为它看起来像样本和治疗混淆:
design <- stats::model.matrix(~treatment*time_point)
推荐阅读
- python - 如何使用 python 在 Dash 中防止此错误 net::ERR_CONNECTION_TIMED_OUT
- python - 如何将 tkinter 列表框选择的索引返回到调用绑定的函数?
- javascript - 按照传单弹出窗口内的链接
- c++ - C++ 函数的返回值
- php - 代客,重新启动 Big Sur 后的 Xdebug 无法正常工作
- tensorflow - 在 tensorflow 图模式下不断回溯
- sql - ORACLE json_object_t - 在方法链获取的对象上调用 get_string() 方法时出错 .get_array() .get()
- javascript - 从指标图表中获取点击事件数据
- javascript - 在树莓派上找不到电子相机
- maven - Maven:properties-maven-plugin 不在 IntelliJ 构建中生成属性文件