長尾數據如何進行回歸分析?

用爬蟲爬下來了quora上面,climate change主題下一半的問題和回答,以及回答的相關信息,現在想研究回答點贊數受哪些因素(如回答觀看量、作者粉絲數、回答發布時間、回答文本長度、圖片數量、以及文本特徵)的影響,希望建立多元回歸模型。然而,因變數和自變數都不是正態分布的,而是長尾分布(看起來是),由於我沒有學過計量,想請教各位大大,這個模型應該怎麼建,或者就是求合作吧。數據是很棒的,應該能發不錯的文章。


線性回歸里,自變數因變數單獨看如何分布是不重要的,關鍵是誤差項epsilon = Y - Xeta是什麼分布。如果這X,Y都是類似的分布,說不定殘差圖反而接近正態分布。

比如以下R程序所展示的

&> x &<- rexp(100) &> y &<- rexp(100) &> z &<- 3*x + 10*y + rnorm(100) &> hist(x)

&> hist(y)

&> hist(z)

&> mod &<- lm(z ~ x + y) &> mod

Call:
lm(formula = z ~ x + y)

Coefficients:
(Intercept) x y
-0.0821 3.0468 9.9083

&> hist(mod$residual)

可以看出自變數服從長尾分布(這裡設為指數分布),因變數近似服從長尾分布(加入正態雜訊),但殘差項服從正態分布。此時直接回歸併沒有任何理論問題。當然如果你是直接對點贊數那些指標回歸那應該使用計數模型,泊松回歸什麼的。


其實在多數情況下,連誤差項的分布都不是最重要的,因為ols總能給出在最小均方誤意義下對條件期望函數的最優擬合。

最重要的是因果推斷,即那些自變數實際取值為x1的樣本個體,如果取值為x2,因變數會發生怎麼樣的變化。此時會涉及樣本選擇、遺漏變數等內生性問題(據我所知這種問題非常容易出現在網路抓取的數據中)。

希望這個答案對師兄有幫助哈哈@江漢臣

------------------------------

然後手欠驗證了下:

x &<- rexp(1000, 1)

e &<- rexp(1000, 1)

y &<- x + e

X &<- cbind(x, 1)

beta &<- solve(t(X) %*% X, t(X) %*% y)

print(beta)

得到參數估計結果:

截距項為0.9909967,

x的係數是1.0042641。

e.hat &<- y - X %*% beta

真實殘差分布

估計殘差分布

-------------------

所以只要誤差項和自變數獨立,就不用擔心其分布如何。計量里最難的問題還是內生性,也就是誤差項和自變數相關的問題。


我覺得可以先用觀察法入手,採用切片法觀察自變數x和因變數y的關係:

1. 等分自變數的區間為n份,每個小區間對因變數求平均值,即第i個小區間的因變數的平均值為ar{y}_i,標準差sigma_i;自變數的左端點為x_i

2. 對ar{y}_ix_i做回歸,一般可以採用線性回歸,當然視圖形也可以採用二次回歸,假設ar{y}_i = f(x_i);對sigma_ix_i做回歸,一般可以採用線性回歸,當然視圖形也可以採用二次回歸,假設sigma_i = g(x_i)

3.1 如果每個小區間的因變數都服從正態分布,那麼你容易得到y_i ~ sim N( ar{y}_i = f(x_i); sigma_i = g(x_i) ),這種情況下你應該採用高斯回歸(計算時使用極大似然估計估計參數,傳統的最小二乘回歸不合適了)

3.2 如果你發現sigma_i^2 = ar{y}_i + epsilonepsilon是較小的誤差項的話,那麼非常幸運的是y_i ~ sim Pois( ar{y}_i = f(x_i) ),你可以採用泊松回歸(計算時仍使用極大似然估計估計參數)

3.3 如果你發現sigma_i^2 = ar{y}_i + ar{y}_i^2 + epsilonepsilon是較小的誤差項的話,那麼非常幸運的是y_i ~ sim NB( ar{y}_i = f(x_i); sigma_i = g(x_i) ),你可以採用負二項回歸(計算時仍使用極大似然估計估計參數),負二項回歸的尾巴比泊松分布更長

4. 如果以上三種情況都不符合或者強行擬合的效果特別不好,那麼就應該再使用其他更加複雜的模型了,這就需要具體問題具體分析,不過總的來說方法還是和上面一樣,只不過需要更換分布的種類,譬如我曾經在研究中就用過zeta分布,雖然效果好一些,但是計算時也更複雜,一般情況不推薦。

個人是比較推薦泊松回歸和負二項回歸,因為這兩個在很多情況下都適用,尤其是計數數據;而且R等軟體內有現成的函數可以調用,省去了自己寫程序的麻煩。


做多元分析的時候,自變數和因變數的分布不需要考慮。如果你對回歸分析的原理不了解,我建議你直接用已有的回歸方法,直接把數據帶去模型,運行結果。最簡單的就是用多元線性回歸去擬合自變數和因變數的關係。如果你的自變數維數過高,我建議先做變數選擇,可以用向前或者向後選擇自變數方法。如果線性回歸擬合情況不理想,可以試試添加交叉項或者冪函數項,以及其他非線性的函數。你也可以試試神經網路。



推薦閱讀:

什麼是歸一化,適用場景是什麼?請舉個例子說明歸一化帶來的好處是什麼?
對數損失函數是如何度量損失的?

TAG:數據分析 | 數據分析工具 | 統計 | 回歸模型 |