lmerTest::anova 未显示 p 值
lmerTest::anova not showing p-values
我问了一个新问题,因为重复的 (anova() does not display p-value when used with lmerTest) 并没有真正提供答案:
我 运行 遇到了同样的问题,即 lmerTest::anova 不会输出特定模型的自由度和 p 值(这比上面提到的 post 中的那个要简单得多):
DirectionFit <- lmer(Similarity ~ picture_category * ComparisonType + (1 + picture_category + ComparisonType|Subject), data = DirectionData, REML=FALSE)
我注意到,模型报告包括收敛代码 0,并且有 2 个优化器警告。难道是因为 lmerTest::anova 没有报告 p 值?
模型本身的输出看起来很正常,只有非常高的 AIC、BIC 等 (-10625)。
有谁知道该怎么办?我读到也许应该选择另一个优化器,但这是否也能解决收敛问题?
感谢您的帮助!
编辑:
我上传了我的数据:http://www.sharecsv.com/s/1e303e9cef06d02af51ed5231385b759/TestData.csv
感谢您的帮助!
基本问题是你有一个奇异拟合;估计的随机效应方差-协方差矩阵在其可行的 space 的边界上(等效地,lme4
用来表征方差-协方差矩阵的内部参数之一,它必须是非负的, 正好为零)。这不是优化问题本身;这通常意味着您的模型对于您的数据来说太复杂了,应该进行简化(例如,请参阅 GLMM FAQ 中的相关部分以获取更多信息)。特别是,尽管您的实验设计 原则上 允许您在 picture_category
和 ComparisonType
的影响中适应受试者间的差异,希望估计 4x4 方差-协方差来自 39 名受试者的随机效应矩阵非常乐观。 (您可能正在关注 Barr 等人的 "keep it maximal advice" ...)
接下来的内容可能比您真正想要的更技术性,但我提供它作为未来解决此类问题的参考。如果您想忽略模型是单一的这一事实(我不推荐),并且您愿意修复 lmerTest
当前版本中的错误 [我正在向维护者发送电子邮件]),你实际上可以通过 Kenward-Roger 近似得到这个问题的 p 值:summary(m2, ddf="Kenward-Roger")
有效,虽然它很慢(在我的笔记本电脑上 163 秒)。
因为 lmerTest
拦截了错误消息,所以很难看清发生了什么,我通常尝试从 lme4
.[=30= 开始解决 lmerTest
问题]
适合模特:
DirectionData <- read.csv("TestData.csv")
library(lme4)
DirectionFit <- lmer(Similarity ~ picture_category * ComparisonType +
(1 + picture_category + ComparisonType|Subject),
data = DirectionData, REML=FALSE)
## Warning messages:
## 1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## unable to evaluate scaled gradient
## 2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge: degenerate Hessian with 1 negative eigenvalues
好的,让我们看看发生了什么。 summary(DirectionFit)
,尤其是 VarCorr(DirectionFit)
,没有向我们显示任何 0 方差或 +/-1 相关性,但拟合仍然是奇异的:
th <- getME(DirectionFit,"theta")
which(th==0)
## Subject.picture_categoryland
## 8
(在实践中测试 which(th<1e-10)
可能更好)
那么这对 lmerTest
输出有何影响?
library(lmerTest)
m2 <- as(DirectionFit,"merModLmerTest")
trace("summary",sig="merModLmerTest",browser) ## debug
summary(m2)
随着我们深入挖掘,我们发现问题出在 calcApvar
函数中,该函数具有以下代码:
dd <- devfunTheta(rho$model) ## set up deviance function
h <- myhess(dd, c(rho$thopt, sigma = rho$sigma)) ## compute Hessian
ch <- try(chol(h), silent = TRUE)
如果我们尝试最后一个命令 而没有 silencing/catching 我们得到的错误消息
Error in chol.default(h) : the leading minor of order 10 is not positive definite
基本上,我们不能对 Hessian(二阶导数)矩阵进行 Cholesky 分解,因为它不是正定的:正如您在 Wikipedia 上看到的那样,Cholesky 分解适用于 PD 矩阵。
我问了一个新问题,因为重复的 (anova() does not display p-value when used with lmerTest) 并没有真正提供答案: 我 运行 遇到了同样的问题,即 lmerTest::anova 不会输出特定模型的自由度和 p 值(这比上面提到的 post 中的那个要简单得多):
DirectionFit <- lmer(Similarity ~ picture_category * ComparisonType + (1 + picture_category + ComparisonType|Subject), data = DirectionData, REML=FALSE)
我注意到,模型报告包括收敛代码 0,并且有 2 个优化器警告。难道是因为 lmerTest::anova 没有报告 p 值? 模型本身的输出看起来很正常,只有非常高的 AIC、BIC 等 (-10625)。 有谁知道该怎么办?我读到也许应该选择另一个优化器,但这是否也能解决收敛问题? 感谢您的帮助!
编辑: 我上传了我的数据:http://www.sharecsv.com/s/1e303e9cef06d02af51ed5231385b759/TestData.csv 感谢您的帮助!
基本问题是你有一个奇异拟合;估计的随机效应方差-协方差矩阵在其可行的 space 的边界上(等效地,lme4
用来表征方差-协方差矩阵的内部参数之一,它必须是非负的, 正好为零)。这不是优化问题本身;这通常意味着您的模型对于您的数据来说太复杂了,应该进行简化(例如,请参阅 GLMM FAQ 中的相关部分以获取更多信息)。特别是,尽管您的实验设计 原则上 允许您在 picture_category
和 ComparisonType
的影响中适应受试者间的差异,希望估计 4x4 方差-协方差来自 39 名受试者的随机效应矩阵非常乐观。 (您可能正在关注 Barr 等人的 "keep it maximal advice" ...)
接下来的内容可能比您真正想要的更技术性,但我提供它作为未来解决此类问题的参考。如果您想忽略模型是单一的这一事实(我不推荐),并且您愿意修复 lmerTest
当前版本中的错误 [我正在向维护者发送电子邮件]),你实际上可以通过 Kenward-Roger 近似得到这个问题的 p 值:summary(m2, ddf="Kenward-Roger")
有效,虽然它很慢(在我的笔记本电脑上 163 秒)。
因为 lmerTest
拦截了错误消息,所以很难看清发生了什么,我通常尝试从 lme4
.[=30= 开始解决 lmerTest
问题]
适合模特:
DirectionData <- read.csv("TestData.csv")
library(lme4)
DirectionFit <- lmer(Similarity ~ picture_category * ComparisonType +
(1 + picture_category + ComparisonType|Subject),
data = DirectionData, REML=FALSE)
## Warning messages:
## 1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## unable to evaluate scaled gradient
## 2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge: degenerate Hessian with 1 negative eigenvalues
好的,让我们看看发生了什么。 summary(DirectionFit)
,尤其是 VarCorr(DirectionFit)
,没有向我们显示任何 0 方差或 +/-1 相关性,但拟合仍然是奇异的:
th <- getME(DirectionFit,"theta")
which(th==0)
## Subject.picture_categoryland
## 8
(在实践中测试 which(th<1e-10)
可能更好)
那么这对 lmerTest
输出有何影响?
library(lmerTest)
m2 <- as(DirectionFit,"merModLmerTest")
trace("summary",sig="merModLmerTest",browser) ## debug
summary(m2)
随着我们深入挖掘,我们发现问题出在 calcApvar
函数中,该函数具有以下代码:
dd <- devfunTheta(rho$model) ## set up deviance function
h <- myhess(dd, c(rho$thopt, sigma = rho$sigma)) ## compute Hessian
ch <- try(chol(h), silent = TRUE)
如果我们尝试最后一个命令 而没有 silencing/catching 我们得到的错误消息
Error in chol.default(h) : the leading minor of order 10 is not positive definite
基本上,我们不能对 Hessian(二阶导数)矩阵进行 Cholesky 分解,因为它不是正定的:正如您在 Wikipedia 上看到的那样,Cholesky 分解适用于 PD 矩阵。