gpt4 book ai didi

r - lme4::lmer报告 “fixed-effect model matrix is rank deficient”,我是否需要修复以及如何解决?

转载 作者:行者123 更新时间:2023-12-02 02:28:09 25 4
gpt4 key购买 nike

我正在尝试运行一个混合效果模型,该模型使用其余的列作为预测变量来预测F2_difference,但是我收到一条错误消息,内容为

fixed-effect model matrix is rank deficient so dropping 7 columns / coefficients.



从这个链接 Fixed-effects model is rank deficient,我想我应该在R包 findLinearCombos中使用 caret。但是,当我尝试 findLinearCombos(data.df)时,它给了我错误消息

Error in qr.default(object) : NA/NaN/Inf in foreign function call (arg 1) In addition: Warning message: In qr.default(object) : NAs introduced by coercion



我的数据没有任何NA-可能是什么原因造成的? (很抱歉,答案很明显-我是R的新手)。

我所有的数据都是因素,除了我试图预测的数值。这是我的数据的一小部分。
sex <- c("f", "m", "f", "m")
nasal <- c("TRUE", "TRUE", "FALSE", "FALSE")
vowelLabel <- c("a", "e", "i", "o")
speaker <- c("Jim", "John", "Ben", "Sally")
word_1 <- c("going", "back", "bag", "back")
type <- c("coronal", "coronal", "labial", "velar")
F2_difference <- c(345.6, -765.8, 800, 900.5)
data.df <- data.frame(sex, nasal, vowelLabel, speaker,
word_1, type, F2_difference
stringsAsFactors = TRUE)

编辑:
如果有帮助,这里还有更多代码。
formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
type * vowelLabel + nasal * type +
(1|speaker) + (1|word_1)

lmer(formula, REML = FALSE, data = data.df)

编辑器编辑:

OP没有提供足够数量的测试数据,无法允许读者以 lmer实际运行模型。但这不是一个太大的问题。这仍然是一个很好的帖子!

最佳答案

您对警告消息过于关注:

fixed-effect model matrix is rank deficient so dropping 7 columns / coefficients.



这是警告而不是错误。既没有滥用 lmer也没有滥用模型公式,因此您将获得一个估计的模型。但是,为回答您的问题,我将尽力予以解释。

在执行 lmer期间,您的模型公式将分解为 固定效果公式随机效果公式,并为每个 模型矩阵构造一个。固定的构造是通过标准模型矩阵构造器 model.matrix;随机变量的构造很复杂,但与您的问题无关,所以我就跳过它。

对于您的模型,可以通过以下方法检查固定效果模型矩阵的外观:
fix.formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
type * vowelLabel + nasal * type

X <- model.matrix (fix.formula, data.df)

您所有的变量都是因数,因此 X将是二进制的。尽管使用 model.matrix applies contrasts for each factor and their interaction,但 X仍可能不会以完整的列排名结尾,因为列可能是其他一些列的线性组合(可以是精确的或数字上接近的)。您的情况是 some levels of one factor may be nested in some levels of another

等级不足可以通过许多不同的方式出现。 The other answer分享了CrossValidated答案,提供了大量讨论,对此我将发表一些评论。
  • 对于情况1,人们实际上可以通过说LASSO建立特征选择模型。
  • 情况2和3与数据收集过程有关。良好的实验设计是防止排名不足的最佳方法,但是对于许多构建模型的人来说,数据已经存在并且无法改善(如获取更多数据)。但是,我想强调一点,即使对于没有排名不足的数据集,如果我们不小心使用它,我们仍然会遇到此问题。例如,交叉验证是进行模型比较的好方法。为此,我们需要将完整的数据集分为一个训练数据集和一个测试数据集,但是如果不加注意,我们可能会从训练数据集中得到一个秩不足的模型。
  • 情况4是一个大问题,可能完全无法控制。也许自然的选择是减少模型的复杂性,但是另一种选择是尝试惩罚式回归。
  • 情况5是导致数字排名不足的数字问题,而this是一个很好的例子。
  • 案例6和案例7说明了以有限精度执行数值计算的事实。如果情况5得到正确处理,通常这些不会成为问题。

  • 因此,有时我们可以解决该缺陷,但并非总是可以实现这一目标。因此,任何写得很好的模型拟合例程(例如 lmglmmgcv::gam)都将对 X应用QR分解,以仅使用其完整列子空间,即 X列的最大子集提供完整列空间,用于估计 fixing coefficients associated with the rest of the columns at 0 or NA 。您得到的警告只是暗示这一点。最初有 ncol(X)系数要估计,但是由于不足,仅会估计 ncol(X) - 7,其余为0或 NA。这种数值解决方法可确保以最稳定的方式获得最小二乘解。

    为了更好地解决此问题,可以使用 lm来使线性模型适合 fix.formula
    fix.fit <- lm(fix.formula, data.df, method = "qr", singular.ok = TRUE)
    method = "qr"singular.ok = TRUE是默认设置,因此实际上我们不需要设置它。但是,如果我们指定 singular.ok = FALSElm将停止并抱怨等级不足。
    lm(fix.formula, data.df, method = "qr", singular.ok = FALSE)
    #Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
    # singular fit encountered

    然后,您可以在 fix.fit中检查返回的值。
    p <- length(coef)
    coef <- fix.fit$coef
    no.NA <- sum(is.na(coef))
    rank <- fix.fit$rank

    可以保证使用 p = ncol(X),但是您应该看到 no.NA = 7rank + no.NA = p

    确实在 lmer中发生了同样的事情。 lm不会报告不足,而 lmer会报告。实际上,这很有用,我经常看到人们问为什么 lm返回某些系数的 NA

    更新1(2016-05-07):

    Let me see if I have this right: The short version is that one of my predictor variables is correlated with another, but I shouldn't worry about it. It is appropriate to use factors, correct? And I can still compare models with anova or by looking at the BIC?



    不用担心使用 summaryanova。编写方法是为了使用正确数量的参数(自由度)来生成有效的摘要统计信息。

    更新2(2016-11-06):

    让我们还听听 lme4的软件包作者会说什么: rank deficiency warning mixed model lmer。 Ben Bolker也提到了 caret::findLinearCombos,特别是因为那里的OP想要自己解决缺陷问题。

    更新3(2018-07-27):

    秩不足不是有效的模型估计和比较的问题,但可能会对预测造成危害。我最近在CrossValidated上用模拟示例组成了详细答案: R lm , Could anyone give me an example of the misleading case on “prediction from a rank-deficient”?因此,是的,从理论上来看 ,我们应该避免排名不足的估计。但是实际上,没有所谓的“真实模型” :我们试图从数据中学习。我们永远无法将估计的模型与“真相”进行比较。最好的选择是从我们构建的许多模型中选择最好的一种。因此,如果“最佳”模型最终排名不足,我们可能会对此表示怀疑,但可能无法立即采取任何行动。

    关于r - lme4::lmer报告 “fixed-effect model matrix is rank deficient”,我是否需要修复以及如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37090722/

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