我應該如何在[0,∞][0,∞][0, infty]範圍?
我有一個從 0 到無窮大的因變量,其中 0 實際上是正確的觀察值。我了解審查和 Tobit 模型僅適用於實際值部分未知或丟失,在這種情況下,數據被稱為截斷。有關此線程中審查數據的更多信息。
但這裡的 0 是屬於總體的真實值。在此數據上運行 OLS 會遇到一個特別煩人的問題,即進行負估計。我應該如何建模?
> summary(data$Y) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.00 0.00 0.00 7.66 5.20 193.00 > summary(predict(m)) Min. 1st Qu. Median Mean 3rd Qu. Max. -4.46 2.01 4.10 7.66 7.82 240.00 > sum(predict(m) < 0) / length(data$Y) [1] 0.0972098
事態發展
閱讀答案後,我報告了使用略有不同的估計函數的 Gamma 障礙模型的擬合。結果讓我很驚訝。首先讓我們看一下DV。顯而易見的是極其肥尾的數據。這對擬合度的評估產生了一些有趣的影響,我將在下面評論:
quantile(d$Y, probs=seq(0, 1, 0.1)) 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.286533 3.566165 11.764706 27.286630 198.184818
我構建了 Gamma 跨欄模型如下:
d$zero_one = (d$Y > 0) logit = glm(zero_one ~ X1*log(X2) + X1*X3, data=d, family=binomial(link = logit)) gamma = glm(Y ~ X1*log(X2) + X1*X3, data=subset(d, Y>0), family=Gamma(link = log))
最後,我使用三種不同的技術評估了樣本內擬合:
# logit probability * gamma estimate predict1 = function(m_logit, m_gamma, data) { prob = predict(m_logit, newdata=data, type="response") Yhat = predict(m_gamma, newdata=data, type="response") return(prob*Yhat) } # if logit probability < 0.5 then 0, else logit prob * gamma estimate predict2 = function(m_logit, m_gamma, data) { prob = predict(m_logit, newdata=data, type="response") Yhat = predict(m_gamma, newdata=data, type="response") return(ifelse(prob<0.5, 0, prob)*Yhat) } # if logit probability < 0.5 then 0, else gamma estimate predict3 = function(m_logit, m_gamma, data) { prob = predict(m_logit, newdata=data, type="response") Yhat = predict(m_gamma, newdata=data, type="response") return(ifelse(prob<0.5, 0, Yhat)) }
起初,我通過通常的度量來評估擬合:AIC、零偏差、平均絕對誤差等。但是查看上述函數的分位數絕對誤差突出了一些與結果為 0 的高概率和極端肥尾巴。當然,誤差隨著 Y 值的增加呈指數增長(Max 處的 Y 值也非常大),但更有趣的是,嚴重依賴 logit 模型來估計 0 會產生更好的分佈擬合(我不會不知道如何更好地描述這種現象):
quantile(abs(d$Y - predict1(logit, gamma, d)), probs=seq(0, 1, 0.1)) 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 0.00320459 1.45525439 2.15327192 2.72230527 3.28279766 4.07428682 5.36259988 7.82389110 12.46936416 22.90710769 1015.46203281 quantile(abs(d$Y - predict2(logit, gamma, d)), probs=seq(0, 1, 0.1)) 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 0.000000 0.000000 0.000000 0.000000 0.000000 0.309598 3.903533 8.195128 13.260107 24.691358 1015.462033 quantile(abs(d$Y - predict3(logit, gamma, d)), probs=seq(0, 1, 0.1)) 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 0.000000 0.000000 0.000000 0.000000 0.000000 0.307692 3.557285 9.039548 16.036379 28.863912 1169.321773
審查與膨脹與障礙
審查、障礙和膨脹模型通過在現有概率密度之上添加點質量來工作。不同之處在於添加質量的位置以及添加方式。現在,只考慮在 0 處添加一個點質量,但這個概念很容易推廣到其他情況。
所有這些都意味著某些變量的兩步數據生成過程:
- 繪製判斷是否或者.
- 如果,繪製以確定的值.
充氣和跨欄模型
膨脹(通常是零膨脹)和障礙模型都通過明確和單獨指定來工作,因此 DGP 變為:
- 畫一次從獲得實現.
- 如果, 放.
- 如果, 從並設置.
在充氣模型中,. 在跨欄模型中,. 這是唯一的區別。
這兩種模型都導致具有以下形式的密度:
在哪裡是指標函數。也就是說,點質量只是簡單地添加到零,在這種情況下,質量只是. 您可以自由估算直接,或設置 對於一些可逆的像 logit 函數。也可以依賴. 在這種情況下,該模型通過“分層”邏輯回歸來工作在另一個回歸模型下.
審查模型
刪失模型還會在邊界處增加質量。他們通過“切斷”一個概率分佈,然後在那個邊界“聚集”多餘的部分來實現這一點。概念化這些模型的最簡單方法是根據潛在變量帶 CDF. 然後. 這是一個非常通用的模型;回歸是一種特殊情況,其中依賴於取決於.
觀察到的然後假設與經過:
這意味著形式的密度
並且可以很容易地擴展。
把它放在一起
看密度:
並註意它們都具有相同的形式:
因為他們實現了相同的目標:為通過添加點質量到一些密度. 膨脹/障礙模型集通過外部伯努利過程。刪失模型確定通過“切斷”在邊界處,然後在該邊界處“聚集”剩餘的質量。
事實上,你總是可以假設一個“看起來像”審查模型的障礙模型。考慮一個障礙模型,其中參數化為和參數化為. 然後你可以設置. 逆 CDF 始終是邏輯回歸中的有效鏈接函數,並且邏輯回歸被稱為“邏輯”的一個原因實際上是標準 logit 鏈接實際上是標準邏輯分佈的逆 CDF。
您也可以在這個想法上繞圈子:具有任何反向 CDF 鏈接(如 logit 或 probit)的伯努利回歸模型可以概念化為具有觀察 1 或 0 的閾值的潛在變量模型。刪失回歸是隱含潛在變量的障礙回歸是相同的.
你應該使用哪一個?
如果您有一個引人注目的“審查故事”,請使用審查模型。Tobit 模型(刪失高斯線性回歸的計量經濟學名稱)的一種經典用法是對“最高編碼”的調查響應進行建模。工資通常以這種方式報告,所有高於某個臨界值(例如 100,000)的工資都被編碼為 100,000。這與截斷不同,工資超過 100,000 的個人根本不會被觀察到。這可能發生在僅對工資低於 100,000 的個人進行的調查中。
正如 whuber 在評論中所描述的,審查的另一個用途是當您使用精度有限的儀器進行測量時。假設您的測距設備無法區分 0 和. 然後你可以審查你的分佈.
否則,障礙或膨脹模型是安全的選擇。假設一般的兩步數據生成過程通常是沒有錯的,它可以提供一些您可能沒有的數據洞察力。
另一方面,您可以使用沒有審查故事的審查模型來創建與障礙模型相同的效果,而無需指定單獨的“開/關”過程。這是Sigrist 和 Stahel (2010)的方法,他們審查偏移的 gamma 分佈,就像在. 那篇論文特別有趣,因為它展示了這些模型的模塊化程度:您實際上可以對審查模型進行零膨脹(第 3.3 節),或者您可以將“潛在變量故事”擴展到幾個重疊的潛在變量(第 3.1 節)。
截斷
編輯:已刪除,因為此解決方案不正確