子集選擇方法(最優子集選擇、向前逐步選擇、向後逐步選擇)
子集選擇方法:最優子集選擇
#Hitters (棒球)資料集實踐最優於集選擇方法
library(ISLR)
fix(Hitters)
names(Hitters)
dim(Hitters)
sum(is.na(Hitters$Salary))
Hitters<-na.omit(Hitters) #刪除缺失值
dim(Hitters)
sum(is.na(Hitters)) #檢驗是否含有缺失值
library(leaps)
#R語言中的 regsubset ()函式(於leaps庫)通過建立一系列包含給定數目預測變數的最優模型,來實現最優預測變數子集的篩選,其中“最優”這一概念使用
regfit.full=regsubsets(Salary~.,Hitters)
summary(regfit.full)
結果分析:星號*表示列對應的變數包含於行對應的模型當中。例如,以上輸出結果表示最優的兩變數模型僅包含 Hits (前一年究成的安打次數)和 CRBI (職業生涯總跑壘次數)兩個變數。
regfit.full<-regsubsets(Salary~.,data=Hitters,nvmax=19) #預設果只給出截至最優八變數模型的八種變數篩選結果,nvmax 選項可以設定使用者所需的預測變數個數,這裡設定為19。
reg.summary<-
names(reg.summary)
reg.summary$rsq
#par(mfrow=c(2,2)) #畫布分成4個區域,第一行有兩個區域,第二行也是二個區域
#畫出所有模型的 RSS 、調整 R2 ,及Cp 、BIC 的影象可以輔助確定最終選擇哪一個模型
plot(reg.summary$rss,xlab="Number of Variables",ylab="RSS",type="l") #RSS
plot(reg.summary$adjr2,xlab="Number of Variables",ylab="Adjusted RSq",type="l")
which.max(reg.summary$adjr2) #which. max ()函式可以用於識別一個向量中最大值所對應點的位置
points(11,reg.summary$adjr2[11], col="red",cex=2,pch=20)#points ()用於將點加在已有影象上
plot(reg.summary$cp,xlab="Number of Variables",ylab="Cp",type='l') #Cp
which.min(reg.summary$cp) #which min() 函式標示出統計指標最小的模型。
points(10,reg.summary$cp[10],col="red",cex=2,pch=20) #points ()用於將點加在已有影象上
which.min(reg.summary$bic) #which min() 函式標示出統計指標BIC最小的模型。
plot(reg.summary$bic,xlab="Number of Variables",ylab="BIC",type='l') #BIC
points(6,reg.summary$bic[6],col="red",cex=2,pch=20) #points ()用於將點加在已有影象上
plot(regfit.full,scale="r2")
plot(regfit.full,scale="adjr2")
plot(regfit.full,scale="Cp")
plot(regfit.full,scale="bic")
結果分析:每個影象第一行的黑色方塊表示根據相應統計指標選擇的最優模型所包含的變數。例如,多個模型的BIC都接近與-150。而BIC 指標最小的模型為包含變數AtBat (前一年的打數)、 Hits (前一年完成的安打次數)、 Walks (前一年的保送次數)、 CRBI (職業生涯單跑
線次數)、 Division (年來翻聯賽級別)和 PutOuts (前一年的接殺次數)的六變數模型。
coef(regfit.full,6) #coef ()函式可以提取該模型的引數估計值。