R语言在统计学教学中的运用

2018-12-25 08:30金欣雪
唐山师范学院学报 2018年6期
关键词:阜阳集上变量

金欣雪



R语言在统计学教学中的运用

金欣雪

(阜阳师范学院 数学与统计学院,安徽 阜阳 236037)

通过比较R在bagging、随机森林、支持向量机、最近邻、人工神经网络等现代回归方法中所发挥的不同作用,进一步说明了R语言在统计教学中的优势。

统计学教学;R语言;现代回归分析

1 R语言

R语言是属于GNU系统的一个自由、免费、源代码开放的软件,它主要用于统计计算和统计制图[1-2]。它为许多不同领域的工作者提供了丰富的程序包和函数,以及能够满足不同专家学者交流需要的强大社区资源[3]。本文通过一些经典的例子,探讨在统计教学过程中R语言的运用,引导学生掌握应用R语言解决实际问题的方法。

2 R语言在统计学教学中的应用举例

2.1 数据描述

应用举例中所选取的数据为美国波士顿郊区的房价数据,共有506个观测值,14个变量(13个连续性变量,1个分类变量),具体如表1所示。

表1 变量名称及含义

2.1.1 描述数据集的基本信息

首先读入数据:

c=read.table("D:/R/housing2.data.txt",

header=T);

对数据集的基本信息特征进行描述:

summary(c)

CRIM的均值为3.61,最小值为0.006,最大值为88.98,25%的值小于0.08,中位数为0.26,75%的值小于3.68;

RM的均值为6.29,最小值为3.56,最大值为8.78,25%的值小于5.89,中位数为6.21,75%的值小于6.62;

LSTAT的均值为12.65,最小值为1.73,最大值为37.97,25%的值小于6.95,中位数为11.36,75%的值小于16.95;

2.1.2 绘制变量LSTAT~CHAS,RM~CHAS的箱线图

图1 箱线图

par(mfrow=c(1,2))

boxplot(LSTAT~CHAS, data=c, col=c('red', 'green'), main="LSTAT~CHAS")

boxplot(RM~CHAS, data=c, col=c('red', 'green'), main="RM~CHAS")

从图1可以看出,LSTAT的值在CHAS为1时,比CHAS为0时集中;RM值在CHAS为1时,比CHAS为0时分散。

2.1.3 进一步检验变量间的相关性

bb=cor(c[,-c(4)]);bb;#变量间的相关性

symnum(cor(c[,-c(4)]));

kappa(bb,exact=TRUE);#共线性检验

从变量之间的相关程度图中可以看出,大多数变量之间相关程度不高,但某些变量之间的相关程度很大,变量之间存在着多重共线性的影响。

2.2 现代回归与分类

分别按10%、30%、50%分层抽样建立训练集与测试集。通过对三者的比较,利用30%分层抽样建立的训练集与测试集的NMSE最低。在后续的现代分类与回归的方法的研究中,我们均采用30%分层抽样建立的训练集与测试集。

在建立训练集和测试集之前定性变量先因子化:

c$CHAS=factor(c$CHAS)

attach(c);summary(c)

#建立训练集与测试集:

按30%分层抽样建立训练集与测试集

m=506;

val1 <- sample(1:m, size = round(m/3), replace = FALSE, prob = rep(1/m, m))

wsamp3 <- c[-val1,];dim(wsamp3); #选取2/3作为训练集(337*14)

wsamp3;

wtsamp3 <- c[val1,];dim(wtsamp3)#选取1/3作为测试集(169*14)

wtsamp3;

2.2.1 Bagging (bootstrap aggregating)

Bagging通过对训练样本进行放回抽样,每次抽取样本量同样的观测值,所产生的个不同样本生成个决策树,在回归时,因变量的预测值由这些树的结果平均得出[4]。

library(ipred)

bagging.MEDV=bagging(wsamp3$MEDV~.,data=wsamp3)

attributes(bagging.MEDV)

baggingtrain=predict(bagging.MEDV,wsamp3)

baggingpre=predict(bagging.MEDV,wtsamp3)

baggingpre

cat("Bagging训练集上的NMSE为:", mean((wsamp3$MEDV-as.numeric(baggingtrain))^2)/mean((mean(wsamp3$MEDV)- wsamp3$MEDV)^2)," ")

#Bagging训练集上的NMSE为: 0.132 848 2

cat("Bagging测试集上的NMSE为:", mean((wtsamp3$MEDV-as.numeric(baggingpre))^2)/mean((mean(wtsamp3$MEDV)-wtsamp3$MEDV)^2), " ")

#Bagging测试集上的NMSE为: 0.275 671 7

2.2.2 随机森林

随机森林的样本数目远大于bagging。且样本随机,每棵树、每个节点的产生都有很大的随机性。随机森林不修剪每个树,让其尽量增长,以此得出更精确的结果。此外,在大的数据库中的运行很有效率,还能给出分类中各个变量的重要性[5]。

library(randomForest)#调用randomForest包

randomforest.MEDV=randomForest(MEDV ~ ., data=wsamp3, importance=TRUE, proximity= TRUE);

randomforesttrain=predict(randomforest.MEDV, wsamp3)

randomforestpre=predict(randomforest.MEDV, wtsamp3)

cat("randomforest训练集上的NMSE为:", mean((wsamp3$MEDV-as.numeric(randomforesttrain))^2)/mean((mean(wsamp3$MEDV)-wsamp3$MEDV)^2), " ")

#randomforest训练集上的NMSE为:0.032 230 1

cat("randomforest测试集上的NMSE为:", mean((wtsamp3$MEDV-as.numeric(randomforestpre))^2)/mean((mean(wtsamp3$MEDV)-wtsamp3$MEDV)^2), " ")

#randomforest测试集上的NMSE:0.123 473 3

进一步给出分类中各个变量的重要性:

round(importance(randomforest.MEDV),3)

print(randomforest.MEDV);

par(mfrow=c(1,2));

for(iin1:2)barplot(t(importance(randomforest. MEDV))[i,],cex.names = 0.7)

图2中左图是用移去一个变量时导致的平均精确度减少来衡量的,右图是用均方误差来衡量的。房间数目(RM)和较低地位人的比率(LSTAT)是最突出的。

图2 随机森林

2.2.3 最近邻方法

最近邻方法基于训练集对测试集进行分类或回归。在分类中,个训练集点中多数所归属类型决定了距离其最近测试点的归类。在回归中,离测试点最近的个训练集点对应因变量值的平均值即为其预测值[6]。

library(kknn);

a=kknn(MEDV~.,wsamp3,wtsamp3);

summary(a);

kknntrain=predict(a, wsamp3)

kknnpre=predict(a, wtsamp3)

cat("kknn训练集上的NMSE为:", mean((wsamp3$MEDV-as.numeric(kknntrain))^2)/mean((mean(wsamp3$MEDV)-wsamp3$MEDV)^2), " ")

#kknn训练集上的NMSE为:1.632 342

cat("kknn测试集上的NMSE为:", mean((wtsamp3$MEDV-as.numeric(kknnpre))^2)/mean((mean(wtsamp3$MEDV)-wtsamp3$MEDV)^2), " ")

#kknn测试集上的NMSE为:0.274 189 5

2.2.4 人工神经网络

人工神经网络是对自然的神经网络的模仿;可以有效解决很复杂的有大量互相相关变量的回归和分类问题[7]。

library(mlbench);

library(nnet);

dd=nnet(MEDV~., data =wsamp3, size = 2, rang = 0.1, decay = 5e-4, maxit = 1 000);

nnettrain=predict(dd, wsamp3)

nnetpre=predict(dd, wtsamp3)

cat("nnet训练集上的NMSE为:", mean((wsamp3$MEDV-as.numeric(nnettrain))^2)/mean((mean(wsamp3$MEDV)-wsamp3$MEDV)^2), " ")

#nnet训练集上的NMSE为:6.291 331

cat("nnet测试集上的NMSE为:", mean((wtsamp3$MEDV-as.numeric(nnetpre))^2)/mean((mean(wtsamp3$MEDV)-wtsamp3$MEDV)^2), " ")

#nnet测试集上的NMSE为:6.956 288

图3 人工神经网路

2.2.5 支持向量机

支持向量机最常用的为最大间隔原则,即分隔直线或超平面两边的不包含观测点的区域越宽越好[8]。

图4 支持向量机

library(mlbench);

library(e1071);

gg=svm(MEDV ~ ., data = wsamp3, kernal= "sigmoid")

e1071train=predict(gg, wsamp3)

e1071pre=predict(gg, wtsamp3)

cat("e1071训练集上的NMSE为:", mean((wsamp3$MEDV-as.numeric(e1071train))^2)/mean((mean(wsamp3$MEDV)-wsamp3$MEDV)^2), " ")

e1071训练集上的NMSE为: 0.090 234 8

cat("e1071测试集上的NMSE为:", mean((wtsamp3$MEDV-as.numeric(e1071pre))^2)/mean((mean(wtsamp3$MEDV)-wtsamp3$MEDV)^2), " ")

e1071测试集上的NMSE为: 0.211 448

2.3 综合比较

表2 综合比较

表2是采用不同方法处理时得到的NMSE值比较。从中可以看出,randomForest得到的训练集和测试集的NMSE最小,所以randomForest方法更精确。

[1] TORGO L.数据挖掘与R语言[M].北京:机械工业出版社,2013:4-8.

[2] 羌雨.基于R语言的大数据审计方法研究[J].中国管理信息化,2016,(11):46-48.

[3] 李雄英.基于R语言的统计教学应用初探[J].高教学刊, 2017,(1):50-53.

[4] 王斌会.多元统计分析及R语言建模[M].广州:暨南大学出版社,2015:176-187.

[5] 杨霞,吴东伟.R语言在大数据处理中的应用[J].科技资讯,2013,(23):19-20.

[6] 吴喜之.复杂数据统计方法:基于R的应用[M].北京:中国人民大学出版社,2013:195-210.

[7] 汤银才.R语言与统计分析[M].北京:高等教育出版社, 2008:135-142.

[8] 薛毅,陈立萍.统计建模与R软件[M].北京:清华大学出版社,2007:162-178.

The Application of R Language in Statistics Teaching

JIN Xin-xue

(Department of Mathematics and Statistics, Fuyang Teachers College, Fuyang 236037, China)

The paper combined with examples.discusses the application in the teaching of statistics, compares the different roles R played in bagging, randomforest, svm, kknn, nnet, etc. modern regression methods, in order to further illustrate the advantages of R language software, combined with examples.

statistics teaching; R language; modern regression methods

G642.0

A

1009-9115(2018)06-0049-05

10.3969/j.issn.1009-9115.2018.06.011

全国统计科学研究项目(2017LY63),安徽省哲学社会科学规划项目(AHSKY2018D63),安徽省教育厅重点项目(SK2017A0454),河北省科技厅重点项目(17454701D),阜阳市政府-阜阳师范学院横向合作项目(XDHXTD201709),阜阳师范学院人文社会科学研究重点项目(2019FSSK04ZD)

2018-03-07

2018-05-02

金欣雪(1985-),女,安徽涡阳人,博士,讲师,研究方向为应用统计数据分析。

(责任编辑、校对:赵光峰)

猜你喜欢
阜阳集上变量
实数集到时标上的概念推广的若干原则
GCD封闭集上的幂矩阵行列式间的整除性
抓住不变量解题
第二届淮河文化论坛在阜阳举行
也谈分离变量
安徽阜阳颍上:“产业花”结出“脱贫果”
师如明灯,清凉温润
分离变量法:常见的通性通法
几道导数题引发的解题思考
阜阳跃动