彭維湘
(廣州工商學(xué)院 會計(jì)學(xué)院,廣州 510507)
建立多元回歸模型時(shí),若無既有理論模型,且相關(guān)影響因素較多,就需要對自變量進(jìn)行篩選。
由于自變量之間、自變量與因變量之間的關(guān)系錯綜復(fù)雜,主觀上難以準(zhǔn)確判斷哪些自變量更適合于模型,只能用統(tǒng)計(jì)方法或基于統(tǒng)計(jì)方法進(jìn)行篩選。目前比較常用的模型篩選方法有:向前逐步回歸、向后逐步回歸、全子集回歸。前兩種方法計(jì)算快捷,比較常用;全子集篩選法計(jì)算量大,應(yīng)用比較少。
從實(shí)際應(yīng)用效果來看,在自變量較多的情況下,向前逐步回歸的估計(jì)效果最差,向后逐步回歸的效果好一些,但這些篩選方法得到的都是局部最優(yōu)模型。而基于全子集回歸的篩選方法是對全部子集模型進(jìn)行估計(jì)和比較,不僅可以根據(jù)事先定義找出最優(yōu)模型,還可以搜索到具有特殊意義的模型。
本文基于VBA for EXCEL編程技術(shù),探討如何通過全子集篩選法實(shí)現(xiàn)對回歸模型的構(gòu)建、估計(jì)、優(yōu)化、應(yīng)用。
設(shè)多元回歸模型有k個(gè)自變量x1,x2,…,xk,因變量為y,設(shè)置線性回歸模型如下:
則含1 個(gè)自變量的子集為:{x1},{x2},…,{xk},共有k個(gè)子集。
含2個(gè)自變量的子集為:{x1,x2},{x1,x3},…,{xk-1,xk},共有k(k-1)/2 個(gè)子集。
含3個(gè)自變量的子集為:{x1,x2,x3},{x1,x2,x4},…,{xk-2,xk-1,xk},共有k(k-1)(k-2)/6 個(gè)子集。
…………
含k個(gè)自變量的子集只有一個(gè):{x1,x2,…,xk}。
由k個(gè)自變量生成的全部子集模型個(gè)數(shù)是:k++…+。全子集篩選就是對所有子集模型進(jìn)行估計(jì)、檢驗(yàn)和篩選。
若模型中全部自變量的回歸系數(shù)都通過了t 檢驗(yàn),則該模型就是統(tǒng)計(jì)顯著性模型,即每個(gè)自變量t統(tǒng)計(jì)量的絕對值都要大于t統(tǒng)計(jì)量的臨界值。如果任何一個(gè)自變量的t統(tǒng)計(jì)量不顯著(常數(shù)項(xiàng)一般不進(jìn)行t檢驗(yàn)),那么該模型就要被舍棄。
用t1,t2,…,tk表示k個(gè)自變量的t 統(tǒng)計(jì)量,若最小的t統(tǒng)計(jì)量大于一定顯著性水平下的臨界值,該模型就是統(tǒng)計(jì)顯著性模型,即min(|t1|,|t2|,…,|tk|)>t1-a/2(n-k-1),其中,n是樣本容量。
在全部子集模型中,t 統(tǒng)計(jì)量顯著的模型很多,但不同模型的回歸效果不同,所以t統(tǒng)計(jì)量只能篩選出統(tǒng)計(jì)顯著性模型,不能判斷模型優(yōu)劣。
判定回歸模型最優(yōu)的標(biāo)準(zhǔn)是什么?向前逐步回歸、向后逐步回歸側(cè)重于回歸系數(shù)的t檢驗(yàn),對模型優(yōu)劣的判別標(biāo)準(zhǔn)定義不夠明確。而全子集回歸必須進(jìn)行嚴(yán)格定義,否則無法進(jìn)行篩選。
常用判別模型優(yōu)劣的統(tǒng)計(jì)量有:R2、S、AIC、BIC,其中,R2越大或S、AIC、BIC 越小,模型就越好。特別是S,能直接反映因變量估計(jì)值與實(shí)際值之間誤差的大小,S越小模型越優(yōu),是比較好的判斷標(biāo)準(zhǔn);AIC和BIC包含了自由度因素,更多側(cè)重于避免出現(xiàn)維度災(zāi)害(自變量過多)和模型復(fù)雜度太高的問題。這些統(tǒng)計(jì)量的計(jì)算公式分別是:
通過大量計(jì)算可以發(fā)現(xiàn),R2、S兩個(gè)標(biāo)準(zhǔn)的判斷差別不大,AIC、BIC 兩個(gè)標(biāo)準(zhǔn)的差異也不大,但AIC、BIC 與R2、S相互間的判別結(jié)果差異較大。本文用S作為判斷標(biāo)準(zhǔn),借助AIC進(jìn)行輔助判斷。篩選原理是:從只有1個(gè)自變量的子集開始,對每個(gè)子集模型進(jìn)行t檢驗(yàn),保留t統(tǒng)計(jì)量顯著的模型,然后比較不同子集模型的S,S最小的模型即為最優(yōu)顯著性模型。
一般全子集模型篩選法:在將所有子集模型全部估計(jì)、判斷、比較完之后,找出全部顯著性子集模型中S最小的那個(gè)子集模型。從包含1 個(gè)自變量的子集模型開始計(jì)算,直到計(jì)算完包含全部自變量的子集模型。理論上要進(jìn)行k++…+1 次計(jì)算,但自變量很多的時(shí)候,可以提前終止計(jì)算。提前終止方法有三種:
方法1:人為規(guī)定模型中的自變量個(gè)數(shù)不超過某個(gè)值,達(dá)到則終止。篩選出來的雖然不是最優(yōu)模型,但也能達(dá)到很好的擬合效果。
方法2:k個(gè)自變量形成的全部子集包括含1,…,k個(gè)自變量的子集,在自變量個(gè)數(shù)為m的子集模型中,只要至少存在一個(gè)統(tǒng)計(jì)顯著性模型,就必然存在一個(gè)回歸誤差S(m)最小的模型。一般情況下,隨著m增大,S(m)先由大變小,超過某個(gè)值后又開始變大。在S(m)由大變小然后又開始變大時(shí)停止計(jì)算,取S(m)最小的那個(gè)模型為最優(yōu)模型,不計(jì)算其他子集模型。由于擔(dān)心S(m)出現(xiàn)波浪形或純遞減變化,因此本文沒有采用這種方法。
方法3:從只含1個(gè)自變量的子集模型開始篩選,當(dāng)自變量個(gè)數(shù)超過某個(gè)值時(shí),會出現(xiàn)所有子集模型都不能通過t 檢驗(yàn)的情況,此時(shí)不再對更多自變量的子集模型進(jìn)行篩選。本文采用的是方法3。詳見圖1。
圖1 一般全子集模型篩選流程圖
進(jìn)行全子集模型篩選時(shí),在自變量個(gè)數(shù)不多的情況下,計(jì)算量不大。例如,當(dāng)自變量個(gè)數(shù)為15 時(shí),理論上要進(jìn)行32767次回歸和比較,實(shí)際上當(dāng)子集模型中的自變量超過一定個(gè)數(shù)后,會因?yàn)闊o顯著性模型而中止計(jì)算,計(jì)算次數(shù)通常不會達(dá)到最大值。但是,如果備選的自變量個(gè)數(shù)太多,則進(jìn)行全子集模型篩選的計(jì)算量非常大,甚至大到無法計(jì)算。例如,30 個(gè)自變量的全子集個(gè)數(shù)是1073741823個(gè)。因此,本文設(shè)計(jì)了一種多步篩選法。
根據(jù)組合原理,從全部自變量(k個(gè))中取1個(gè)、2個(gè)或取k個(gè)、k-1個(gè)自變量進(jìn)行組合生成的子集模型個(gè)數(shù)最少,取k/2(或(k±1)/2)個(gè)自變量進(jìn)行組合生成的子集模型個(gè)數(shù)最多。多步篩選法的原理是:不對全部子集模型進(jìn)行計(jì)算和比較,只對包含1、2、k、k-1個(gè)自變量的子集模型進(jìn)行顯著性篩選,然后找出最優(yōu)模型。分三步計(jì)算:
第一步:向前選擇顯著變量。
(1)篩選出含1個(gè)和2個(gè)自變量的初始最優(yōu)模型,計(jì)算次數(shù)為+。篩選出的最優(yōu)模型可能只有1 個(gè)自變量,也可能有2 個(gè)自變量。一般地,在自變量個(gè)數(shù)較多的情況下,初始篩選出來的2個(gè)自變量模型比1個(gè)自變量模型更優(yōu),計(jì)算時(shí)會自動識別,為簡化敘述,后面假設(shè)第一次篩選的最優(yōu)模型有2個(gè)自變量。
(2)從全部自變量中剔除這2 個(gè)自變量,再從不包含這2個(gè)自變量的其他自變量中取2個(gè)自變量進(jìn)行組合,共有個(gè)子集;把每個(gè)子集中的2個(gè)自變量與已經(jīng)篩選出來的2個(gè)自變量合并,共有4個(gè)自變量;然后對4個(gè)自變量的3個(gè)和4個(gè)自變量子集模型進(jìn)行篩選??偣驳挠?jì)算次數(shù)是。
(3)假設(shè)已經(jīng)篩選出m個(gè)自變量,重復(fù)前面的步驟:從k-m個(gè)自變量中取2 個(gè)自變量進(jìn)行組合,形成個(gè)子集,每個(gè)子集的2個(gè)自變量與前面已經(jīng)篩選出來的m個(gè)自變量合并,再在m+1、m+2 個(gè)自變量的子集中篩選最優(yōu)模型,總共的計(jì)算次數(shù)是。如果篩選結(jié)果沒有增加自變量,則停止計(jì)算;否則,按此方法繼續(xù)篩選。
(4)經(jīng)過多輪篩選后,假設(shè)篩選出了p個(gè)自變量,為了防止還有重要自變量被遺漏,再從被篩選掉的k-p個(gè)自變量中選擇2 個(gè)自變量,形成個(gè)子集,并與原先篩選得到的p個(gè)自變量合并,得到p+2 個(gè)自變量,然后對自變量為p和p+1 個(gè)的子集進(jìn)行篩選,總共的計(jì)算次數(shù)是,這次篩選可能會讓新加入的2 個(gè)自變量替換原來p個(gè)變量中的1 個(gè)或2 個(gè),得到S 更小的模型,篩選結(jié)果會得到進(jìn)一步優(yōu)化。
這種篩選自變量的方法看起來與向前回歸方法類似,但原理完全不同:它的每一步計(jì)算都是已經(jīng)篩選出來的自變量與未被篩選的自變量重新進(jìn)行組合,形成新的子集模型并進(jìn)行計(jì)算比較,如果發(fā)現(xiàn)更優(yōu)的模型,則繼續(xù)尋找,否則就終止。
計(jì)算中發(fā)現(xiàn):有時(shí)候2個(gè)以上具有特殊關(guān)系的自變量一起進(jìn)入模型可以使模型擬合效果更優(yōu),但計(jì)算量會大大增加。本文討論的算法一般是每一輪篩選只添加2個(gè)或3個(gè)自變量(每一輪添加k個(gè)自變量進(jìn)行篩選就是一般全子集模型篩選)。
第二步:向后刪除不顯著變量。
先用全部自變量回歸,刪除t統(tǒng)計(jì)量不顯著且t統(tǒng)計(jì)量絕對值最小的自變量;再用剩余的自變量回歸,用同樣的方法刪除不顯著的自變量,直到模型中所有自變量的t統(tǒng)計(jì)量都顯著。這種方法就是向后回歸法,那些具有特殊關(guān)系的自變量會被一起保留下來。
第三步:合并顯著變量并進(jìn)行子集篩選。
把第一步和第二步篩選出來的顯著變量合并在一起,假設(shè)第一步篩選出p1個(gè)自變量,第二步篩選出p2個(gè)自變量,合并在一起,刪除相同的自變量后,自變量的個(gè)數(shù)是p3(p1+p2-重復(fù)個(gè)數(shù))。
第三步:合并顯著變量并進(jìn)行子集篩選
把第一步和第二步篩選出來的顯著變量合并在一起,假設(shè)第一步篩選出p1個(gè)自變量,第二步篩選出p2個(gè)自變量,合并在一起并刪除重復(fù)的自變量后,自變量的個(gè)數(shù)是p3(p1+p2-重復(fù)個(gè)數(shù)),然后篩選p0,…,p3個(gè)自變量的子集,其中,p0=max(p1-2,p2-2,1)。p1-2,p2-2 的目的是看在增加了其他自變量后,自變量個(gè)數(shù)少于p1(或p2)是否存在更優(yōu)模型。在多次試算中,p0=max(p1-2,p2-2,1)與p0=max(p1,p2,1)的計(jì)算結(jié)果無差別,前者計(jì)算量大些,但p0=max(p1-2,p2-2,1)可能會有更優(yōu)(S 更?。┑哪P停訴BA 計(jì)算程序中使用的是p0=max(p1-2,p2-2,1)。
例如:有30 個(gè)自變量,第一步篩選出來13 個(gè),第二步篩選出來15 個(gè),其中10 個(gè)相同,合并后的自變量個(gè)數(shù)是18個(gè),則包含15、16、17、18個(gè)自變量的全部子集模型中至少有一個(gè)t統(tǒng)計(jì)量顯著且S最小的模型。
多步篩選法的流程圖如圖2所示。
圖2 多步全子集模型篩選流程圖
(1)操作界面
圖3所示的窗體是一個(gè)操作界面,通過窗體設(shè)置相關(guān)功能和進(jìn)行操作。
圖3 全子集篩選方法操作界面
(2)參數(shù)設(shè)置
①數(shù)據(jù)表選擇:將一個(gè)模型的數(shù)據(jù)存放在一個(gè)工作表中,不同模型的數(shù)據(jù)存放在不同工作表中,可以選擇不同的工作表進(jìn)行分析。
②數(shù)據(jù)類型包含時(shí)間序列數(shù)據(jù)和橫截面數(shù)據(jù),時(shí)間序列類型又分為年度、季度等。
③回歸系數(shù)約束分為:回歸系數(shù)無約束、全部回歸系數(shù)大于0約束、全部回歸系數(shù)小于0約束。
④回歸估計(jì)方法分為:一般全子集模型篩選法、多步全子集模型篩選法、普通最小二乘法三種。
⑤模型形式分為:線性模型、對數(shù)模型、指數(shù)模型、倒數(shù)模型等十多種模型。
⑥顯著性水平:1%~10%,也可以輸入其他值,用于計(jì)算t統(tǒng)計(jì)量的臨界值。
⑦滯后期:時(shí)間序列模型設(shè)置滯后期后可以派生出因變量和自變量的滯后變量。
⑧樣本數(shù)據(jù)選擇:可以設(shè)置樣本數(shù)據(jù)起始點(diǎn),截取中間一部分?jǐn)?shù)據(jù)進(jìn)行分析。
(3)VBA關(guān)鍵算法
①生成自變量子集函數(shù):VBA 自定義函數(shù),生成自變量子集的VBA 算法程序,輸入自變量后生成自變量的全部子集。
②回歸估計(jì)和檢驗(yàn):基于EXCEL中的LINEST函數(shù)計(jì)算回歸系數(shù)、t統(tǒng)計(jì)量、R2、S、RSS、AIC、BIC統(tǒng)計(jì)量,并對回歸系數(shù)進(jìn)行t檢驗(yàn)。
③模型篩選函數(shù):VBA自定義函數(shù),輸入全部變量,輸出最優(yōu)模型,并保存全部統(tǒng)計(jì)顯著性模型。
④預(yù)測和誤差分析:篩選出最優(yōu)模型后,在數(shù)據(jù)表最后一列插入以EXCEL 公式形式計(jì)算的回歸值、誤差值及其他重要統(tǒng)計(jì)信息,可以選擇1~10個(gè)模型進(jìn)行聯(lián)合預(yù)測。
⑤過程保存:將所有t 檢驗(yàn)顯著的模型用文本文件的形式保存起來,可以對全部顯著性子集模型進(jìn)行統(tǒng)計(jì)分析,比較不同模型篩選方法的差異。
選擇線性回歸模型的情況比較多,有時(shí)為了達(dá)到更好的擬合效果或?qū)崿F(xiàn)特定的分析目的,需要選擇其他形式的計(jì)量模型。本文研究的算法提供了多個(gè)可供選擇的典型模型,包括:線性模型、雙對數(shù)模型、自變量對數(shù)模型、因變量對數(shù)模型、雙倒數(shù)模型、自變量倒數(shù)模型、因變量倒數(shù)模型、雙指數(shù)模型、自變量指數(shù)模型、因變量指數(shù)模型、雙差分模型、自變量差分模型、因變量差分模型、雙速度模型、自變量速度模型、因變量速度模型等,以供在不同目的、不同情形下使用。
回歸模型引入虛擬變量,可以用加法原則(將虛擬變量視為普通變量加入模型)、乘法原則(將虛擬變量與所有普通變量相乘后加入模型)或混合原則(虛擬變量既作為普通變量加入模型,又與其他普通變量相乘后加入模型),構(gòu)造新的回歸模型。
加法原則影響模型截距,乘法原則影響斜率。進(jìn)行模型篩選就是假設(shè)事先不能判定屬于哪種情況,所以要用混合原則。一元回歸模型加入一個(gè)虛擬變量時(shí)會變成三元回歸模型。
如果時(shí)間序列模型中既有虛擬變量又有滯后變量,那么乘法原則只對當(dāng)期自變量起作用,不影響自變量的滯后變量。例如:yt=a0+b1xt+b2xt-1+ut,采用混合原則引入虛擬變量D后變成yt=a0+a1D+b1xt+b2xt-1+b3xtD+ut。
時(shí)間序列模型中引入滯后變量主要是為了反映客觀現(xiàn)象的滯后影響,加入滯后變量后可以改變模型形式和提高擬合效果。
以季度時(shí)間序列模型為例,設(shè)一個(gè)滯后變量(滯后期為4)派生出來的滯后變量模型有:
滯后變量模型一:
滯后變量模型二:
滯后變量模型三:
滯后變量模型四:
滯后變量模型三和模型四包含因變量的滯后變量,有自回歸性質(zhì),但若因變量的變化趨勢發(fā)生改變,則會增加預(yù)測誤差;滯后變量模型一和模型三派生出的自變量很多,計(jì)算量很大,但模擬效果最好;用滯后若干期均值做滯后變量,派生出的自變量最少,計(jì)算量最小,在模型中可以反映時(shí)間序列的趨勢性、季節(jié)波動性(滯后3 期平均就是為了保留時(shí)間序列的季節(jié)波動性),還可以在一定程度上減弱自變量異常值對后期預(yù)測結(jié)果的影響。
在回歸系數(shù)無約束條件下,全部子集模型中,S 最小的就是最優(yōu)模型。如果要約束自變量的回歸系數(shù)全部大于0(或全部小于0,或其他約束),就只能在約束條件下選擇S 最小的模型。除了可以通過變換模型的數(shù)學(xué)形式達(dá)到設(shè)定目的外,用全子集模型搜索不失為最有效的方法。但約束模型系數(shù)后,擬合效果會降低。
有些自變量理論上是模型不可缺少的,為了保證它不被篩選掉,可以將它排斥在被篩選的子集之外(不放在任何一個(gè)子集中),然后再篩選最優(yōu)模型。
根據(jù)本文設(shè)計(jì)的算法,只有當(dāng)期自變量可以設(shè)置為關(guān)鍵自變量,滯后變量不能設(shè)置為關(guān)鍵自變量。關(guān)鍵自變量不能選擇太多,一到兩個(gè)即可,如果選擇太多,關(guān)鍵變量之間、關(guān)鍵自變量與其他自變量之間存在的多重共線性問題會導(dǎo)致一些重要自變量不能被選入模型,從而降低模型的擬合效果。
綜合前文分析,本文得出如下結(jié)論:
(1)評價(jià)模型好壞的標(biāo)準(zhǔn)不是唯一的,從某種意義上講,根本不存在理論上的最優(yōu)模型,所以想找到一個(gè)最優(yōu)模型是不可能的,即使用全子集篩選法找到了S最小的模型,其預(yù)測結(jié)果也未必是最好的。
(2)以S 最小為標(biāo)準(zhǔn)篩選模型只是方法之一,這個(gè)規(guī)則清晰且易于實(shí)現(xiàn),是一個(gè)非常好的規(guī)則,但不能認(rèn)為它是最好的規(guī)則,不同方法篩選出來的模型都有價(jià)值且不具有可比性。
(3)對于帶滯后變量的模型,如果S相差不大,滯后變量和回歸系數(shù)看似差異很大,但不同滯后期對因變量的影響平均之后的作用方向、影響程度差別其實(shí)并不大,不同模型之間沒有本質(zhì)上的區(qū)別。
(4)全子集篩選法可以篩選出很多有價(jià)值的模型,用于研究一些重要統(tǒng)計(jì)量的統(tǒng)計(jì)規(guī)律。例如,用多個(gè)優(yōu)選出來的模型進(jìn)行聯(lián)合預(yù)測、邊際效應(yīng)分析、彈性系數(shù)分析等,可避免某個(gè)模型的偶然性。
(5)VBA 編程不僅用戶界面友好,而且前期的資料準(zhǔn)備和后期的計(jì)算分析、結(jié)果整理,以及與WORD、PPT、統(tǒng)計(jì)分析軟件進(jìn)行數(shù)據(jù)交換都極其方便。