spss模型预测操作,spss怎么建立周预测模型

首页 > 实用技巧 > 作者:YD1662024-01-26 05:57:20

我要做一个default的预测模型,default是个二分类变量,取值为“No” 和“Yes”,为了简单我预测因素只考虑一个balance。于是我建立一个logistics模型:

model_glm = glm(default ~ balance, data = default_trn, family = "binomial")

我们将预测为Yes的概率为0.1的时候作为cutoff值,划分预测结局(p<0.1的时候为No,p>0.1的时候为Yes),同样地我们还可以将cutoff设置为0.5,0.9。然后我们分别看一看模型的灵敏度和特异度:

test_pred_10 = get_logistic_pred(model_glm, data = default_tst, res = "default", pos = "Yes", neg = "No", cut = 0.1) test_pred_50 = get_logistic_pred(model_glm, data = default_tst, res = "default", pos = "Yes", neg = "No", cut = 0.5) test_pred_90 = get_logistic_pred(model_glm, data = default_tst, res = "default", pos = "Yes", neg = "No", cut = 0.9) test_tab_10 = table(predicted = test_pred_10, actual = default_tst$default) test_tab_50 = table(predicted = test_pred_50, actual = default_tst$default) test_tab_90 = table(predicted = test_pred_90, actual = default_tst$default) test_con_mat_10 = confusionMatrix(test_tab_10, positive = "Yes") test_con_mat_50 = confusionMatrix(test_tab_50, positive = "Yes") test_con_mat_90 = confusionMatrix(test_tab_90, positive = "Yes") metrics = rbind( c(test_con_mat_10$overall["Accuracy"], test_con_mat_10$byClass["Sensitivity"], test_con_mat_10$byClass["Specificity"]), c(test_con_mat_50$overall["Accuracy"], test_con_mat_50$byClass["Sensitivity"], test_con_mat_50$byClass["Specificity"]), c(test_con_mat_90$overall["Accuracy"], test_con_mat_90$byClass["Sensitivity"], test_con_mat_90$byClass["Specificity"]) ) rownames(metrics) = c("c = 0.10", "c = 0.50", "c = 0.90") metrics

运行代码后得到响应概率不同cutoff值的情况下模型的灵敏度和特异度,如下图:

spss模型预测操作,spss怎么建立周预测模型(5)

可以看到我们设定的响应概率的cutoff值不同,就是判断阴阳的标准不同,我们得到的模型的灵敏度和特异度就是不同的。

以上只是为了再次给大家直观地说明我们的模型的灵敏度和特异度是取决于我们的响应概率界值的,你判断阴阳的标准会直接影响模型的灵敏度和特异度,于是,我们换个想法,对于一个模型,我们将灵敏度作为横坐标,特异度作为纵坐标,然后cutoff随便取,我们形成一条曲线,这就考虑了所有的cutoff情况了,就可以稳定地评估模型的表现了,这条曲线就是ROC曲线。

那么我们期望的是一个模型它的灵敏度高的时候,特异度也能高,体现到曲线上就是曲线下的面积能够越大越好。

预测模型R语言实操

此部分给大家写如何做出论文中的各种指标,以及如何绘出ROC曲线。

依然是用上一部分的数据,依然是做balance预测default的模型:

model_glm = glm(default ~ balance, data = default_trn, family = "binomial")

模型输出结果如下:

spss模型预测操作,spss怎么建立周预测模型(6)

结果中有输出模型的截距和balance的β值,我们可以用如下代码得到balance的OR值以及置信区间:

exp(cbind(OR = coef(model_glm), confint(model_glm)))

运行上面的代码就可以得到balance的OR值和OR的置信区间:

spss模型预测操作,spss怎么建立周预测模型(7)

同时我们有原始的真实值,我们模型拟合好了之后可以用该模型进行预测,得到预测值,形成混淆矩阵:

model_glm_pred = ifelse(predict(model_glm, type = "response") > 0.5, "Yes", "No")

在矩阵中就可以得到哪些是原始数据真实的No和Yes,哪些是模型预测出来的No和Yes:

spss模型预测操作,spss怎么建立周预测模型(8)

上一页123下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.