長尾數據如何進行回歸分析?
用爬蟲爬下來了quora上面,climate change主題下一半的問題和回答,以及回答的相關信息,現在想研究回答點贊數受哪些因素(如回答觀看量、作者粉絲數、回答發布時間、回答文本長度、圖片數量、以及文本特徵)的影響,希望建立多元回歸模型。然而,因變數和自變數都不是正態分布的,而是長尾分布(看起來是),由於我沒有學過計量,想請教各位大大,這個模型應該怎麼建,或者就是求合作吧。數據是很棒的,應該能發不錯的文章。
線性回歸里,自變數因變數單獨看如何分布是不重要的,關鍵是誤差項是什麼分布。如果這都是類似的分布,說不定殘差圖反而接近正態分布。比如以下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 + eX &<- cbind(x, 1)beta &<- solve(t(X) %*% X, t(X) %*% y)print(beta)得到參數估計結果:
截距項為0.9909967,x的係數是1.0042641。
e.hat &<- y - X %*% beta
真實殘差分布
估計殘差分布-------------------所以只要誤差項和自變數獨立,就不用擔心其分布如何。計量里最難的問題還是內生性,也就是誤差項和自變數相關的問題。
我覺得可以先用觀察法入手,採用切片法觀察自變數和因變數的關係:
1. 等分自變數的區間為份,每個小區間對因變數求平均值,即第個小區間的因變數的平均值為,標準差;自變數的左端點為2. 對和做回歸,一般可以採用線性回歸,當然視圖形也可以採用二次回歸,假設;對和做回歸,一般可以採用線性回歸,當然視圖形也可以採用二次回歸,假設。3.1 如果每個小區間的因變數都服從正態分布,那麼你容易得到,這種情況下你應該採用高斯回歸(計算時使用極大似然估計估計參數,傳統的最小二乘回歸不合適了)3.2 如果你發現,是較小的誤差項的話,那麼非常幸運的是,你可以採用泊松回歸(計算時仍使用極大似然估計估計參數)3.3 如果你發現,是較小的誤差項的話,那麼非常幸運的是,你可以採用負二項回歸(計算時仍使用極大似然估計估計參數),負二項回歸的尾巴比泊松分布更長4. 如果以上三種情況都不符合或者強行擬合的效果特別不好,那麼就應該再使用其他更加複雜的模型了,這就需要具體問題具體分析,不過總的來說方法還是和上面一樣,只不過需要更換分布的種類,譬如我曾經在研究中就用過zeta分布,雖然效果好一些,但是計算時也更複雜,一般情況不推薦。個人是比較推薦泊松回歸和負二項回歸,因為這兩個在很多情況下都適用,尤其是計數數據;而且R等軟體內有現成的函數可以調用,省去了自己寫程序的麻煩。做多元分析的時候,自變數和因變數的分布不需要考慮。如果你對回歸分析的原理不了解,我建議你直接用已有的回歸方法,直接把數據帶去模型,運行結果。最簡單的就是用多元線性回歸去擬合自變數和因變數的關係。如果你的自變數維數過高,我建議先做變數選擇,可以用向前或者向後選擇自變數方法。如果線性回歸擬合情況不理想,可以試試添加交叉項或者冪函數項,以及其他非線性的函數。你也可以試試神經網路。
好
推薦閱讀: