如何檢測異方差並糾正它?
線性迴歸一個重要的假設就是殘差沒有異方差性。簡單來說就是殘差的方差不會隨著響應變數的擬合值而增加。在本篇文章,我會解釋為什麼檢測異方差性是重要的?如何檢測模型的異方差性?如果存在,如何通過R程式碼來糾正這個問題。這個過程有時也被稱為殘差分析。
為什麼檢測異方差很重要?
一旦你建立線性迴歸模型,通常都要檢測殘差的異方差性。原因是我們想要檢測建立的模型能否解釋響應變數Y的一些模式,而它最終是顯示在殘差上的。如果存在異方差,得到的迴歸模型是低效並且不穩定的,後面就有可能會得到奇怪的預測結果。
如何檢測異方差?
下面通過R內建的cars資料集得到的一個迴歸模型來做說明。首先通過lm()函式來建立模型: lmMod <- lm(dist ~ speed, data=cars) # initial model 現在,模型已經準備好了。下面通過兩種方式來檢測異方差: 1.圖形法 2.統計檢驗
圖形法 par(mfrow=c(2,2)) # init 4 charts in 1 panel plot(lmMod) 圖形如下: 我們感興趣的是左上角和左下角的兩幅圖。左上角是殘差對擬合值作圖。而左下角是標準化殘差對擬合值作圖。如果完全沒有異方差,你應該會看到一個完全隨機的,點在整個X軸範圍內是均勻分佈的,並且得到的是一條平坦的紅線。
但在這個案例中,從左上圖可以看出紅線稍微有些彎曲,殘差似乎隨著擬合值的增大而上升。因此,推測異方差是存在的。
統計檢驗
有時你可能需要一個演算法來檢測異方差。以便自動的量化它的存在並作出修改。這裡有兩種檢驗方法來判斷異方差是否存在—Breush-Pagan檢驗和NCV檢驗。
Breush Pagan 檢驗 lmtest::bptest(lmMod) # Breusch-Pagan test studentized Breusch-Pagan test
data: lmMod
BP = 3.2149, df = 1, p-value = 0.07297
NCV檢驗
car::ncvTest(lmMod) # Breusch-Pagan test
Non-constant Variance Score Test
Variance formula: ~ fitted.values
Chisquare = 4.650233 Df = 1 p = 0.03104933
在給定顯著性水平0.05的情況下,這兩個檢驗的P值都很小。因此我們可以拒絕殘差的方差是恆定的零假設,並推斷出異方差確實是存在的,從而證實了上面的圖形推斷。
如何糾正異方差?
重新構建預測模型
變數變換,如Box-Cox變換
Box-Cox變換
Box-Cox變換是一種將變數轉化為近似正態分佈的數學變換。通常情況下,對Y變數做Box-Cox變換可以解決這個問題,這正是我要做的。 library(caret) distBCMod <- caret::BoxCoxTrans(cars$dist) print(distBCMod) Box-Cox Transformation
50 data points used to estimate Lambda
Input data summary: Min. 1st Qu. Median Mean 3rd Qu. Max. 2.00 26.00 36.00 42.98 56.00 120.00
Largest/Smallest: 60 Sample Skewness: 0.759
Estimated Lambda: 0.5
由Box-Cox變換得到的模型物件已經有了,現在把它應用到car$dist上並新增到一個新的資料框。
cars <- cbind(cars, dist_new=predict(distBCMod, cars$dist)) # append the transformed variable to cars
head(cars) # view the top 6 rows
speed dist dist_new
1 4 2 0.8284271
2 4 10 4.3245553
3 7 4 2.0000000
4 7 22 7.3808315
5 8 16 6.0000000
6 9 10 4.3245553
針對新的迴歸模型,變換後的資料已經有了。現在開始建立模型並檢查異方差。
lmMod_bc <- lm(dist_new ~ speed, data=cars)
bptest(lmMod_bc)
studentized Breusch-Pagan test
data: lmMod_bc BP = 0.011192, df = 1, p-value = 0.9157 對於P值為0.91,我們不能拒絕零假設(殘差的方差是恆定的)。因此推斷殘差的方差是相同的。同樣地,用圖形來檢查下異方差。 plot(lmMod_bc) 圖形如下: 左上圖的線更加扁平並且殘差是均勻分佈的。因此,異方差的問題已經解決了。
本文由雪晴資料網負責翻譯整理,原文請參考How to detect heteroscedasticity and rectify it?作者Selva Prabhakaran。轉載請註明原文連結http://www.xueqing.cc/cms/article/113
相關文章
- 差錯檢測和糾正 (轉)
- 07_異方差
- 異常檢測
- MATLAB計算變異函式並繪製經驗半方差圖Matlab函式
- 序列異常檢測
- appium 如何檢測頁面文案是否正確APP
- 華為AGC提包檢測報告:檢測異常GC
- HACCP原理——糾正措施(轉載)
- 如何糾正六西格瑪專案中出現的問題?
- 閒魚如何高效承接並處理使用者糾紛
- APISpace的 人臉檢測API 它來啦~API
- 【機器學習】李宏毅——Anomaly Detection(異常檢測)機器學習
- 異常聲音檢測總結
- 如何理解並正確使用 MySQL 索引MySql索引
- 如何使用方差分析(ANOVA)?
- 準實時異常檢測系統
- C++檢測異常assert()函式C++函式
- 如何在實際場景中使用異常檢測?阿里雲Prometheus智慧檢測運算元來了阿里Prometheus
- 糾正了一直的理解誤區
- 關於如何使用機器學習來做異常檢測的7個問題機器學習
- 複雜異常檢測如何快速落地?看看百度怎麼做
- 如何解決資料庫分詞的拼寫糾正問題-PostgreSQLHunspell字典複數形容詞動詞等變異還原資料庫分詞SQL
- 並行Louvain社群檢測演算法並行AI演算法
- 軟體測試報告可作哪些用途?如何正確選擇軟體檢測機構?測試報告
- 方差
- 均值、方差、協方差、協方差矩陣、特徵值、特徵向量矩陣特徵
- 異常點檢測演算法小結演算法
- 機器學習-異常檢測演算法(二):LocalOutlierFactor機器學習演算法
- 錄製回放效果差異檢測 | 自動化測試
- 中介軟體自定義檢測 JWT 並通過自定義異常丟擲錯誤--筆記JWT筆記
- 如何檢測 SAP 電商雲 Spartacus UI 當前正處於導航狀態UI
- java 英文單詞拼寫糾正框架(Word Checker)Java框架
- 資料庫死鎖排查思路分享(糾正篇)資料庫
- HttpClient遭遇Connection Reset異常,如何正確配置?HTTPclient
- java 實現中英文拼寫檢查和錯誤糾正?可我只會寫 CRUD 啊!Java
- 在Linux中,如何檢視和審計系統日誌檔案以檢測異常活動?Linux
- 檢測並排除記憶體洩漏 (轉)記憶體
- 演算法金 | 協方差、方差、標準差、協方差矩陣演算法矩陣