【发布时间】:2023-03-25 07:28:02
【问题描述】:
我有一个像这样的线性回归:
lmGeneexp = lm(gene_expression ~ (pos1 + pos2 + pos3), data = donor_snp_sample)
summary(lmGeneexp)
当我运行这段代码时,结果如下:
Coefficients: (2 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.708 64.905 0.088 0.930
pos11 -25.853 436.678 -0.059 0.953
pos12 -48.653 443.310 -0.110 0.913
pos21 25.960 416.159 0.062 0.950
pos22 NA NA NA NA
pos31 24.269 117.284 0.207 0.836
pos32 NA NA NA NA
我不明白为什么每个“pos#”都有两个系数,例如对于变量“pos1”,结果中有“pos11”和“pos12”。代码或我的数据有什么问题?
非常感谢
+++ 这是我的数据示例:
pos1 pos2 pos3 gene_expression
row1 0 0 1 7.4
row2 0 0 2 8.5
row3 0 0 1 6.3
row4 1 0 2 3.5
row5 2 0 0 2.1
row6 1 0 0 7.4
...
【问题讨论】:
-
你能举一个你的数据的例子吗?
-
特别是我们需要知道
pos1、pos2、pos3变量的级别(根据您的输出是因素)。levels()或table()对于这些变量中的每一个都会有所帮助。很有可能您的数据中有空白或类似内容,这会导致 (1) 数据被作为因子而不是数字导入,(2) 因子中的额外水平会导致回归失败。 -
@lil_barnacle 我将我的数据示例添加到问题中
-
正如@BenBolker 提到的,
post1、post2和post3有 3 个级别(0、1 和 2)。如果您只希望回归中的每个预测变量有 1 个系数,您可以使用as.numeric()将它们转换为数值或删除 1 个级别(例如,将 0 指定为 NA)。
标签: r linear-regression