【问题标题】:Use glm to predict on fresh data使用 glm 预测新数据
【发布时间】:2020-07-10 17:35:39
【问题描述】:

我对 glm 比较陌生 - 所以请多多包涵。

我创建了一个 glm(逻辑回归)来预测个人是继续学习(“0”)还是不继续学习(“1”)。我有兴趣预测后者。 glm 在数据集中使用了七个因素,混淆矩阵非常适合我的需要,并且结合了七年的数据也已经完成。直截了当。

但是,我现在需要将模型应用于当前年份的数据,其中当然没有 NOTCONTINUE 列。假设 glm 模型是“CombinedYears”,新数据是“Data2020”

我如何使用 glm 模型来预测谁会(“0”)或不会(“1”)继续他们的学业?我需要在最新文件中插入一个 NOTCONTINUE 列吗?这个结构我试过了

Predict2020

但输出仅保存值

非常感谢任何帮助。提前谢谢你

【问题讨论】:

  • 您正确使用了predict。您看到的结果是每个给定个体不会继续的概率。如果你的辍学率总体上是 10%,这是完全可能的。假设您有一个模型正确预测掷骰子时掷出 6 的概率为 0.167。因此,如果您掷出 100 个骰子,您预计会得到 16 或 17 个 6。但是,您不能指望模型预测 哪个 骰子是 6。它会告诉你每次投掷的概率。你的模型只能告诉你一个人不会继续下去的概率。
  • 谢谢。没有完全意识到这一点,但我现在知道了!对这一级别的统计和学习的新手!

标签: r model glm


【解决方案1】:

您提到您已经创建了一个预测模型来预测特定学生是否会继续学习。您使用了 glm 包,并且您的模型名称是 CombinedYears。

现在,您必须知道您的问题是二元分类,并且您为此使用了逻辑回归。当您将模型应用于新数据,甚至是用于拟合模型的相同数据时,模型的输出就是概率。这些是零到一之间的值。在模型的开发阶段,您需要确定这些概率的截止阈值,以便以后在预测新数据时使用。例如,您可以将 0.5 确定为截止值,高于该值的每个概率都被视为 NOTCONTINUE,低于该值的每个概率都被视为 CONTINUE。然而,最佳阈值也可以通过最大化特异性和灵敏度来从您的数据中确定。这可以通过计算接收者操作特征曲线 (AUC) 下的面积来完成。有许多包可以为您做到这一点,例如 R 中的 pROC 和 AUC 包。相同的包也可以确定最佳截止值。

你需要做的是:

  1. 计算 AUC 后确定截止阈值

    图书馆(PROC) roc_object = roc(your_fit_data$NOTCONTINUE ~ 拟合(CombinedYears)) coords(roc.roc_object, "best", ret="threshold", transpose = FALSE)
  2. 使用您的模型预测您的新数据年份(就像您所做的那样)

    Predict2020 = predict(CombinedYears, data.frame(Data2020), type = 'response')
  3. 现在,Predict2020 的内容只是每个概率 学生。使用您从步骤 (1) 中获得的截止值对您的 相应的学生

【讨论】:

  • 谢谢!给了我所需的指导 - 周末愉快。
  • 对不起!我虽然今天早上做了这个工作,并且确实从坐标线上得到了一个阈值,并设法对我的数据进行了分区。但是,今天下午返回以进一步开发脚本并且 roc_object 行现在会产生错误。这是我的 roc_object
  • 此结构已解决错误消息 - roc_object
猜你喜欢
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2020-07-12
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
相关资源
最近更新 更多