自動模型選擇算法
我想實現一個自動模型選擇的算法。我正在考慮進行逐步回歸,但任何事情都可以(儘管它必須基於線性回歸)。
我的問題是我找不到方法或開源實現(我在 java 中工作)。我想到的方法是這樣的:
- 計算所有因子的相關矩陣
- 選擇彼此相關性較低的因素
- 刪除具有低 t-stat 的因素
- 添加其他因素(仍然基於 2. 中發現的低相關因素)。
- 重複幾次,直到某個標準(例如 AIC)超過某個閾值或不能或我們找不到更大的值。
我意識到有一個 R 實現(stepAIC),但我發現代碼很難理解。我也找不到描述逐步回歸的文章。
我認為這種方法是錯誤的,但如果我解釋原因可能會更有幫助。在給定大量變量的一些信息的情況下,想知道最好的模型是可以理解的。此外,這是一種人們似乎經常發現自己的情況。此外,許多關於回歸的教科書(和課程)都包含逐步選擇方法,這意味著它們必須是合法的。然而不幸的是,它們並非如此,而且這種情況和目標的配對很難成功導航。以下是自動逐步模型選擇過程的問題列表(歸屬於 Frank Harrell,並從此處複製):
- 它產生的 R 平方值嚴重偏高。
- 打印輸出中每個變量旁邊引用的 F 和卡方檢驗沒有聲稱的分佈。
- 該方法產生了錯誤狹窄的效果和預測值的置信區間;參見奧特曼和安徒生 (1989)。
- 它產生的 p 值沒有正確的含義,對它們進行正確的校正是一個難題。
- 它給出了需要收縮的有偏回歸係數(剩餘變量的係數太大;參見 Tibshirani [1996])。
- 在存在共線性的情況下存在嚴重問題。
- 它基於旨在用於檢驗預先指定的假設的方法(例如,嵌套模型的 F 檢驗)。
- 增加樣本量並沒有太大幫助;參見 Derksen 和 Keselman (1992)。
- 它讓我們不去思考問題。
- 它使用大量紙張。
問題是,這些程序有什麼不好/為什麼會出現這些問題?大多數上過基本回歸課程的人都熟悉回歸均值的概念,所以我用它來解釋這些問題。(雖然一開始這似乎離題,請耐心等待,我保證它是相關的。)
想像一下選拔賽第一天的高中田徑教練。三十個孩子出現了。這些孩子有一定程度的內在能力,教練和其他任何人都無法直接接觸到這些能力。結果,教練做了他唯一能做的事情,那就是讓他們都跑100m衝刺。時間大概是他們內在能力的衡量標準,因此被認為是這樣的。但是,它們是概率性的;一個人的表現有一部分是基於他們的實際能力,而一部分是隨機的。想像一下真實情況如下:
set.seed(59) intrinsic_ability = runif(30, min=9, max=10) time = 31 - 2*intrinsic_ability + rnorm(30, mean=0, sd=.5)
下圖顯示了第一場比賽的結果以及教練對孩子們的評價。
請注意,按比賽時間劃分孩子會導致他們的內在能力重疊——這一事實至關重要。在表揚了一些人,並對一些人大喊大叫(就像教練經常做的那樣)之後,他讓他們再次跑步。以下是第二場比賽的結果以及教練的反應(根據上面的同一模型模擬):
請注意,他們的內在能力是相同的,但時間相對於第一場比賽有所反彈。從教練的角度來看,他大喊大叫的人往往會有所改善,而他稱讚的人往往會變得更糟(我根據維基頁面上列出的卡尼曼引文改編了這個具體的例子),儘管實際上回歸均值是一個簡單的數學教練根據部分隨機的測量結果為球隊選擇運動員這一事實的結果。
現在,這與自動(例如,逐步)模型選擇技術有什麼關係?基於同一數據集開發和確認模型有時稱為數據挖掘. 儘管變量之間存在一些潛在的關係,並且預計更強的關係會產生更高的分數(例如,更高的 t 統計量),但這些都是隨機變量,實現的值包含錯誤。因此,當您根據具有更高(或更低)的已實現值來選擇變量時,它們可能是因為它們的潛在真實值、錯誤或兩者兼而有之。如果你以這種方式前進,你會像第二場比賽后的教練一樣感到驚訝。無論您是根據高 t 統計量還是低相關性來選擇變量,這都是正確的。確實,使用 AIC 比使用 p 值要好,因為它會降低模型的複雜性,但 AIC 本身就是一個隨機變量(如果您多次運行研究並擬合相同的模型,AIC 會像其他一切)。很遺憾,
我希望這是有幫助的。