GLMER 模型在同一数据上为 fitted.values() 和 predict() 生成不同的值
GLMER model produces different values for fitted.values() and predict() on same data
我已经训练了一个非常复杂的(随机截距和斜率)混合逻辑模型,然后我用它来预测新数据。我的预测很不准确,所以我比较了原始数据的预测值,发现它们与我的 fitted.values()
有很大不同。例如。仅取第一个数据点,拟合值为 0.359,预测值 (predict(model, newdata=data, type="response"
) 为 0.0585。我很确定这个问题与随机效应有关,因为如果我预测同一个数据点只有固定效应,我得到 0.707,这是我所期望的,而随机效应只给出 0.0252,这是非常错误的。
您可以通过绘制拟合与预测(下)来查看不同的随机效应组。这也显示了组内的梯度是如何相同的,所以它看起来像是截距而不是斜率的问题。
非常感谢任何帮助!
编辑:如果有帮助,公式基本上如下所示:
y ~ (1 | re1) +
(1 | re2) +
(1 | re3) +
fe1 + fe2 +
(1 + rs1 | re1) +
(1 + rs1 | re2) +
(1 | re4:re1) +
(1 | re4:re2) +
(1 | re5:re2) +
(1 | re5:re1) +
(1 + rs2 | re1) +
(1 + rs2 | re2) +
(1 + rs3 | re1) +
(1 + rs3 | re2)
编辑 2:这是一个代表。我用几个不同的种子试过这个,差异很大。例如。种子 42 看起来几乎相同(但结果并不完全相同)。
library(lme4)
set.seed(25)
y <- as.factor(round(runif(1000,0,1)))
re1 <- as.factor(round(runif(1000,1,5)))
re2 <- as.factor(round(runif(1000,1,4)))
re3 <- as.factor(round(runif(1000,0,1)))
fe1 <- runif(1000,0,1)
fe2 <- runif(1000,0,1)
rs1 <- runif(1000,0,1)
rs2 <- runif(1000,0,1)
df <- data.frame(y=y,
re1=re1,
re2=re2,
re3=re3,
fe1=fe1,
fe2=fe2,
rs1=rs1,
rs2=rs2)
model <- glmer(y ~ (1 | re1) +
(1 | re2) +
(1 | re3) +
fe1 + fe2 +
(1 + rs1 | re1) +
(1 + rs1 | re2), family="binomial", data=df)
plot(fitted.values(model), predict(model, newdata=df, type="response"))
型号:
glmer(y ~ (1 | re1) +
(1 | re2) +
(1 | re3) +
fe1 + fe2 +
(1 + rs1 | re1) +
(1 + rs1 | re2), family="binomial", data=df)
是病态的。 (1 | re1)
和 (1 | re2)
是多余的,因为您还适合 (1 + rs1 | re1)
和 (1 + rs1 | re2)
。如果目的是估计不相关的随机效应,那么您可以使用 (1 | re1) + (0 + rs1 | re1)
和 (1 | re2) + (0 + rs1 | re2)
如果删除这些多余的术语:
model <- glmer(y ~ (1 | re3) +
fe1 + fe2 +
(1 + rs1 | re1) +
(1 + rs1 | re2), family="binomial", data=df)
然后你从fitted.values
和predict
获得相同的值:
plot(fitted.values(model), predict(model, newdata=df, type="response"))
这个模型是单一的 - 原始模型也是如此 - 但这是一个不同的问题。
我已经训练了一个非常复杂的(随机截距和斜率)混合逻辑模型,然后我用它来预测新数据。我的预测很不准确,所以我比较了原始数据的预测值,发现它们与我的 fitted.values()
有很大不同。例如。仅取第一个数据点,拟合值为 0.359,预测值 (predict(model, newdata=data, type="response"
) 为 0.0585。我很确定这个问题与随机效应有关,因为如果我预测同一个数据点只有固定效应,我得到 0.707,这是我所期望的,而随机效应只给出 0.0252,这是非常错误的。
您可以通过绘制拟合与预测(下)来查看不同的随机效应组。这也显示了组内的梯度是如何相同的,所以它看起来像是截距而不是斜率的问题。
非常感谢任何帮助!
编辑:如果有帮助,公式基本上如下所示:
y ~ (1 | re1) +
(1 | re2) +
(1 | re3) +
fe1 + fe2 +
(1 + rs1 | re1) +
(1 + rs1 | re2) +
(1 | re4:re1) +
(1 | re4:re2) +
(1 | re5:re2) +
(1 | re5:re1) +
(1 + rs2 | re1) +
(1 + rs2 | re2) +
(1 + rs3 | re1) +
(1 + rs3 | re2)
编辑 2:这是一个代表。我用几个不同的种子试过这个,差异很大。例如。种子 42 看起来几乎相同(但结果并不完全相同)。
library(lme4)
set.seed(25)
y <- as.factor(round(runif(1000,0,1)))
re1 <- as.factor(round(runif(1000,1,5)))
re2 <- as.factor(round(runif(1000,1,4)))
re3 <- as.factor(round(runif(1000,0,1)))
fe1 <- runif(1000,0,1)
fe2 <- runif(1000,0,1)
rs1 <- runif(1000,0,1)
rs2 <- runif(1000,0,1)
df <- data.frame(y=y,
re1=re1,
re2=re2,
re3=re3,
fe1=fe1,
fe2=fe2,
rs1=rs1,
rs2=rs2)
model <- glmer(y ~ (1 | re1) +
(1 | re2) +
(1 | re3) +
fe1 + fe2 +
(1 + rs1 | re1) +
(1 + rs1 | re2), family="binomial", data=df)
plot(fitted.values(model), predict(model, newdata=df, type="response"))
型号:
glmer(y ~ (1 | re1) +
(1 | re2) +
(1 | re3) +
fe1 + fe2 +
(1 + rs1 | re1) +
(1 + rs1 | re2), family="binomial", data=df)
是病态的。 (1 | re1)
和 (1 | re2)
是多余的,因为您还适合 (1 + rs1 | re1)
和 (1 + rs1 | re2)
。如果目的是估计不相关的随机效应,那么您可以使用 (1 | re1) + (0 + rs1 | re1)
和 (1 | re2) + (0 + rs1 | re2)
如果删除这些多余的术语:
model <- glmer(y ~ (1 | re3) +
fe1 + fe2 +
(1 + rs1 | re1) +
(1 + rs1 | re2), family="binomial", data=df)
然后你从fitted.values
和predict
获得相同的值:
plot(fitted.values(model), predict(model, newdata=df, type="response"))
这个模型是单一的 - 原始模型也是如此 - 但这是一个不同的问题。