根據Econometrics in R一書,將回歸方法總結一下

文章出處:http://cos.name/cn/topic/3272/page/2


3、Cross Sectional Regression
3.1 最小二乘法
    有三種方式可以實現最小二乘法的簡單線性迴歸,假設數據byu
(1)lm(byu$salary ~ byu$age + byu$exper)
(2)lm (salary ~ age + exper, data= byu)
(3)attach(byu)
    lm(salary~age+exper)
    lm()只能得出迴歸係數,要想得到更爲詳盡的迴歸信息,應該將結果作爲數據保存或者使用“擬合模型”(fitted model)
result<-lm(salary~age+ exper + age*exper, data=byu)
summary(result)
myresid<-result$resid #獲得殘差
vcov(result) #針對於擬合後的模型計算方差-協方差矩陣
    迴歸中允許使用諸如log()和sqrt()等相對複雜的項目作爲自變量,但如果設計冪,就必須先計算,然後才能迴歸;或者使用I(),它可以在對公式估值前強制完成計算
salary$agesq <- (salary$age)^2
result <- lm(salary ~ age + agesq + log(exper) + age*log(exper),data=byu)
    或者
result <- lm(salary ~ age + I(age^2) + log(exper) + age*log(exper),data=byu)
    如果我們要進行無常數項,一般在迴歸中引入0
result <- lm(smokes ~ 0 + male + female ,data=smokerdata)
3.2 從迴歸中提取統計量
    一些統計量和參數都被存儲在lm或者summary中
output <- summary (result)
SSR<- deviance(result)#殘差平方和;(另一種方法:RSquared <- output$r.squared)
LL<- logLik(result) #對數似然統計量
DegreesOfFreedom<- result$df #自由度
Yhat<- result$fitted.values #擬合值向量
Resid<- result$residuals
s<- output$sigma #誤差標準差的估計值(假設同方差)
CovMatrix <- s^2*output$cov #係數的方差-協方差矩陣(與vcov()同)
3.3 異方差及相關問題
3.3.1 異方差的Breusch-Pagan檢驗
    爲了檢驗異方差是否存在,我們可以用lmtest包中的Breusch-Pagan檢驗。或者利用car包中的ncv.test()函數。二者工作的原理都是相同的。在迴歸之後,我們可以對擬合的模型採用bptest()函數
unrestricted<- lm(z~x)
bptest(unrestricted)
這將得到檢驗的“學生化的”(studentized)結果。如果爲了保持與其他軟件結論的一致性(包括ncv.test()),我們可以設置studentize=FALSE
3.3.2 異方差(自相關)穩健性協方差矩陣
  在存在異方差的情況下,ols的估計是無偏的,但是所得到的關於β係數方差的估計則是不正確的。爲了計算異方差一致性的協方差矩陣,我們可以利用car包中的hccm()函數,而不是vcov()。
sandwich包中的vcovHC()命令可以實現同樣的功能。同時利用vcovHAC()或者NeweyWest()函數可以進行異方差和自相關穩健性Newey—West估計。

####################

還有一章節,special regression,這個可能是計量中用的比較多的迴歸,比如logit,probit,還有tobit迴歸模型,以及M估計,穩健方法等等。
另外關於一般的lm方法由於用到的是ols或者稱爲lse方法,所以不存在log likelihood的說法,所以求出來的Loglik值可能沒有意義的說。
另外用splus算過probit和logit迴歸,然後使用loglik函數得到的值竟然是錯誤的,手動演算一下跟書上一樣,參考武德里奇的《計量》一書中離散選擇模型第一五章的第一個例子。

####################

3.4 線性假設檢驗(Wald和F)
  car包中提供了一個函數可以自動的進行線性假設檢驗。根據我們對模型的設定,它既可以用一般的方法或調整後的協方差矩陣進行F或Wald檢驗。爲了進行假設檢驗,我們必須構造一個假設矩陣和一個右手邊的向量。例如,如果我們有一個包括常數項的五個參數的模型,並且我們的零假設如下(見原文)

則假設的矩陣和右手邊的向量將爲如下的形式(見原文)

    我們可以用如下的命令加以實現
unrestricted<-lm(y~x1+x2+x3+x4)
rhs<-c(0,1)
hm<-rbind<-(c(1,0,0,0,0),c(0,0,1,1,0))
linear.hypothesis(unrestricted,hm,rhs)
  注意:如果unrestricted是由lm得到的,默認狀態下將會進行F檢驗。如果是由glm得到的,取而代之的將是Kai方檢驗。檢驗的類型可以通過type進行修改。
  同樣,如果我們想利用異方差或自相關穩健標準誤進行檢驗,我們既可以通過設定white.adjust=TRUE來使用white標準誤,也可以利用vcov計算我們自己的協方差矩陣。例如,如果我們想使用上述的Newey-West修正協方差矩陣,我們可以進行如下的設定:
linear.hypothesis(unrestricted, hm, rhs, vcov=NeweyWest(unrestricted))
注意:設定white.adjust=TRUE將會通過提高white估計量的精度來修正異方差;如果要使用經典的white估計量,我們可以設定white.adjust="hc0"
3.5 加權和廣義最小二乘法
  你可以通過使用帶有權重的lm()來進行加權最小二乘
result<-lm(smokes~0+male+female, data=smokerdata, weights=myweights)
廣義最小二乘法可以通過MASS包中的lm.gls()命令實現。它將包含一個函數、權重矩陣和一個數據框(可選)。
  glm()命令也爲使用其他高級線性迴歸方法提供了渠道,詳見幫助文件。
3.6 帶有因子(Factors)或組別(Groups)的模型
  在R中對於定性的因子有特定的數據類型。如果迴歸中的變量屬於這種情況,必要的虛擬變量將會被自動生成。例如,如果我們要進行個人電腦的使用(pc)對公司僱員數(emple)和每一種狀態的虛擬變量(其中state是兩個縮寫字母的向量),我們可以簡單的進行如下的迴歸
summary(lm(pc~emple+state)
Call:
lm(formula = pc ~ emple + state)
Residuals:
Min 1Q Median 3Q Max
-1.7543 -0.5505 0.3512 0.4272 0.5904
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.572e-01 6.769e-02 8.232 <2e-16 ***
emple 1.459e-04 1.083e-05 13.475 <2e-16 ***
stateAL -4.774e-03 7.382e-02 -0.065 0.948
stateAR 2.249e-02 8.004e-02 0.281 0.779
stateAZ -7.023e-02 7.580e-02 -0.926 0.354
stateDE 1.521e-01 1.107e-01 1.375 0.169
...
stateFL -4.573e-02 7.136e-02 -0.641 0.522
stateWY 1.200e-01 1.041e-01 1.153 0.249
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4877 on 9948 degrees of freedom
Multiple R-Squared: 0.02451, Adjusted R-squared: 0.01951
F-statistic: 4.902 on 51 and 9948 DF, p-value: < 2.2e-16
    爲了將數據(序列string型或者數值型)轉變成一個因子,可以簡單的使用factor()命令。甚至可以在迴歸中間使用這個命令。例如,如果我們想做同樣的迴歸,但是要區分以數字編碼代表的不同區域,我們可以用如下的命令
myout<-lm(pc~emple+factor(naics6))
這一命令將naic6轉換成了因子,生成了相應的虛擬變量,進而進行標準的迴歸。

####################

4. 特殊迴歸
4.1 固定和隨機效應模型
注意:這裏所用的“固定”和“隨機”的概念與計量經濟學家通常使用的概念相同。
    經濟學中,固定和隨機效應是用來解釋面板數據(panel data)模型的截距項中的截面(cross sectional)差異的。令i表示截面指標(或表示數據是有組別的),t爲時間指標(或爲組別差異指標)。一個標準的固定效應模型可以寫作(參照原文)

    本質上說,每一個個體都有不同的非隨時間變化的截距項。通常我們感興趣的是β,而不是ui。隨機效應模型有同樣的方程,但是相對固定效應模型而言,它有附加的限制:個體特殊的效應與解釋變量x(it)不相關,即E[uiXit] = 0。從計量經濟學的角度講,這只是一個在固定效應模型的基礎上,附有更加嚴格的限制條件的模型(它允許“效應”與外生變量相關)。
4.1.1 固定效應
  在截面數據的維數不大的情況下,進行固定效應估計的簡單方法是在每一個個體中加入一個虛擬變量,即將截面指標視爲一個因子。如果指標能夠在樣本中將個體識別出來,則有
lm(y~factor(index)+x)
  這個迴歸可以進行固定效應估計並能夠正確的報告β的標準誤。但不幸的是,在樣本中存在很多個體的情況下,我們不再關心固定效應的值。因此在這種情況下,lm()的結果以及u(i)較大的係數都是非常難於處理的。
  一個更一般的方法是通過time demeaning(翻譯不好,請大家幫助)的方法將每個變量的固定效應剔除(所謂內部within估計量)。則上述方程變爲:(參照原文)

多數的統計軟件(例如stata的xtreg命令)都使用這種方法處理固定效應模型。使用R,你可以手工對自變量和因變量進行time demean。如果d是一個包含 year, firm, profit和predictor的數據框,同時我們希望time demean每一個公司的profit和predictor,我們可以使用如下的命令:
> g<-d
> for (i in unique(d$firm)){
+ timemean<-mean(d[d$firm==i,])
+ g$profit[d$firm==i]<-d$profit[d$firm==i]-timemean["profit"]
+ g$predictor[d$firm==i]<-d$predictor[d$firm==i]-timemean["predictor"]
+ }
> output<-lm(profit~predictor,data=g)
要注意的是,迴歸中所報告的標準誤偏低。lm()報告的方差使用的公式爲
而真正的固定效應迴歸中的標準誤使用的公式爲(參照原文)
對於T較小的樣本,二者之間存在較爲顯著的差異。
    另一種並不常用的方法是用一階差分,公式爲(參照原文)
其手工計算方法可以參照上述的within estimator
4.1.2 隨機效應模型
    nlme包包括了在線性或非線性數據框中進行隨機效應迴歸的方法(而不是固定效應,本文只涉及對“固定效應”項的統計解釋)。
假設存在如下的以sic3編碼爲隨機效應的線性模型
    我們可以用下列命令進行擬合
lme(ldsal~lemp+ldnpt,random=~1|sic3)
一般而言,在隨機參數模型中,隨機效應被置於豎線之後。波浪線和豎線之間的1表示隨機效應是一個截距項。如果隨機效應是一個截距項和一個外生變量,我們應當將該變量與1放在一起。例如:
lme(ldsal~lemp+ldnpt,random=~1+lemp|sic3)
對應於 
對於非線性隨機效應模型而言,只是將lme()替換爲nlme()就可以了。

#####################

4.2 定性相應模型(Qualitative Response)
4.2.1 Logit/Probit     
    有很多種方法可以在R中實現logit和probit迴歸。最簡單的方法是使用glm()命令及相應的選項。
h<-glm(c~y,family=binomial(link="logit"))
對於probit迴歸,將logit替換爲probit即可。glm()函數的輸出結果與lm()的類似,因此可以使用summary()命令加以分析。爲了從中提取出對數似然統計量,可以使用logLik()命令
> logLik(h)
‘log Lik.’ -337.2659 (df=1)
4.2.2 多項式Logit (Multinormial Logit)
    在nnet包中有一個multinom()函數可以用來進行多項式Logit估計。爲了使用這一函數,首先應該將因變量轉化成一個因子向量(包括所有情況),並且使用諸如正態迴歸這樣的語法(syntax)。如果我們的因子以虛擬變量的形式被儲存,則我們可以利用十進制數字的特徵爲所有的組合賦予唯一的因子。假如我們的因子變量是pc,inetacc和iapp,那麼
> g <- pc*1 + inetacc*10 + iapp*100
> multinom(factor(g)~pc.subsidy+inet.subsidy+iapp.subsidy+emple+msamissing)
這樣,我們利用所有因子的組合得到了一個多項式Logit。
    多項式Probit模型的一個特徵就是常被ill conditioned(如何譯?)。一個解決的方法是使用MNP包中的mnp()命令進行馬爾可夫鏈蒙特卡羅模擬。
4.2.3 Ordered Logit/Probit
    MASS包中有一個polr()函數可以進行ordered logit或probit迴歸。如果Sat表示一個順序(ordered)的因子向量,則
    house.plr <- polr(Sat ~ Infl + Type + Cont, method="probit")
4.3 Tobit和階段(Censored)迴歸
    我們用survival包來估計存在截斷數據變量的模型。使用的函數是survreg(),其中將因變量作爲一個Surv對象。假設我們要進行y對x和z的迴歸,但是大量的y數據是左側截斷的,並用0將其替換。
result <- survreg(Surv(y,y>0,type='left') ~ x + z, dist='gaussian')
第二點需要注意的是無論觀測值是否是截斷的,都可以使用Surv()函數(1表示是可以被觀測的;0表示數據是截斷的)。第三點需要說明的是,數據在哪一側被截斷。既然本例中數據在分佈的低尾(lower tail)處被截斷,我們使用left。dist選項對於survreg是必需的,這樣才能得到一個經典的Tobit模型。
4.4 分位數迴歸
    最小二乘迴歸方法可以估測因變量對自變量的條件期望。擬合值即是條件均值的估計。如果我們不想得到條件均值,而想估計預期條件中位數或其他分位數的話,我們可以使用quantreg包中的rq()命令。語法與lm()基本相同,除了我們要使用一個介於0和1之間的分位數tau。默認的情況下,tau=.5,即爲中位數,另一個名字是最小絕對偏差迴歸(least absolute deviation regression)
4.5 穩健性迴歸——M估計量
    對於一些數據集,奇異值對最小二乘迴歸線的影響遠遠超出了我們的預想。一個解決的辦法是使用包括殘差平方和(對應於最小化L2)在內的一些方法求極小值並以此作爲目標方程。通常的選擇是使用絕對離差和(L1)和Huber法——一種將L1和L2混合的方法。R使用MASS包中的rlm()進行穩健性迴歸。語法與lm()相同除了它允許選擇最小化作爲目標方程。進行這種選擇可以使用參數psi。可能的選項包括psi.huber, psi.hampel, psi.bisquare。
    爲了進行psi函數的定製,我們寫了一個函數,如果deriv=0,函數返回ψ(x)/x;如果deriv=1,返回ψ′(x)/x。This function than then be passed to rlm() using the psi parameter.#不清楚函數內容及語意。
4.6 非線性最小二乘
    有些時候,經濟中的模型並不是線性的。R可以進行如下形式的廣義最小二乘

注意,殘差項必須是附加在函數形式上的。如果不是,則必須進行相應的變換以達到這種形式。R中進行非線性最小二乘的函數是nls(),其語法與lm()相同。考慮如下的非線性例子:

nls()用來估計第二個方程的第一個部分。方程的全部內容都需要被指定,包括參數。R要求指定待估參數的初始值。
result <- nls(log(Y)~-log(1+exp(a*X1+b*X2)),start=list(a=1,b=1),data=mydata)
  a和b的估計值被存放於nls的對象中,稱作result。估計結果可以用summary()命令進行瀏覽。在高版本的R中,nls()命令是基本包中的一部分,而在低版本中,則必須加載nls包。
4.7單一結構方程的兩階段最小二乘
    爲了實現單一方程的兩階段最小二乘,最簡單的方法是使用sem包中的tsls()命令。如果我們想考察在控制了婚姻狀況的情況下,教育對工資的影響,但是考慮到educ可能是內生的,則我們可能會使用motheduc和fatheduc作爲工具變量進行迴歸
library(sem)
outputof2sls<-tsls(lwage~educ+married,~married+motheduc+fatheduc)
    第一點需要說明的是我們進行估計的是一個結構性方程;第二,波浪線後面需要附加結構性方程中的工具變量和外生變量,這些條件的滿足需要下面的2SLS估計量滿足
    輸出結果可以用summary()函數和其他ols函數進行分析。注意,既然這個命令輸出的是兩階段最小二乘的對象,包括標準誤在內的描述性統計量都是正確的。如果我們用實際的兩階段方法進行估計,則輸出的標準誤是存僞的。
4.8 方程組
  用於處理方程組(包括工具變量、兩階段最小二乘、似不相關回歸[seemingly unrelated regression]
和變量)的命令包含在systemfit包中。注意,在R中,一個方程(包括標題)就恰恰是一種數據類型。因此,我們可以通過通常的賦值運算來構造方程模型列表以及相應的標籤列表。
> demand <- q ~ p + d
> supply <- q ~ p + f + a
> system <- list(demand,supply)
> labels <- list("demand","supply")
4.8.1 似無關回歸
一旦我們建立了系統和標籤,我們就可以使用systemfit()函數結合SUR選項來識別似無關回歸。
> resultsur <- systemfit("SUR",system,labels)
4.8.2 方程組的兩階段最小二乘
可以使用工具變量來對上述的方程組進行兩階段最小二乘。我們創建一個模型對象(不包含左側)來表示我們要使用的工具變量和2SLS選項
> inst <- ~ d + f + a
> result2sls <- systemfit("2SLS",system,labels,inst)
與之相類似,我們還會遇到三階段最小二乘、加權兩階段最小二乘和相應的其他模型。

####################

about fixed- and random-effect model, can refer to plm package.
about multinomial logit model, can refer to mlogit package.
about tobit model, refer to sampleSelection package.

####################

頗值得一提的是,迴歸中最緊要看residuals plot,

example(plot.lm)

####################
發佈了53 篇原創文章 · 獲贊 97 · 訪問量 70萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章