@fanxy
2020-04-05T13:14:31.000000Z
字数 6252
阅读 3871
樊潇彦
复旦大学经济学院
金融数据
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 4b
z1 <- 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)