@fanxy
2020-04-05T05:14:31.000000Z
字数 6252
阅读 4217
樊潇彦 复旦大学经济学院 金融数据
setwd("D:\\...\\Ch07")rm(list=ls())install.packages(c("multcomp","HH","MASS")) # 方差分析install.packages(c("AER","plm")) # 面板数据模型load("Ch06_Data.RData")
广义线性模型(Generalized linear model)是线性模型在以下两方面的推广:
| 模型类别 | 连接函数 | 误差项 的分布 |
|---|---|---|
| 线性模型 | 线性函数 | 高斯分布(正态分布) |
| Logit 模型 | Logist函数 | 二项分布 |
| Probit 模型 | 正态累积分布函数 | 二项分布 |
# Logit模型fit.logit <- glm(ynaffair ~ age + yearsmarried + religiousness + rating,data=glmdata, family=binomial())summary(fit.logit)# Probit模型fit.probit <- glm(ynaffair ~ age + yearsmarried + religiousness + rating,data=glmdata, family = binomial(link = "probit"))summary(fit.probit)# 模型预测与比较:其他变量取均值,看随着婚姻质量的变化,发生婚外情的概率如何变化testdata <- data.frame(rating = c(1, 2, 3, 4, 5),age = mean(glmdata$age),yearsmarried = mean(glmdata$yearsmarried),religiousness = mean(glmdata$religiousness))testdata$pre_logit <- predict(fit.logit, newdata=testdata, type="response")testdata$pre_probit <- predict(fit.probit, newdata=testdata, type="response")# 比较两种模型的预测结果,相差很小round(data.frame(testdata$pre_logit,testdata$pre_probit),3)
当影响因素 是离散变量时,按照 将数据 分组,将总方差 分解为组间方差(因素效应 )和组内方差(误差效应 ),进而分析各部分对总变异的贡献。
以单因素一元分析为例,推导过程如下:
其中 为各组均值, 为总平均值。
# 单因素一元分析library(multcomp)data(litter)attach(litter)aggregate(weight, by=list(gesttime), FUN=mean) # 分组均值aov1 <- aov(weight ~ gesttime) # 服药时间单因素summary(aov1)## 从F-statistic和p-value来看,等同于线性回归:ols1 <- lm(weight ~ gesttime, litter)summary(ols1)# 双因素一元分析aov2 <- aov(weight ~ gesttime + dose) # 服药时间和剂量双因素,无交互项summary(aov2)library(HH)ancova(weight ~ gesttime + dose, data=litter) # 做图查看aov2c <- aov(weight ~ gesttime * dose) # 服药时间和剂量双因素,有交互项summary(aov2c)ancova(weight ~ gesttime * dose, data=litter)detach(litter)# 单因素多元分析library(MASS)attach(UScereal)y <- cbind(calories, fat, sugars) # 3个被解释变量aggregate(y, by=list(shelf), FUN=mean) # 分组计算均值fit <- manova(y ~ shelf) # 一个因素对多元变量做方差分析summary(fit) # 报告结果summary.aov(fit) # 对每个被解释变量报告结果detach("UScereal")
如果要分析多家上市公司历年的数据,就要用到面板数据模型:
固定效应(fixed effects)模型:
随机效应(random effects)模型:
library(AER)data(Grunfeld)gr=subset(Grunfeld, firm %in% c("General Electric","General Motors", "IBM"))## 选取三个公司的数据,设置为面板library(plm)pgr=pdata.frame(gr,c("firm","year"))## 混合数据回归(POOL)gr_pool=plm(invest~value+capital, data=pgr, model="pooling")summary(gr_pool)gr_ols=lm(invest~value+capital, data=gr) # 等同于OLS回归summary(gr_ols)## 固定效应(FE)gr_fe=plm(invest~value+capital, data=pgr, model="within")summary(gr_fe)## 随机效应(RE)gr_re=plm(invest~value+capital, data=pgr, model="random", random.method="walhus")summary(gr_re)## Hausman检验phtest(gr_re,gr_fe) # 如果拒绝H0应选择固定效应模型
当解释变量包含被解释变量的滞后项时,有动态面板数据模型:
Arellano and Bond(1991):差分广义矩(DIF-GMM)方法
先对原模型做一阶差分:
Blundell and Bond(1998):系统广义矩(SYS-GMM)方法
根据原方程有:
对此Blundell and Bond(1998)提出可以把原方程和差分方程联立、同时回归。由于 ,因此用 作为原方程 的工具变量。
data("EmplUK", package = "plm")## Arellano and Bond (1991), Table 4bz1 <- pgmm(log(emp) ~ lag(log(emp), 1:2) + lag(log(wage), 0:1)+ log(capital) + lag(log(output), 0:1) | lag(log(emp), 2:99),data = EmplUK, effect = "twoways", model = "twosteps")summary(z1)## Blundell and Bond (1998) Table 4 (cf DPD for OX p.12 col.4)z2 <- pgmm(log(emp) ~ lag(log(emp), 1)+ lag(log(wage), 0:1) +lag(log(capital), 0:1) | lag(log(emp), 2:99) +lag(log(wage), 2:99) + lag(log(capital), 2:99),data = EmplUK, effect = "twoways", model = "onestep",transformation = "ld")summary(z2, robust = TRUE)