logit模型具有鲁棒误差的预测概率图

时间:2018-03-07 21:06:36

标签: r

我正在尝试使用群集健壮的标准错误为logit模型制作预测概率图。据说边缘包应该让你这样做,使用cplot(),但似乎有一个bug,这样cplot()不能识别可选的vcov输入。以下是最低工作示例。有谁知道如何解决这个错误或以另一种方式做到这一点?

require("margins")
require("sandwich")

##Generating random numbers
set.seed(10)
y<-factor(rbinom(n=1000,size=1,prob=.5))
x <- rnorm(n=1000, mean=100,sd=1)
z<- rbinom(n=1000,size=3,prob=.5)
#creating a "dataset"
dta<-data.frame(x,y,z)

##Basic logit model
model <-glm(y~x,family="binomial"(link="logit"),data=dta)

##Creating variance-covariance matrix, clustered by z
vcov <- vcovCL(model, cluster=z)

##Making a plot
cplot(model,"x",vcov=vcov,what="prediction")

#can see below that vcov has no effect (if not obvious from plot)
print(cplot(model,"x",vcov=vcov,what="prediction",draw=FALSE))
print(cplot(model,"x",what="prediction",draw=FALSE))

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码:

# Predict values
pred.dta <- ggeffects::ggpredict(
      model=model,
      terms="x [all]", 
      vcov.fun="vcovCL",
      vcov.type="HC1",
      vcov.args=list(cluster=z) 
      )    
# Plot predictions
ggplot2::ggplot(data=pred.dta, 
                ggplot2::aes(x=x, y=predicted))+
ggplot2::geom_line()+
ggplot2::geom_errorbar(ggplot2::aes(ymin=conf.low, ymax=conf.high), width=.1) 

为了比较,这是相同的代码,但没有聚集错误:

# Predict values
pred.dta <- ggeffects::ggpredict(
      model=model,
      terms="x [all]" )
      
# Plot predictions
ggplot2::ggplot(data=pred.dta, 
                ggplot2::aes(x=x, y=predicted))+
ggplot2::geom_line()+
ggplot2::geom_errorbar(ggplot2::aes(ymin=conf.low, ymax=conf.high), width=.1)