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