从“效果”包中获得更广泛的预测值

时间:2019-04-15 10:39:37

标签: r logistic-regression predict

我正在尝试使用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")

plot 1

问题在于,这并不涵盖原始预测变量的所有值范围。 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")

plot 2

我想知道分位数参数是否为此目的,但它不起作用。

Effect("x1",model,quantiles=seq(0.1,0.99,by=0.01)) 

是否知道Effect()的预测值是否可以操纵?

0 个答案:

没有答案