我正在尝试使用R中的“效果”包获取跨越原始数据集的范围内的预测值,但是计算出的值范围有限且数据点很少。
我可以在“效果”包之外手动进行此操作,但是我专门尝试在其中进行此操作。
我有一个Logistic回归模型,可以从中预测值:
library(lme4)
library(effects)
y <- rep(c(0,0,0,0,1),20)
x1 <- rnorm(100,0,0.5)
x2 <- as.integer(rnorm(100,5,2.5))
x2[which(x2<0)] <- 0
r1 <- rep(letters[1:26],length.out = 100)
df<- data.frame(y,x1,x2,r1)
model <- glmer( y ~ x1 + x2 +(1|r1), data = df, family = binomial)
我使用Effect()
计算了一些预测值,并用ggplot
对其进行了绘制。
eff_df<- data.frame(Effect("x1",model))
#plot 1
ggplot(eff_df) +
scale_x_continuous(limits=c(-1.5,1.5))+
scale_y_continuous(limits=c(0.0,0.4))+
geom_line(data = eff_df, aes(x = x1, y = fit),size = 2, colour="red")
问题在于,这并不涵盖原始预测变量的所有值范围。 Effect()
只能从-1到1并具有5个值,因此对于高度弯曲的拟合线来说,不会很平滑。
max(x1)
# [1] 1.386848
min(x1)
# [1] -1.115965
Effect("x1",model)
# x1 effect
# x1
# -1 -0.5 0 0.5 1
# 0.1280189 0.1582372 0.1940015 0.2355868 0.2829567
我手动进行了拟合值的计算,您可以看到应该由Effect()
预测的范围
fake.x1 <- seq(max(x1),min(x1),length.out = 50)
fake.x2 <- seq(mean(x2),mean(x2),length.out = 50)
predicted.y <-
summary(model)$coefficients[1,1] +
summary(model)$coefficients[2,1] * fake.x1 +
summary(model)$coefficients[3,1] * fake.x2
bt.predicted.y <- exp(predicted.y)/(1+exp(predicted.y))
manual_df <- data.frame(bt.predicted.y,predicted.y,fake.x1,fake.x2)
#plot 2
ggplot(eff_df) +
scale_x_continuous(limits=c(-1.5,1.5))+
scale_y_continuous(limits=c(0.0,0.4))+
geom_line(data = manual_df, aes(x = fake.x1, y = bt.predicted.y),size=2, colour = "black") +
geom_line(data = eff_df, aes(x = x1, y = fit),size=2, colour = "red")
我想知道分位数参数是否为此目的,但它不起作用。
Effect("x1",model,quantiles=seq(0.1,0.99,by=0.01))
是否知道Effect()
的预测值是否可以操纵?