如何将诊断预测模型应用于新数据

Posted

技术标签:

【中文标题】如何将诊断预测模型应用于新数据【英文标题】:How to apply diagnostic prediction model to new data 【发布时间】:2021-05-13 02:22:53 【问题描述】:

在一些帮助下,我对增强型和多重插补数据集执行了 LASSO 回归,以构建一个诊断模型,该模型可以使用大量预测变量来区分疾病 A 和疾病 B。

最终,我得到了下表,其中包含选定的变量(这些都是以是/否为结果的分类变量)及其系数:

Predictor mean regression coefficient
Intercept 10.141
var1 1.671
Var2 -1.971
Var3 -5.266
Var4 -2.244
Var5 5.266

我的问题是:我如何使用上表来预测新患者(尚未用于建立 te 模型)是否患有疾病 A 或疾病 B。

我想到了以下几点:

截距 + (1.671 (var1) x 0 或 1) - (1.971 (var2) x 0 或 1) - (5.266 (var3) x 0 或 1) ..... + (5.266 (var5) x 0或 1) = X

患疾病 A 的概率(在数据集中编码为 1)= e^X / (1+ e^X)

但是这种方法正确吗?

我希望有人可以帮助我!

【问题讨论】:

【参考方案1】:

是的,因为您描述的是逻辑回归,所以这些步骤是正确的。这些是根据您的模型计算预测的步骤。

a) 将系数乘以 x 变量,确保包括截距(如果适用)(值为 1)

b) 对 a) 的结果求和

c) 取幂以产生对数赔率

d) 用 log_odds / (1 + log_odds) 计算最终概率

您没有提到具体的语言,但这里有一些使用pandas/numpypython 中的伪代码,假设数据集x_variablescoefficients 的pandas series

scores = x_variables.transpose()
scores = transpose_predictors.mul(coefficients, axis = 0)
sum_scores = scores.sum(axis = 0, skipna = True)
log_odds = np.exp(sum_scores)
final_scores = log_odds / (1 + log_odds)

编辑:R 中的代码相同,其中coefficients 是系数值的向量。

# do the scoring via matrix multiplication
scores <- t(t(x_variables) * coefficients)

# sum the scores by row and exponentiate. 
log_odds <- exp(rowSums(scores, na.rm = TRUE))
final_scores <- log_odds / (1 + log_odds)

【讨论】:

非常感谢您的回复!我对python不熟悉,但是你能在R中给出上面的代码吗?非常感激。另外,在步骤 a) 中,您的回答是:所以无论系数是负值还是正值,我都应该分别从截距中减去或添加,对吗? 没问题,我编辑添加了等效的 R 代码。从技术上讲,这都是加法,但是当您乘以负系数时,该符号将流过,因此您将添加一个负数(例如 Var2 的情况)。因此,在这些情况下,它在功能上变成了减法。

以上是关于如何将诊断预测模型应用于新数据的主要内容,如果未能解决你的问题,请参考以下文章

时间序列分析:平稳时间序列分析之预测

R语言使用DALEX包的explain函数生成指定分类预测机器学习模型的解释器model_diagnostics函数执行模型残差诊断并可视化模型预测值与残差的关系

R语言使用DALEX包的model_diagnostics函数对多个分类模型执行残差诊断并可视化模型预测值与残差的关系

R语言plotly可视化:可视化回归模型实际值和回归预测值的散点图分析回归模型的预测效能区分训练集和测试集一个好的模型大部分的散点在对角线附近添加边缘直方图以快速诊断模型可能存在的任何预测偏差

R语言构建回归模型并进行模型诊断(线性关系不满足时)进行变量变换(Transforming variables)使用car包中的boxTidwell函数对预测变量进行Box–Tidwell变换

R语言DALEX包的explain函数生成指定分类预测机器学习模型的解释器predict_diagnostics函数执行残差的局部诊断可视化指定预测变量的局部稳定性图判断预测的稳定性以及高估低估