等级不足警告混合模型 lmer
rank deficiency warning mixed model lmer
我有一个包含 142 个数据条目的数据集:121 个人在两次测量(两年,治疗前后,Year = 0 或 1),第二年有 46 个人在处理的地块中,其余的是在控制图中(处理 = 0 或 1)。下面是一些示例数据:
ID <- c("480", "480", "620", "620","712","712")
Year <- c("0", "1", "0", "1","0", "1")
Plot <- c("14", "14", "13", "13","20","20")
Treat <- c("0", "0", "0", "1", "0", "1")
Exp <- c("31", "43", "44", "36", "29", "71")
ExpSqrt <- c("5.567764", "6.557439", "6.633250", "6.000000", "5.385165", "8.426150")
Winter <- data.frame(ID, Year, Plot, Treat,
Exp, ExpSqrt,
stringsAsFactors = TRUE)
地块和个体是随机因素,我正在尝试拟合混合模型以确定年份、治疗的影响以及它们之间的相互作用:
model_Exp <- lmer(ExpSqrt~Year+Treat+Year*Treat+(1|ID)+(1|Plot),data=Winter)
但我不断收到警告消息:
"fixed-effect model matrix is rank deficient so dropping 1 column / coefficient"
这将删除交互。
我的数据集中没有 NA 值,Exp 始终为正,但我用 sqrt 对其进行了转换,因为分布是非正态的。这不是一个特别小的数据集,我已经尝试使用 caret 包中的函数 findLinearCombos 但它 returns 没有结果。
我的理解是存在一些问题,因为处理 1 仅在条件 year=1 下发生(但并非在所有情况下:Year=1 还包含 75 个控制个体)。
我不确定 a) 如何或是否可以解决这个问题?
或 b) 如果无法解决如何解释?
我已经阅读了一些关于此警告的回复,但已完成我发现的所有建议来解决它,我还阅读了一些有关 Hauck-Donner 效应的内容,但我不确定这是否是我的问题,并且作为统计数据的新手,我不能承认我完全理解它。
这并不是一个真正具体的线性混合模型问题。
归根结底,如果您在 'before' 期间(第 0 年)没有进行任何治疗,则无法估计相互作用。
最简单的示例:
(dd <- data.frame(y=1:3,treat=c(0,0,1),year=c(0,1,1)))
## y treat year
## 1 1 0 0
## 2 2 0 1
## 3 3 1 1
拟合模型:
lm(y~treat*year,dd) ## == year+treat+year:treat
## Call:
## lm(formula = y ~ treat * year, data = dd)
##
## Coefficients:
## (Intercept) treat year treat:year
## 1 1 1 NA
lm
不会警告您,但它通过删除额外的共线列并为其参数提供 NA
值来有效地执行与 lmer
相同的操作。如果你尝试 caret::findLinearCombos(dd[c("year","treat")])
你不会得到任何回报(year
和 treat
不是完全共线的),但是如果你查看 R 构建的包含处理列的模型矩阵,你会得到一些东西:
X <- model.matrix(~year*treat,dd)
caret::findLinearCombos(X)
## $linearCombos
## $linearCombos[[1]]
## [1] 4 3
## $remove
## [1] 4
此实验设计根本不允许您估计交互作用。如果从公式中删除它(使用 year+treat
而不是 year*treat
),您将得到相同的答案,但没有消息。或者,在典型的 "before-after-control-impact" 设计中(在环境影响评估中),您可以将 将接受治疗 的个人标记为 "impact" 或 "treated" 个人甚至在第 0 年;那么相互作用将是您实际估计的治疗效果。
我有一个包含 142 个数据条目的数据集:121 个人在两次测量(两年,治疗前后,Year = 0 或 1),第二年有 46 个人在处理的地块中,其余的是在控制图中(处理 = 0 或 1)。下面是一些示例数据:
ID <- c("480", "480", "620", "620","712","712")
Year <- c("0", "1", "0", "1","0", "1")
Plot <- c("14", "14", "13", "13","20","20")
Treat <- c("0", "0", "0", "1", "0", "1")
Exp <- c("31", "43", "44", "36", "29", "71")
ExpSqrt <- c("5.567764", "6.557439", "6.633250", "6.000000", "5.385165", "8.426150")
Winter <- data.frame(ID, Year, Plot, Treat,
Exp, ExpSqrt,
stringsAsFactors = TRUE)
地块和个体是随机因素,我正在尝试拟合混合模型以确定年份、治疗的影响以及它们之间的相互作用:
model_Exp <- lmer(ExpSqrt~Year+Treat+Year*Treat+(1|ID)+(1|Plot),data=Winter)
但我不断收到警告消息:
"fixed-effect model matrix is rank deficient so dropping 1 column / coefficient"
这将删除交互。
我的数据集中没有 NA 值,Exp 始终为正,但我用 sqrt 对其进行了转换,因为分布是非正态的。这不是一个特别小的数据集,我已经尝试使用 caret 包中的函数 findLinearCombos 但它 returns 没有结果。
我的理解是存在一些问题,因为处理 1 仅在条件 year=1 下发生(但并非在所有情况下:Year=1 还包含 75 个控制个体)。
我不确定 a) 如何或是否可以解决这个问题? 或 b) 如果无法解决如何解释?
我已经阅读了一些关于此警告的回复,但已完成我发现的所有建议来解决它,我还阅读了一些有关 Hauck-Donner 效应的内容,但我不确定这是否是我的问题,并且作为统计数据的新手,我不能承认我完全理解它。
这并不是一个真正具体的线性混合模型问题。
归根结底,如果您在 'before' 期间(第 0 年)没有进行任何治疗,则无法估计相互作用。
最简单的示例:
(dd <- data.frame(y=1:3,treat=c(0,0,1),year=c(0,1,1)))
## y treat year
## 1 1 0 0
## 2 2 0 1
## 3 3 1 1
拟合模型:
lm(y~treat*year,dd) ## == year+treat+year:treat
## Call:
## lm(formula = y ~ treat * year, data = dd)
##
## Coefficients:
## (Intercept) treat year treat:year
## 1 1 1 NA
lm
不会警告您,但它通过删除额外的共线列并为其参数提供 NA
值来有效地执行与 lmer
相同的操作。如果你尝试 caret::findLinearCombos(dd[c("year","treat")])
你不会得到任何回报(year
和 treat
不是完全共线的),但是如果你查看 R 构建的包含处理列的模型矩阵,你会得到一些东西:
X <- model.matrix(~year*treat,dd)
caret::findLinearCombos(X)
## $linearCombos
## $linearCombos[[1]]
## [1] 4 3
## $remove
## [1] 4
此实验设计根本不允许您估计交互作用。如果从公式中删除它(使用 year+treat
而不是 year*treat
),您将得到相同的答案,但没有消息。或者,在典型的 "before-after-control-impact" 设计中(在环境影响评估中),您可以将 将接受治疗 的个人标记为 "impact" 或 "treated" 个人甚至在第 0 年;那么相互作用将是您实际估计的治疗效果。