线性回归中给出的不必要系数
Unnecessary Coefficients given in Linear Regression
我有这样的线性回归:
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#”都有2个系数,例如对于变量“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
等变量似乎被编码为因子,因此它们在回归中被视为分类变量。在这种情况下,“0”值被视为每个变量的参考水平。与每个分类变量的参考水平相比,为每个其他水平估计不同的系数。这是分类变量的非常标准的参考水平编码。它们不是“不必要的”,因为它们指定了每个级别的效果。
看起来有点奇怪,因为你的变量以数字结尾,而且你的因子水平也是数字。因此,值 pos11 = -25.853
实际上意味着“pos1”(变量“pos1”+ 值“1”=“pos11”)的值为“1”的观测值的估计平均值比那些小于 ~25 个单位“pos1”的值“0”。您可以将名称的东西命名为
pos11 => pos1_1_vs_0
pos12 => pos1_2_vs_0
pos21 => pos2_1_vs_0
pos22 => pos2_2_vs_0
pos31 => pos3_1_vs_0
pos32 => pos3_2_vs_0
如果您不打算将这些值视为分类变量,请务必调查如何转换为因子。通常 R 会将数值作为数字读入。 lm
函数会自动将字符转换为因子,因此如果您希望值是数字,请确保它们不会作为字符读入。如果确实需要在回归之前将值转换为数值,则需要 be careful。这是一个可以正确进行转换的辅助函数。
factor_to_numeric <- function(x) {
stopifnot(is.factor(x))
as.numeric(levels(x))[x]
}
我有这样的线性回归:
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#”都有2个系数,例如对于变量“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
等变量似乎被编码为因子,因此它们在回归中被视为分类变量。在这种情况下,“0”值被视为每个变量的参考水平。与每个分类变量的参考水平相比,为每个其他水平估计不同的系数。这是分类变量的非常标准的参考水平编码。它们不是“不必要的”,因为它们指定了每个级别的效果。
看起来有点奇怪,因为你的变量以数字结尾,而且你的因子水平也是数字。因此,值 pos11 = -25.853
实际上意味着“pos1”(变量“pos1”+ 值“1”=“pos11”)的值为“1”的观测值的估计平均值比那些小于 ~25 个单位“pos1”的值“0”。您可以将名称的东西命名为
pos11 => pos1_1_vs_0
pos12 => pos1_2_vs_0
pos21 => pos2_1_vs_0
pos22 => pos2_2_vs_0
pos31 => pos3_1_vs_0
pos32 => pos3_2_vs_0
如果您不打算将这些值视为分类变量,请务必调查如何转换为因子。通常 R 会将数值作为数字读入。 lm
函数会自动将字符转换为因子,因此如果您希望值是数字,请确保它们不会作为字符读入。如果确实需要在回归之前将值转换为数值,则需要 be careful。这是一个可以正确进行转换的辅助函数。
factor_to_numeric <- function(x) {
stopifnot(is.factor(x))
as.numeric(levels(x))[x]
}