适用于逻辑回归的多重拟合和预测绘图

4

我正在对超过1000个样本数据运行多次逻辑回归。我的问题是什么是展示结果的最佳方式?怎样可以绘制拟合和预测曲线的输出?

以下是我所做的一个示例,使用来自R的棒球数据集。例如,我想要拟合并预测模型5次。每次我从中取出一个样本(用于预测),并使用另一个样本进行拟合。

library(corrgram)
data(baseball)

#Exclude rows with NA values
dataset=baseball[complete.cases(baseball),]

#Create vector replacing the Leage (A our N) by 1 or 0.
PA=rep(0,dim(dataset)[1])
PA[which(dataset[,2]=="A")]=1

#Model the player be league A in function of the Hits,Runs,Errors and Salary  
fit_glm_list=list()
prd_glm_list=list()
for (k in 1:5){
  sp=sample(seq(1:length(PA)),30,replace=FALSE)
  fit_glm<-glm(PA[sp[1:15]]~baseball$Hits[sp[1:15]]+baseball$Runs[sp[1:15]]+baseball$Errors[sp[1:15]]+baseball$Salary[sp[1:15]])    
  prd_glm<-predict(fit_glm,baseball[sp[16:30],c(6,8,20,21)])
  fit_glm_list[[k]]=fit_glm;prd_glm_list[[k]]=fit_glm
}

“baseball”数据集在哪里? - Ricardo Oliveros-Ramos
@A.R 你所说的“展示我的结果”是什么意思?绘制预测分布图?绘制残差图?绘制其他回归诊断图?还是其他什么? - pteetor
1
有一些你加载的包(并没有提到),其中包含棒球数据。也许是 corrgram - Seth
1
@RicardoOliveros-Ramos 调用(corrgram)库 - Gago-Silva
1
这不是逻辑回归!我尝试了一下,fit_glm$family返回的是“高斯分布”。 - Tomas
显示剩余2条评论
1个回答

1
这里有几个问题。
  • PAbaseball$League的子集,但模型是基于整个baseball数据框的列构建的,即它们不匹配。
  • 在使用默认的family(高斯)时,将PA作为连续响应变量处理,应该将其更改为因子和二项式family。
  • prd_glm_list[[k]]=fit_glm可能应该改为prd_glm_list[[k]]=prd_glm
  • 必须保存预测的真实类标签,否则你没有任何可以比较的东西。

我对你的代码的看法如下。

library(corrgram)
data(baseball)

dataset <- baseball[complete.cases(baseball),]

fits <- preds <- truths <- vector("list", 5)
for (k in 1:5){
  sp <- sample(nrow(dataset), 30, replace=FALSE)
  fits[[k]] <- glm(League ~ Hits + Runs + Errors + Salary,
                   family="binomial", data=dataset[sp[1:15],])    
  preds[[k]] <- predict(fits[[k]], dataset[sp[16:30],], type="response")
  truths[[k]] <- dataset$League[sp[1:15]]
}
plot(unlist(truths), unlist(preds))

该模型表现不佳,但至少代码可以正常运行。图中的y轴显示了样本属于N联盟的估计概率,即理想情况下左侧框应接近0,右侧接近1。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接