金欣雪
?
R語言在統(tǒng)計(jì)學(xué)教學(xué)中的運(yùn)用
金欣雪
(阜陽師范學(xué)院 數(shù)學(xué)與統(tǒng)計(jì)學(xué)院,安徽 阜陽 236037)
通過比較R在bagging、隨機(jī)森林、支持向量機(jī)、最近鄰、人工神經(jīng)網(wǎng)絡(luò)等現(xiàn)代回歸方法中所發(fā)揮的不同作用,進(jìn)一步說明了R語言在統(tǒng)計(jì)教學(xué)中的優(yōu)勢(shì)。
統(tǒng)計(jì)學(xué)教學(xué);R語言;現(xiàn)代回歸分析
R語言是屬于GNU系統(tǒng)的一個(gè)自由、免費(fèi)、源代碼開放的軟件,它主要用于統(tǒng)計(jì)計(jì)算和統(tǒng)計(jì)制圖[1-2]。它為許多不同領(lǐng)域的工作者提供了豐富的程序包和函數(shù),以及能夠滿足不同專家學(xué)者交流需要的強(qiáng)大社區(qū)資源[3]。本文通過一些經(jīng)典的例子,探討在統(tǒng)計(jì)教學(xué)過程中R語言的運(yùn)用,引導(dǎo)學(xué)生掌握應(yīng)用R語言解決實(shí)際問題的方法。
應(yīng)用舉例中所選取的數(shù)據(jù)為美國(guó)波士頓郊區(qū)的房?jī)r(jià)數(shù)據(jù),共有506個(gè)觀測(cè)值,14個(gè)變量(13個(gè)連續(xù)性變量,1個(gè)分類變量),具體如表1所示。
表1 變量名稱及含義
2.1.1 描述數(shù)據(jù)集的基本信息
首先讀入數(shù)據(jù):
c=read.table("D:/R/housing2.data.txt",
header=T);
對(duì)數(shù)據(jù)集的基本信息特征進(jìn)行描述:
summary(c)
CRIM的均值為3.61,最小值為0.006,最大值為88.98,25%的值小于0.08,中位數(shù)為0.26,75%的值小于3.68;
RM的均值為6.29,最小值為3.56,最大值為8.78,25%的值小于5.89,中位數(shù)為6.21,75%的值小于6.62;
LSTAT的均值為12.65,最小值為1.73,最大值為37.97,25%的值小于6.95,中位數(shù)為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時(shí),比CHAS為0時(shí)集中;RM值在CHAS為1時(shí),比CHAS為0時(shí)分散。
2.1.3 進(jìn)一步檢驗(yàn)變量間的相關(guān)性
bb=cor(c[,-c(4)]);bb;#變量間的相關(guān)性
symnum(cor(c[,-c(4)]));
kappa(bb,exact=TRUE);#共線性檢驗(yàn)
從變量之間的相關(guān)程度圖中可以看出,大多數(shù)變量之間相關(guān)程度不高,但某些變量之間的相關(guān)程度很大,變量之間存在著多重共線性的影響。
分別按10%、30%、50%分層抽樣建立訓(xùn)練集與測(cè)試集。通過對(duì)三者的比較,利用30%分層抽樣建立的訓(xùn)練集與測(cè)試集的NMSE最低。在后續(xù)的現(xiàn)代分類與回歸的方法的研究中,我們均采用30%分層抽樣建立的訓(xùn)練集與測(cè)試集。
在建立訓(xùn)練集和測(cè)試集之前定性變量先因子化:
c$CHAS=factor(c$CHAS)
attach(c);summary(c)
#建立訓(xùn)練集與測(cè)試集:
按30%分層抽樣建立訓(xùn)練集與測(cè)試集
m=506;
val1 <- sample(1:m, size = round(m/3), replace = FALSE, prob = rep(1/m, m))
wsamp3 <- c[-val1,];dim(wsamp3); #選取2/3作為訓(xùn)練集(337*14)
wsamp3;
wtsamp3 <- c[val1,];dim(wtsamp3)#選取1/3作為測(cè)試集(169*14)
wtsamp3;
2.2.1 Bagging (bootstrap aggregating)
Bagging通過對(duì)訓(xùn)練樣本進(jìn)行放回抽樣,每次抽取樣本量同樣的觀測(cè)值,所產(chǎn)生的個(gè)不同樣本生成個(gè)決策樹,在回歸時(shí),因變量的預(yù)測(cè)值由這些樹的結(jié)果平均得出[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訓(xùn)練集上的NMSE為:", mean((wsamp3$MEDV-as.numeric(baggingtrain))^2)/mean((mean(wsamp3$MEDV)- wsamp3$MEDV)^2)," ")
#Bagging訓(xùn)練集上的NMSE為: 0.132 848 2
cat("Bagging測(cè)試集上的NMSE為:", mean((wtsamp3$MEDV-as.numeric(baggingpre))^2)/mean((mean(wtsamp3$MEDV)-wtsamp3$MEDV)^2), " ")
#Bagging測(cè)試集上的NMSE為: 0.275 671 7
2.2.2 隨機(jī)森林
隨機(jī)森林的樣本數(shù)目遠(yuǎn)大于bagging。且樣本隨機(jī),每棵樹、每個(gè)節(jié)點(diǎn)的產(chǎn)生都有很大的隨機(jī)性。隨機(jī)森林不修剪每個(gè)樹,讓其盡量增長(zhǎng),以此得出更精確的結(jié)果。此外,在大的數(shù)據(jù)庫中的運(yùn)行很有效率,還能給出分類中各個(gè)變量的重要性[5]。
library(randomForest)#調(diào)用randomForest包
randomforest.MEDV=randomForest(MEDV ~ ., data=wsamp3, importance=TRUE, proximity= TRUE);
randomforesttrain=predict(randomforest.MEDV, wsamp3)
randomforestpre=predict(randomforest.MEDV, wtsamp3)
cat("randomforest訓(xùn)練集上的NMSE為:", mean((wsamp3$MEDV-as.numeric(randomforesttrain))^2)/mean((mean(wsamp3$MEDV)-wsamp3$MEDV)^2), " ")
#randomforest訓(xùn)練集上的NMSE為:0.032 230 1
cat("randomforest測(cè)試集上的NMSE為:", mean((wtsamp3$MEDV-as.numeric(randomforestpre))^2)/mean((mean(wtsamp3$MEDV)-wtsamp3$MEDV)^2), " ")
#randomforest測(cè)試集上的NMSE:0.123 473 3
進(jìn)一步給出分類中各個(gè)變量的重要性:
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中左圖是用移去一個(gè)變量時(shí)導(dǎo)致的平均精確度減少來衡量的,右圖是用均方誤差來衡量的。房間數(shù)目(RM)和較低地位人的比率(LSTAT)是最突出的。
圖2 隨機(jī)森林
2.2.3 最近鄰方法
最近鄰方法基于訓(xùn)練集對(duì)測(cè)試集進(jìn)行分類或回歸。在分類中,個(gè)訓(xùn)練集點(diǎn)中多數(shù)所歸屬類型決定了距離其最近測(cè)試點(diǎn)的歸類。在回歸中,離測(cè)試點(diǎn)最近的個(gè)訓(xùn)練集點(diǎn)對(duì)應(yīng)因變量值的平均值即為其預(yù)測(cè)值[6]。
library(kknn);
a=kknn(MEDV~.,wsamp3,wtsamp3);
summary(a);
kknntrain=predict(a, wsamp3)
kknnpre=predict(a, wtsamp3)
cat("kknn訓(xùn)練集上的NMSE為:", mean((wsamp3$MEDV-as.numeric(kknntrain))^2)/mean((mean(wsamp3$MEDV)-wsamp3$MEDV)^2), " ")
#kknn訓(xùn)練集上的NMSE為:1.632 342
cat("kknn測(cè)試集上的NMSE為:", mean((wtsamp3$MEDV-as.numeric(kknnpre))^2)/mean((mean(wtsamp3$MEDV)-wtsamp3$MEDV)^2), " ")
#kknn測(cè)試集上的NMSE為:0.274 189 5
2.2.4 人工神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)是對(duì)自然的神經(jīng)網(wǎng)絡(luò)的模仿;可以有效解決很復(fù)雜的有大量互相相關(guān)變量的回歸和分類問題[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訓(xùn)練集上的NMSE為:", mean((wsamp3$MEDV-as.numeric(nnettrain))^2)/mean((mean(wsamp3$MEDV)-wsamp3$MEDV)^2), " ")
#nnet訓(xùn)練集上的NMSE為:6.291 331
cat("nnet測(cè)試集上的NMSE為:", mean((wtsamp3$MEDV-as.numeric(nnetpre))^2)/mean((mean(wtsamp3$MEDV)-wtsamp3$MEDV)^2), " ")
#nnet測(cè)試集上的NMSE為:6.956 288
圖3 人工神經(jīng)網(wǎng)路
2.2.5 支持向量機(jī)
支持向量機(jī)最常用的為最大間隔原則,即分隔直線或超平面兩邊的不包含觀測(cè)點(diǎn)的區(qū)域越寬越好[8]。
圖4 支持向量機(jī)
library(mlbench);
library(e1071);
gg=svm(MEDV ~ ., data = wsamp3, kernal= "sigmoid")
e1071train=predict(gg, wsamp3)
e1071pre=predict(gg, wtsamp3)
cat("e1071訓(xùn)練集上的NMSE為:", mean((wsamp3$MEDV-as.numeric(e1071train))^2)/mean((mean(wsamp3$MEDV)-wsamp3$MEDV)^2), " ")
e1071訓(xùn)練集上的NMSE為: 0.090 234 8
cat("e1071測(cè)試集上的NMSE為:", mean((wtsamp3$MEDV-as.numeric(e1071pre))^2)/mean((mean(wtsamp3$MEDV)-wtsamp3$MEDV)^2), " ")
e1071測(cè)試集上的NMSE為: 0.211 448
表2 綜合比較
表2是采用不同方法處理時(shí)得到的NMSE值比較。從中可以看出,randomForest得到的訓(xùn)練集和測(cè)試集的NMSE最小,所以randomForest方法更精確。
[1] TORGO L.數(shù)據(jù)挖掘與R語言[M].北京:機(jī)械工業(yè)出版社,2013:4-8.
[2] 羌雨.基于R語言的大數(shù)據(jù)審計(jì)方法研究[J].中國(guó)管理信息化,2016,(11):46-48.
[3] 李雄英.基于R語言的統(tǒng)計(jì)教學(xué)應(yīng)用初探[J].高教學(xué)刊, 2017,(1):50-53.
[4] 王斌會(huì).多元統(tǒng)計(jì)分析及R語言建模[M].廣州:暨南大學(xué)出版社,2015:176-187.
[5] 楊霞,吳東偉.R語言在大數(shù)據(jù)處理中的應(yīng)用[J].科技資訊,2013,(23):19-20.
[6] 吳喜之.復(fù)雜數(shù)據(jù)統(tǒng)計(jì)方法:基于R的應(yīng)用[M].北京:中國(guó)人民大學(xué)出版社,2013:195-210.
[7] 湯銀才.R語言與統(tǒng)計(jì)分析[M].北京:高等教育出版社, 2008:135-142.
[8] 薛毅,陳立萍.統(tǒng)計(jì)建模與R軟件[M].北京:清華大學(xué)出版社,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
全國(guó)統(tǒng)計(jì)科學(xué)研究項(xiàng)目(2017LY63),安徽省哲學(xué)社會(huì)科學(xué)規(guī)劃項(xiàng)目(AHSKY2018D63),安徽省教育廳重點(diǎn)項(xiàng)目(SK2017A0454),河北省科技廳重點(diǎn)項(xiàng)目(17454701D),阜陽市政府-阜陽師范學(xué)院橫向合作項(xiàng)目(XDHXTD201709),阜陽師范學(xué)院人文社會(huì)科學(xué)研究重點(diǎn)項(xiàng)目(2019FSSK04ZD)
2018-03-07
2018-05-02
金欣雪(1985-),女,安徽渦陽人,博士,講師,研究方向?yàn)閼?yīng)用統(tǒng)計(jì)數(shù)據(jù)分析。
(責(zé)任編輯、校對(duì):趙光峰)