原创教程|R语言实现分类回归树,预测美国大法官如何办案

2024-10-15 06:13:19 | 作者: 匿名

最高法院审理了许多重要案件。例如,1942年的Wickart诉Fairburn案确认了联邦政府监管经济活动的权利; 1973年的罗伊诉韦德案确认了堕胎的合法性; 2000年,最高法院实际上在2012年就决定了总统选举的最终结果; 《患者保护和平价医疗法案》(也称为奥巴马医改法案)于2012 年通过。

2002年,华盛顿大学政治学教授安德鲁·马丁决定根据数据建立一个统计模型来预测案件的结果,并测试该统计模型是否优于专家和直觉。安德鲁·马丁使用了一种称为分类和回归树的模型。这种模式的结果总是二元的,即最高法院是否决定是否通过该案。直观上,这是一个二类分类问题,赞成与反对。

第二部分:数据预处理

为了预测最高法院的结果,Martin 收集并整理了1994 年至2001 年间的案件作为数据集,并将数据集保存为.csv 文件。收集这一时期的数据是因为联邦最高法院的法官在这七年里没有发生变化。同时,这也是同组评委任职时间最长的一次,有足够的数据来做预测。九位大法官分别为布雷耶、金斯伯格、肯尼迪、奥康纳、伦奎斯特、斯卡利亚、苏特、史蒂文斯和托马斯,其中伦奎斯特为首席大法官。我们试图预测的是被广泛认为是公正温和的法官史蒂文法官做出的决定。尽管他自称保守派,但在他任职期间却更加自由派。

处理后的数据集包括1个结果变量和6个自变量(时间不作为任何变量,仅代表标识符Item)。

结果变量:

反向:“0”表示史蒂文斯同意下级法院的判决,“1”表示不同意。

自变量:

问题:表示每个案件的类别,例如民权、联邦税收等。

申请人/被告:原告/被告类型,可以是雇员、雇主、国家等。

LowerCourt:下级法院的意识形态方向,保守派或自由派。

Unconst:原告是否认为该法律违宪,“1”表示违宪,“0”否则;整数。

补充:

13个联邦巡回法院是:哥伦比亚特区巡回法院、第一巡回法院、第二巡回法院、第三巡回法院、第四巡回法院、第五巡回法院、第六巡回法院、第七巡回法院、第八巡回法院、第九巡回法院、第十巡回法院、第十一巡回法院、联邦法院。

第三部分:用R语言建立模型

温馨提示:在R语言建模过程中,需要相关软件包。使用install.packages() 函数安装您需要的包,并使用library() 函数导入您需要的包。

例如,要安装caTools 包,请使用Install.packages("caTools");

导入划分数据集的caTools包,使用library(caTools);

建模思路:

首先,读取.csv 文件。csv 文件的名称为“stevens.csv”;然后使用str()函数查看文件的基本信息。

史蒂文斯=read.csv('史蒂文斯.csv')

str(史蒂文斯)

Stevens数据集相关信息

原创教程|R语言实现分类回归树,预测美国大法官如何办案

然后,将数据集分为训练集和测试集。

库(caTools)

设置.种子(3000)

spl=样本.split(stevens$Reverse, SplitRatio=0.7)

火车=子集(史蒂文斯,spl==TRUE)

测试=子集(史蒂文斯,spl==FALSE)

种子本身就是种子的意思。 set.seed() 函数中的参数可以是任意数字。使用该函数的目的是保证每次运行的结果相同; Sample.split() 中的第一个参数是结果变量stevens $Reverse;第二个参数是数据集的SplitRatio,就是将原始数据集的SplitRatio部分划分到训练集中。一般采用SplitRatio=70%;使用subset()函数创建训练集和测试集。 Subset本身就是“子集”的意思,很直观,因为训练集和测试集只是原始数据集stevens的子集。 subset() 函数的第一个参数是数据集的名称,第二个参数是spl。==TURE 或spl==FALSE,对于训练集为TRUE,对于测试集为FALSE

进一步导入相关包,建立分类回归树模型。

安装.packages('rpart')

库(r部分)

install.packages('rpart.plot')

库(rpart.plot)

StevensTree=rpart(反向~ 电路+ 问题+ 申请人+ 被申请人+ LowerCourt + Unconst, data=Train, method='class', minbucket=25)

现在我们使用rpart() 构建分类树模型。模型名称是“StevenTree”。 rpart()的第一个参数是结果变量Reverse,后面是“~”符号,然后是用于建模的自变量。自变量用“+”连接;模型的第二个参数是用于训练的数据集。上面我们已经获得了Train数据集;第三个参数是method="class",表示要建立一个分类。树模型,不是回归树模型;第四个参数minbucket,本模型使用minbucket=25,这是一个限制条件。当然,minbucket也可以是其他更大或更小的数字。如果数字太小,模型很容易通过;如果拟合太小,则模型太简单。以后还有其他方法来限制树的建立。

可视化分类树。

prp(史蒂文斯树)

该数据集的分类树模型

现在,我们使用prp() 函数,您将看到界面中弹出一棵树。

对测试集进行预测并计算混淆矩阵。

PredictCART=预测(StevensTree, newdata=测试, 类型='class')

预测CART

PredictCART输出结果

表(测试$反向,PredictCART)

原创教程|R语言实现分类回归树,预测美国大法官如何办案

混淆矩阵

预测准确率:(41+71)/(41+36+22+71)=65.9%

使用测试集Test 和Predict() 函数。 Predict() 包含三个参数。第一个参数是模型StevensTree的名称;第二个参数使用测试集Test作为新数据;第三个参数type='class',当我们使用我们的CART模型进行预测时,我们需要给出这个参数。这就好比如果我们使用0.5作为阈值,我们会发现如果省略这个参数,结果就会不同。

一般混淆矩阵

根据该表可以计算出真阳性TP、假阳性FP、假阴性FN、真阴性、准确率和错误率。主对角线上的两个值越大越好。下对角线的两个值越小越好。列代表预测结果,行代表实际结果。

ROC曲线:

图书馆(ROCR)

PredictROC=预测(StevensTree, newdata=测试)

预测ROC

预测ROC

这里的predict()比初始参数少了一个type='class'。 PredictROC,部分结果如上。第一列表示支持预测的概率,第二列表示反对预测的概率。行代表案例。

pred=预测(PredictROC[,2], Test$Reverse)

性能=性能(pred, 'tpr', 'fpr')

情节(性能)

ROC曲线

我们使用PredictROC 的第二列概率来生成ROC 曲线。我们将输出结果命名为pred 并使用Prediction()。第一个参数是PredictROC的第二列,PredictROC[,2];第二个参数是实际结果Test$Reverse。然后使用performance()函数,第一个参数是pred;第二个参数是真阳性率“tpr”,真阳性率,第三个参数是假阳性率“fpr”,就像我们图像的x和y轴一样。最后,使用plot(perf)绘制ROC图。

在下一篇文章中,我们将介绍如何使用该模型计算测试集的AUC以及如何构建随机森林模型。

总结:

完整代码如下:

史蒂文斯=read.csv('史蒂文斯.csv')

str(史蒂文斯)

#分割数据

库(caTools)

原创教程|R语言实现分类回归树,预测美国大法官如何办案

设置.种子(3000)

spl=样本.split(stevens$Reverse, SplitRatio=0.7)

火车=子集(史蒂文斯,spl==TRUE)

测试=子集(史蒂文斯,spl==FALSE)

#安装rpart库

安装.packages('rpart')

库(r部分)

install.packages('rpart.plot')

库(rpart.plot)

# CART 模型

StevensTree=rpart(反向~ 电路+ 问题+ 申请人+ 被申请人+ LowerCourt + Unconst, data=Train, method='class', minbucket=25)

prp(史蒂文斯树)

# 进行预测

PredictCART=预测(StevensTree, newdata=测试, 类型='class')

表(测试$反向,PredictCART)

(41+71)/(41+36+22+71)

#ROC曲线

图书馆(ROCR)

PredictROC=预测(StevensTree, newdata=测试)

预测ROC

pred=预测(PredictROC[,2], Test$Reverse)

用户评论

清原

哇,这个教程太棒了!我一直想学习R语言,这个分类回归树的应用太实用了,希望能学到预测大法官办案的方法。

    有15位网友表示赞同!

暖栀

这个教程好专业啊,R语言实现分类回归树,预测大法官办案,听起来好高大上,希望能看懂并应用到实际中。

    有7位网友表示赞同!

心悸╰つ

看了这个教程,我才发现R语言这么强大,能预测美国大法官如何办案,太神奇了,我要赶紧学起来。

    有7位网友表示赞同!

煮酒

分类回归树在R语言中的应用真是让人眼前一亮,预测大法官办案这个点子太有意思了,希望作者能继续分享更多。

    有6位网友表示赞同!

有阳光还感觉冷

教程里提到的分类回归树模型,感觉对法律领域也有很大的帮助,希望能学习到更多相关技巧。

    有6位网友表示赞同!

命硬

这个教程让我对R语言有了更深的认识,预测大法官办案这个案例真是巧妙,期待作者更多精彩内容。

    有17位网友表示赞同!

矜暮

感觉这个教程有点难度,R语言和分类回归树都不是很好上手,但是为了预测大法官办案,我还是会努力的。

    有10位网友表示赞同!

情如薄纱

预测大法官办案这个点子太新颖了,虽然我不懂R语言,但我会尝试去了解,毕竟知识改变命运。

    有16位网友表示赞同!

糖果控

分类回归树在R语言中的应用,让我对数据分析有了新的认识,希望能通过这个教程学会预测大法官办案。

    有9位网友表示赞同!

咆哮

这个教程太实用了,预测大法官办案这个案例很有意思,但是R语言的代码看起来有点复杂,需要慢慢消化。

    有15位网友表示赞同!

伱德柔情是我的痛。

学习了R语言实现分类回归树,感觉对预测大法官办案有很大的帮助,希望作者能分享更多实用技巧。

    有17位网友表示赞同!

走过海棠暮

看了这个教程,我对R语言和分类回归树有了更深的理解,预测大法官办案这个案例让我对数据分析有了新的认识。

    有13位网友表示赞同!

巷陌繁花丶

这个教程让我对R语言产生了浓厚的兴趣,预测大法官办案这个案例很有创意,希望作者能继续分享。

    有6位网友表示赞同!

孤者何惧

分类回归树在R语言中的应用,让我对数据分析有了新的启发,希望作者能分享更多相关案例。

    有8位网友表示赞同!

放肆丶小侽人

这个教程让我对R语言有了新的认识,预测大法官办案这个案例让我对数据分析产生了浓厚的兴趣。

    有14位网友表示赞同!

开心的笨小孩

感觉这个教程有点难度,但是为了预测大法官办案,我会努力学习R语言和分类回归树。

    有20位网友表示赞同!

情深至命

预测大法官办案这个案例很有意思,但是R语言的代码看起来有点复杂,希望作者能提供更多解释。

    有14位网友表示赞同!

青山暮雪

学习了R语言实现分类回归树,感觉对预测大法官办案有很大的帮助,希望作者能分享更多相关案例。

    有20位网友表示赞同!

墨城烟柳

这个教程让我对R语言有了新的认识,预测大法官办案这个案例很有创意,希望作者能继续分享更多实用技巧。

    有5位网友表示赞同!

あ浅浅の嘚僾

分类回归树在R语言中的应用,让我对数据分析有了新的启发,希望能学习到更多相关案例。

    有14位网友表示赞同!