Data-Transformation
選擇 c 使得 log(x + c) 將消除總體偏斜
我有數據,我想在進行 OLS 之前對其進行日誌轉換。數據包括零。因此,我想做一個日誌(x + c)。我知道要選擇的傳統 c 是 1。我想知道是否有辦法讓數據選擇 c,這樣就不會再使用樣本均值或方差等特徵出現偏差了?有公式嗎?
因為本意是做OLS,所以選擇應該在這種情況下進行。
一般來說,我們應該適合 與其餘的回歸*同時進行。*一種快速而骯髒的方法是認識到回歸與對數似然成正比,因此我們可以尋求最大化.
這是在參數化變換族中選擇問題的一個特殊示例以達到最佳的擬合解釋值. 這可以
R
相當簡單直接地解決:xform <- function(f, theta, x, y, ...) { g <- function(theta) -summary(lm(f(y, theta) ~ x))$r.squared nlm(g, theta, ...) }
(我忽略了為參數選擇好的起始值的一個有點微妙的問題:否則可能會獲得不好的解決方案
nlm
。探索性數據分析的標準方法將產生不錯的起始值,但這是另一天的主題。)作為使用的一個例子
xform
,讓我們生成一些高度傾斜的數據“開始對數”將產生一個不偏斜的分佈:set.seed(17) y <- sort(exp(rnorm(32, 4, 1))) + 100
顯然是從正態分佈中繪製的。
我將申請
xform
三個選擇:
- 來自哪個值因加性、同方差殘差而異。在這種情況下,取對數是錯誤的: 這是一個嚴重錯誤的關係模型和.
- 來自哪個值乘法對數正態殘差(或多或少)不同。在這種情況下,取對數是一個好主意,因為它會導致一個適合 OLS 回歸的模型。
- 的常數值, 所以實際上我們正在看完全在回歸上下文之外。
在情況(1)和(2)中,我將繪製直方圖(顯示它是高度偏斜的),散點圖反對(展示數據),以及轉換後的散點圖反對用OLS線疊加,看看變換的結果。在第三種情況下,這些散點圖毫無意義,所以我只報告由
xform
.set.seed(17) par(mfrow=c(2,3)) y <- sort(exp(rnorm(32, 4, 1))) + 100 x <- y - rnorm(length(y), 0, 50) hist(y) plot(x,y) const <- xform(function(y,c) log(y+c), 1-min(y), x, y)$estimate plot(x, log(y + const), ylab=sprintf("log(y + %0.1f)", const)) abline(coef(fit1<-lm(log(y+const)~x)), col="Gray") x <- log((1:length(y) + rnorm(length(y), 10, 3))) hist(y) plot(x,y) const <- xform(function(y,c) log(y+c), 1-min(y), x, y)$estimate plot(x, log(y + const), ylab=sprintf("log(y + %0.1f)", const)) abline(coef(fit2<-lm(log(y+const)~x)), col="Gray") x <- rep(1, length(y)) const <- xform(function(y,c) log(y+c), 1-min(y), x, y)$estimate
第一行是第一種情況,第二行是第二種情況。
請注意:
- 這在所有三個實例中的值都是相同的。
- 這值是從一個模型構造的,其中.
- 的擬合值在第一種情況下,, 本質上是無限的。這表明對這些完全取對數是不好的價值觀。(加上這個巨大的價值到在取對數之前基本上不會改變數據的形狀:這就是為什麼頂行的兩個散點圖看起來一樣的原因。)
- 的擬合值在第二種情況下,, 接近於用於生成數據。(重複模擬表明,第二種情況下的擬合值會偏低,平均約為.)
- 的擬合值第三種情況是,仍然接近用於生成數據的值。
如果我們使用“通用”值在第三種情況下發現(基本上通過忽略值),這是散點圖與案例 1 中的值:
對於這些特殊的值,OLS 線適合轉換後的價值觀是對兩者關係的可怕描述和. 注意它是如何低估了但嚴重高估了其中一些之間和.
總之,如果要轉換回歸的響應變量(以實現對稱或線性),則必須考慮回歸本身。 這是因為回歸只“關心”殘差,而不是原始值. 作為非常糟糕的價值在第一個案例中,忽略這個建議可能會產生可怕的結果。