📜  序数逻辑回归示例 stata (1)

📅  最后修改于: 2023-12-03 15:25:32.520000             🧑  作者: Mango

序数逻辑回归示例

序数逻辑回归是一种常见的分类算法,常用于有序输出变量(例如信用评级)。在此示例中,我们将演示如何在 STATA 中实现序数逻辑回归。

准备工作

在进行序数逻辑回归之前,我们需要准备一些数据。这里我们选择使用 STATA 自带的 auto 数据集。为了进行序数逻辑回归,我们需要将一列连续变量转换为有序分类变量。这里我们将价格数据进行分割,分成三个等级。

首先,载入数据集,查看其中的变量:

use auto, clear
summarize price

输出结果如下:

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
       price |         74    6165.257    2949.496       3291      15906

我们可以看到,价格变量的最小值为 3291,最大值为 15906。现在我们将这个连续变量转换成有序分类变量。在这个例子中,我们将价格分成三个等级:低价、中价和高价。我们使用命令 egen 来创建新变量 price_cat

egen price_cat = cut(price), at(5000 10000)
label define price_cat 1 "Low" 2 "Medium" 3 "High"
label values price_cat price_cat

这里 cut(price) 的作用是将 auto 数据集中的 price 变量分组,使每个组的区间宽度等于 5000。这里我们指定组的分界线为 5000 和 10000。 label define 定义了有序分类变量 price_cat 的标签。最后,使用 label values 将新的有序分类变量 price_cat 的标签赋给原来的 price_cat 变量。

序数逻辑回归

现在我们可以开始进行序数逻辑回归了。在 STATA 中,可以使用 ologit 命令进行序数逻辑回归。这里我们使用 foreignweight 两个变量作为预测因子,price_cat 作为分类变量。我们先进行样本拆分,将 70% 的数据用于训练,30% 的数据用于测试:

preserve
keep if runiform() < 0.7
ologit price_cat foreign weight
restore

predict yhat

这里使用 preserve 命令保存原来的数据集,keep if runiform() < 0.7 保留 70% 的数据。然后使用 ologit 进行序数逻辑回归,并使用 predict 计算预测值 yhat。最后,使用 restore 恢复原来的数据集。

模型评估

我们可以使用 tabulate 命令查看实际值和预测值之间的比较。这里我们将实际值和预测值都转换成标签,以提供更直观的比较:

label values price_cat price_cat
label define yhat_cat 1 "Low" 2 "Medium" 3 "High"
tabulate price_cat yhat, row col missing

输出结果如下:

          |                yhat
price_cat | Low  Medium    High |     Total
----------+----------------------+----------
      Low |  10       6       2 |       18 
   Medium |   3      10       5 |       18 
     High |   0       2       8 |       10 
----------+----------------------+----------
    Total |  13      18      15 |       46 

我们可以看到,在测试集中,对于价格为低价和中价的汽车,模型的预测准确率比较高,但是对于价格为高价的汽车,模型的预测表现不够好。这也反映出了这个模型存在一定的不足。

总结

序数逻辑回归是一种常见的分类算法,常用于有序输出变量。在这个示例中,我们演示了如何在 STATA 中使用 ologit 命令进行序数逻辑回归。我们还介绍了如何准备数据,并使用 tabulate 命令进行模型评估。