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
}
4

1 回答 1

1

这里有很多问题。

  • PA是的子集,baseball$League但模型是在整个 baseball数据框的列上构建的,它们不匹配。
  • PA在使用默认族(高斯)时被视为连续响应,应将其更改为因子和二项式族。
  • 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。

在此处输入图像描述

于 2013-07-03T12:31:56.310 回答