如何提高此逻辑回归模型的预测能力?

机器算法验证 回归 物流 spss
2022-04-06 05:00:18

我正在使用 SPSS 分析一个数据集,该数据集旨在根据五种症状(a、b、c、d、e)预测个人是否患有癌症。在这个数据集中,大多数人都患有癌症。我运行了二元逻辑回归并得到以下输出:

块 0

这测试了仅包含常数的模型,总体预测正确率为 91.8%。我了解,我在“方程式中没有的变量”表中有重要的预测变量,这意味着将这些变量中的一个或多个添加到模型中应该会提高其预测能力。

然后,在包含所有预测变量后,我查看了模型:

http://i.imgur.com/Y5WdePl.png

预测只是略有不同。现在它预测两个人不会得癌症。总体正确率保持在 91.8%。

  • 尽管预测因素很重要,为什么没有出现改善?
  • 这个数据集我应该从哪里开始?是否可以在不包含新预测变量的情况下提高模型的预测能力?
  • 我应该如何评估模型?仅凭模型无用的不断证据,它并没有改进模型吗?

完整输出可在此处查看。

数据集可在此处作为谷歌文档下载。

3个回答

概括

您似乎正在查看症状(a、b、c、d 和 e,编码为线性数字变量)和癌症状态(是与否,以二进制编码)之间的关联。

关联与预测

我认为您正在研究症状与癌症状态之间的关联,而不是症状预测癌症状态的能力。如果你想真正研究预测能力,你需要将你的数据集分成两半,将模型拟合到一半的数据中,然后用它们来预测另一半数据集中患者的癌症状态。请注意,这描述了使用单个数据集验证模型的最简单情况。你实际上不应该这样做。您真正可以做的是使用 n 折交叉验证(例如,使用rmsR 中的包)来最有效地利用您的数据。

出发

您可能已经这样做了,但在使用逻辑回归建模之前,我认为您应该退后一步,只看一下您的数据。使用程序 R 计算一些基本的汇总统计...

# Load libraries
library(Rmisc)
library(metafor)

# Load data
data <- read.csv("example_data.csv", header = TRUE, na.strings = "")
attach(data)

# Summarize data
summary(data)
       a              b               c               d               e             cancer      
 Min.   :11.0   Min.   :13.00   Min.   :13.00   Min.   :12.00   Min.   :17.00   Min.   :0.0000  
 1st Qu.:19.0   1st Qu.:27.00   1st Qu.:28.00   1st Qu.:36.00   1st Qu.:33.00   1st Qu.:1.0000  
 Median :24.0   Median :31.00   Median :32.00   Median :40.00   Median :38.00   Median :1.0000  
 Mean   :24.8   Mean   :31.39   Mean   :32.44   Mean   :39.39   Mean   :37.71   Mean   :0.9169  
 3rd Qu.:30.0   3rd Qu.:36.00   3rd Qu.:37.00   3rd Qu.:43.50   3rd Qu.:42.00   3rd Qu.:1.0000  
 Max.   :49.0   Max.   :50.00   Max.   :50.00   Max.   :50.00   Max.   :50.00   Max.   :1.0000  
 NA's   :20     NA's   :18      NA's   :21      NA's   :20      NA's   :20      NA's   :6

现在绘制一些探索性散点图......注意突然出现的变量之间的任何线性关系。还要注意(正如本杰明下面提到的)症状变量与癌症状态的关系图。

plot(data)

散点图

并查看一些直方图以了解数据的分布......在将它们插入回归模型之前这样做总是好的

 hist(data)

直方图

再进一步……

我会计算每个症状变量的平均值和 95% CI,并按癌症状态对它们进行分层并绘制它们……只要看看这个,你就会直观地知道哪些变量在你的逻辑回归模型中是显着的。这里我只是绘制数据...

forest(
x = c(24.44636,28.94667,31.63066,28.62963,32.59910,30.65852,39.79738,35.04111,37.99030,34.41185),
ci.lb = c(23.57979,25.72939,30.84611,26.15883,31.88579,28.52778,39.16493,32.27390,37.26171,32.10734),
ci.ub = c(25.31292,32.16395,32.41520,31.10043,33.31242,32.78926,40.42983,37.80832,38.71888,36.71637),
xlab = "Mean and 95% CI", slab = c("a cancer","a healthy","b cancer","b healthy","c cancer","c healthy","d cancer","d healthy","e cancer","e healthy"))

森林地块

查看上面的图表,您可以直观地感受到这样一个事实:与非癌症患者相比,对数据集做出贡献的癌症患者要多得多。

最后的...

我只会计算每个症状变量与癌症结果相关的单变量效应估计值。然后我会将所有得到的 p 值乘以 5,因为您正在进行许多探索性测试。您可以在 SPSS 中轻松做到这一点。对于模型的结果,我将更多地关注结果效应估计的方向、幅度和置信区间。下面我绘制了每个单独症状变量的单变量模型的效果估计值及其置信区间...现在您应该建立针对年龄、性别、吸烟等进行调整的模型,并制作另一个像这样的图...我确实同意本杰明的观点,鉴于缺乏健康对照,您可能无法从这些数据中学到很多东西。

逻辑回归结果

完全忽略分类表。它们不是基于可靠的统计方法,而是完全任意的。

要检查的一件事是癌症的对数几率与您的 5 个预测变量中的每一个之间是否存在线性关系。这是逻辑回归中的一个假设。如果这不成立,您可能需要考虑在模型中添加高阶项,甚至是癌症的对数几率与某些变量之间的非线性关系(通过拟合广义加法模型)。

从您的输出来看,这 5 个预测变量似乎不能很好地分类癌症与非癌症。

稍后我将查看数据并在此问题中添加更多内容。

在查看数据后,我确认这些变量在预测癌症方面确实很糟糕。如果您针对癌症状态绘制变量,您会发现,尽管对于其中一些非癌症患者的变异性较小,但癌症患者和非癌症患者之间的差异非常小。例如:

在此处输入图像描述

因此,如果您告诉我您有一个 C 变量为 30 的患者……我不知道那是癌症患者还是非癌症患者。

关于您的输出的更多信息:当您不添加任何变量时,它表示您正确预测了 91.8% 的患者。下表列出了添加更多变量的显着性值,这意味着您一次添加一个变量。