gpt4 book ai didi

r - `lm`摘要未显示所有因子水平

转载 作者:行者123 更新时间:2023-12-04 11:37:00 26 4
gpt4 key购买 nike

我正在对多个属性(包括两个分类属性BF)进行线性回归,但是我没有获得每个系数水平的系数值。
B具有9个级别,而F具有6个级别。当我最初运行模型(带有截距)时,我得到了8个B系数和5个F系数,我将其理解为每个系数都包含在截距中的第一级。

我想根据它们的系数对BF中的级别进行排名,因此我在每个因子之后添加了-1以将截距锁定为0,这样我就可以获得所有级别的系数。

Call:
lm(formula = dependent ~ a + B-1 + c + d + e + F-1 + g + h, data = input)

Coefficients:
Estimate Std. Error t value Pr(>|t|)
a 2.082e+03 1.026e+02 20.302 < 2e-16 ***
B1 -1.660e+04 9.747e+02 -17.027 < 2e-16 ***
B2 -1.681e+04 9.379e+02 -17.920 < 2e-16 ***
B3 -1.653e+04 9.254e+02 -17.858 < 2e-16 ***
B4 -1.765e+04 9.697e+02 -18.202 < 2e-16 ***
B5 -1.535e+04 1.388e+03 -11.059 < 2e-16 ***
B6 -1.677e+04 9.891e+02 -16.954 < 2e-16 ***
B7 -1.644e+04 9.694e+02 -16.961 < 2e-16 ***
B8 -1.931e+04 9.899e+02 -19.512 < 2e-16 ***
B9 -1.722e+04 9.071e+02 -18.980 < 2e-16 ***
c -6.928e-01 6.977e-01 -0.993 0.321272
d -3.288e-01 2.613e+00 -0.126 0.899933
e -8.384e-01 1.171e+00 -0.716 0.474396
F2 4.679e+02 2.176e+02 2.150 0.032146 *
F3 7.753e+02 2.035e+02 3.810 0.000159 ***
F4 1.885e+02 1.689e+02 1.116 0.265046
F5 5.194e+02 2.264e+02 2.295 0.022246 *
F6 1.365e+03 2.334e+02 5.848 9.94e-09 ***
g 4.278e+00 7.350e+00 0.582 0.560847
h 2.717e-02 5.100e-03 5.328 1.62e-07 ***

这部分起作用,导致显示了所有B级别,但是F1仍未显示。由于不再存在拦截,我感到困惑,为什么F1不在线性模型中。

切换调用顺序,以便+ F - 1+ B - 1之前,导致F的所有级别的系数可见,但B1不可见。

有人知道如何显示 BF的所有级别,或者如何从我的输出中评估 F1与其他 F级别相比的相对权重吗?

最佳答案

这个问题一遍又一遍地提出,但是不幸的是,没有令人满意的答案可以作为适当的重复目标。看起来我需要写一个。

大多数人都知道这与“对比度”有关,但并不是每个人都知道为什么需要它以及如何理解它的结果。为了充分理解这一点,我们必须查看模型矩阵

假设我们对具有两个因素的模型感兴趣:~ f + g(数值协变量无关紧要,因此我不包含任何变量;响应未出现在模型矩阵中,因此也将其删除)。考虑以下可重现的示例:

set.seed(0)

f <- sample(gl(3, 4, labels = letters[1:3]))
# [1] c a a b b a c b c b a c
#Levels: a b c

g <- sample(gl(3, 4, labels = LETTERS[1:3]))
# [1] A B A B C B C A C C A B
#Levels: A B C

我们从完全没有对比的模型矩阵开始:
X0 <- model.matrix(~ f + g, contrasts.arg = list(
f = contr.treatment(n = 3, contrasts = FALSE),
g = contr.treatment(n = 3, contrasts = FALSE)))

# (Intercept) f1 f2 f3 g1 g2 g3
#1 1 0 0 1 1 0 0
#2 1 1 0 0 0 1 0
#3 1 1 0 0 1 0 0
#4 1 0 1 0 0 1 0
#5 1 0 1 0 0 0 1
#6 1 1 0 0 0 1 0
#7 1 0 0 1 0 0 1
#8 1 0 1 0 1 0 0
#9 1 0 0 1 0 0 1
#10 1 0 1 0 0 0 1
#11 1 1 0 0 1 0 0
#12 1 0 0 1 0 1 0

注意,我们有:
unname( rowSums(X0[, c("f1", "f2", "f3")]) )
# [1] 1 1 1 1 1 1 1 1 1 1 1 1

unname( rowSums(X0[, c("g1", "g2", "g3")]) )
# [1] 1 1 1 1 1 1 1 1 1 1 1 1

因此 span{f1, f2, f3} = span{g1, g2, g3} = span{(Intercept)}在此完整规范中,无法识别2列。 X0将具有列排名1 + 3 + 3 - 2 = 5 :
qr(X0)$rank
# [1] 5

因此,如果我们使用 X0拟合线性模型,则7个参数中的2个系数将是 NA:
y <- rnorm(12)  ## random `y` as a response
lm(y ~ X - 1) ## drop intercept as `X` has intercept already

#X0(Intercept) X0f1 X0f2 X0f3 X0g1
# 0.32118 0.05039 -0.22184 NA -0.92868
# X0g2 X0g3
# -0.48809 NA

这实际上意味着,我们必须在7个参数上添加2个线性约束,才能获得完整的秩模型。这两个约束到底是什么并不重要,但是必须有两个线性独立的约束。 例如,我们可以执行以下任一操作:
  • X0删除任何2列;
  • 在参数上添加两个零和约束,例如我们要求f1f2f3和的系数为0,而g1g2g3的系数相同。
  • 使用正则化,例如,向fg添加岭惩罚。

  • 请注意,这三种方式最终会带来三种不同的解决方案:
  • 对比;
  • 约束最小二乘;
  • 线性混合模型或惩罚最小二乘法。

  • 前两个仍然在固定效果建模的范围内。通过“对比”,我们减少了参数的数量,直到获得完整的秩模型矩阵为止。而另外两个并没有减少参数的数量,而是有效地减少了有效的自由度。

    现在,您肯定会遵循“对比”方式。因此,请记住,我们必须删除2列。他们可以
  • f的一列和g的一列提供给~ f + g模型,将fg进行对比;
  • 截距,然后从fg中的一列生成模型~ f + g - 1

  • 现在您应该清楚,在删除列的框架内,您无法获得所需的内容,因为您希望只删除1列。结果模型矩阵仍将是秩不足的。

    如果您真的想在那里拥有所有系数,请使用约束最小二乘法,或使用惩罚回归/线性混合模型。

    现在,当我们具有各种因素的相互作用时,事情变得更复杂了,但想法仍然是一样的。但是鉴于我的回答已经足够长了,所以我不想继续。

    关于r - `lm`摘要未显示所有因子水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41032858/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com