首页 > 其他分享 >12_面板数据

12_面板数据

时间:2024-05-03 22:13:12浏览次数:20  
标签:12 True self lm lin data 面板 数据 exog

第12章 面板数据

面板数据

12.1 面板数据的特点

定义 面板数据
一段时间内跟踪同一组个体的数据。

分类:

分类 分类准则 特点
短面板 n、T的大小 n小、T大
长面板 n大、T小
动态面板 是否有被解释变量滞后项
静态面板*
平衡面板* 每个时期样本中的个体是否完全相同
非平衡面板
*:重点关注的类型

优点:

  • 可以解决遗漏变量问题
    • 前提是个体差异不随时间而改变
  • 提供更多个体动态行为的信息
  • 样本容量较大

12.2 面板数据的估计策略

基本思路:

  1. 最容易想到的办法:混合回归
    • 直接把全部数据混合起来用做回归分析
      • 假定了每个个体拥有完全相同的回归方程
    • 忽略了个体不可观测的异质性,而异质性可能与解释变量相关,导致估计不一致。
  2. 另一个办法:每个个体估计单独的回归方程
    • 样本不足,尤其是短面板
  3. 只能折中:个体效应模型
    • 假定个体的回归方程拥有相同斜率,但截距项不同
      • 用于捕捉异质性
    • 模型:$$y_{it}=x_{it}’\beta+z_i\delta+u_i+\epsilon_{it} \tag{12.3}$$
      • \(z_i\) :不随时间变化的个体特征
      • \(x_{it}\) :可随时间和个体变化
      • \(u_i+\epsilon_{it}\) :复合扰动项
        • \(u_i\) :个体效应,个体异质性的截距项
          • 固定效应模型:与某个解释变量相关
          • 随机效应模型:与所有解释变量均不相关
        • \(\epsilon_{it}\):个殊性扰动项,可随个体和时间变化
          • 一般假设iid
          • 与 \(u_{it}\) 相互独立

12.3 混合回归

如果面板数据中个体都拥有完全相同的回归方程,个体效应 \(u_i=\alpha\) 为常数,就变成了多元线性回归模型。可以直接使用OLS进行回归。

  • 基本假设是不存在个体效应,因此需要进行统计检验。
    • 固定效应
      • 个体固定效应
        • 组内估计量
        • LSDV法
        • 一阶差分法
      • 时间固定效应
        • LSDV法
    • 随机效应
      • 准离差模型:FGLS法
      • 组间估计量

聚类(cluster):每个个体不同时期的所有观测值
聚类样本:样本可分为不同的聚类,同一聚类的观测值相关,不同聚类不相关。
聚类稳健的标准误:聚类样本仍可进行OLS估计,但需要使用聚类稳健标准误

  • 是真实标准误的一致估计
  • 是异方差稳健的标准误
  • 更适用于T>n的情况

12.4 固定效应模型:组内估计量

因 \(u_i\) 与某解释变量相关,OLS不一致。所以,可通过变换模型消除个体效应 \(u_i\) 。

  1. (12.3)两边对时间取平均值 $$\overline y_i = \overline x_i'\beta+z_i'\delta + u_i + \overline \epsilon_i \tag{12.4}$$
  2. (12.3)-(12.4)

\[\widetilde{y_i} = \widetilde{x}_{it}'\beta + \widetilde{ \epsilon_{it}} \tag{12.6} \]

  1. 使用OLS估计出固定效应估计量 \(\beta\),记为\(\hat \beta_{FE}\),也称 组内估计量

组内估计量的特点:

  • 【优点】:即使个体效应与解释变量相关,也可得到一致估计
  • 可能存在自相关,应使用以每个个位为聚类的聚类稳健标准误
  • 【缺点】:无法估计 \(\delta\)

12.5 固定效应模型:LSDV法

针对 \(u_i\) ,传统上将其视为个体 i 的待估参数——截距项。

  1. 引入(n-1)个 个体虚拟变量。模型变为$$\overline y_i = \alpha+\overline x_i'\beta+z_i'\delta + \sum_{i=2}^n\gamma_iD_i + \overline \epsilon_i \tag{12.7}$$
  2. 用OLS估计(12.7),称为最小二乘虚拟变量法(Least squares dummy variable)

LSDV的特点:

  • 【优点】:可以得到对个体异质性 \(u_i\) 的估计
  • 【缺点】:如果n很大,将引入特别多的虚拟变量

12.6 固定效应模型:一阶差分法

对(12.3)两边做一阶差分可消除个体效应,也可用OLS估计一阶差分估计量\(\beta\) ,记为 \(\hat \beta_{FD}\)。

12.7 时间固定效应

有时可能存在随时间变化的遗漏变量,比如宏观经济环境。在(12.3)中加入时间固定效应(\(\lambda_t\)):$$y_{it}=x_{it}’\beta+z_i\delta+\lambda_t+u_i+\epsilon_{it} \tag{12.10}$$

  • 使用LSDV法估计,引入T-1个时间虚拟变量$$y_{it}=\alpha+x_{it}’\beta+z_i\delta+\sum_{t=2}^T\gamma_tD_t+u_i+\epsilon_{it} \tag{12.11}$$
  • 有时为节省参数,可引入时间趋势项:$$y_{it}=x_{it}’\beta+z_i\delta+\gamma t+u_i+\epsilon_{it} \tag{12.12}$$

通过检验时间虚拟变量的联合显著性来判断是否应使用双向固定效应模型。

12.8 随机效应模型

因为存在自相关性,所以OLS不是最有效率的,可进行FGLS估计。

  1. 使用(12.20)来估计 \(\theta\),$$\hat\theta \equiv1-\frac{\hat\sigma_{\epsilon}}{\sqrt{T\hat\sigma_u2+\hat\sigma_{\epsilon}2}} \tag{12.20}$$
    • \(\sigma_u^2 + \sigma_{\epsilon}^2\):用 OLS的残差 进行估计
    • \(\sigma_{\epsilon}^2\):用 FE的残差 进行估计
  2. 再用FGLS估计原模型,即可得到随机效应估计量(random effects estimatior),记为 \(\hat\beta_{RE}\)

假设扰动项服从正态分布,可写出样本的似然函数,可以使用MLE。

12.9 组间估计量

对(12.4)进行OLS回归得到组间估计量,记为\(\hat\beta_{BE}\) 。

\[\overline y_i = \overline x_i'\beta+z_i'\delta + u_i + \overline \epsilon_i \tag{12.21} \]

12.10 拟合优度的度量

整体 \(R^2\) = \([Corr(y_{it},x_{it}'\hat\beta+z_i'\hat\delta)]^2\)

  • 对应原模型(12.3):\(\overline y_i = \overline x_i'\beta+z_i'\delta + u_i + \overline \epsilon_i\)

组内 \(R^2\) = \([Corr(\widetilde{y}_{it},\widetilde{x}_{it}'\hat\beta)]^2\)

  • 组内离差模型(12.6):\(\widetilde{y_i} = \widetilde{x}_{it}'\beta + \widetilde{ \epsilon_{it}}\)

组间 \(R^2\) = \([Corr(\overline y_{it},\overline x_{it}'\hat\beta+z_i'\hat\delta)]^2\)

  • 对时间求平均值的模型(12.21):\(\overline y_i = \overline x_i'\beta+z_i'\delta + u_i + \overline \epsilon_i\)

12.11 非平衡面板

每个时期观测到的个体不完全相同,称为非平衡面板。

  • 模型中运用了对时间的离差或平均值的,均没有影响。

12.12 究竟该用固定效应还是随机效应模型

原假设:\(H_0\):\(u_i\) 与 \(x_{it}\),\(z_i\) 不相关 (随机效应模型为正确模型)

  • 原理:
    • FE 两种模型下 都是一致的
    • RE 如果成立,效率比FE高
    • 都收敛于真实值
  • 使用Hausman检验统计量
    • 存在异方差情况,需使用异方差稳健的hausman检验

12.13 面板模型的python命令及实例

1.面板数据的设定

import pandas as pd
import statsmodels.api as sm
from linearmodels.panel import PanelOLS, PooledOLS, RandomEffects, FirstDifferenceOLS,BetweenOLS
class Dataset:

    def __init__(self, data):
        self.data_original = data
        self.data = self._int_data()
        self.exog = self._init_exog(lm=False)
        self.endog = self.data['ltvfo']
        self.data_lm = self.data.set_index(['prov', 'year'])
        self.exog_lm = self._init_exog(lm=True)
        self.dept_lm = self.data_lm[['ltvfo']]
        self.exog_lm_dv_n = self._init_exog(lm=True, dv='entity')
        self.exog_lm_dv_t = self._init_exog(lm=True, dv='time')

    def _int_data(self):
        self.data_original['year_d'] = self.data_original['year'].astype(str)
        self.data_original['prov_d'] = self.data_original['prov'].astype(str)
        data = self.data_original.dropna()

        return data

    def _init_exog(self,lm=True, dv = None):
        if lm:
            exog =  self.data_lm[[
	            'ltlan',  'ltwlab', 'ltpow',
	            'ltfer',  'hrs',    'mipric1', 
                'giprice','mci',    'ngca'
                ]]
            if dv == 'entity':
                exog =  self.data_lm[[
                'ltlan',   'ltwlab', 'ltpow', 
                'ltfer',   'hrs',    'mipric1', 
                'giprice', 'mci',    'ngca',
                'prov_d'
                ]]
            if dv == 'time':
                exog =  self.data_lm[[
                'ltlan',   'ltwlab', 'ltpow', 
                'ltfer',   'hrs',    'mipric1', 
                'giprice', 'mci',    'ngca',
                'year_d'
                ]]
        else:
            exog = self.data[[
                'ltlan',   'ltwlab', 'ltpow', 
                'ltfer',   'hrs',    'mipric1', 
                'giprice', 'mci',    'ngca',
            ]]
        exog = sm.add_constant(exog)
        return exog

data = pd.read_stata('../2_Data/Data-2e/lin_1992.dta')
lin = Dataset(data)

2.混合回归

model = PooledOLS(dependent=lin.dept_lm, exog=lin.exog_lm)
result = model.fit(cov_type='clustered', # 采用聚类标准误
                   cluster_entity=True, # 按个体进行聚类
                   group_debias=True)  # 是否按照个体数n进行聚类
print(result.summary)

3.固定效应

个体固定效应

(1)组内估计
mod = PanelOLS(dependent=lin.dept_lm, exog=lin.exog_lm, entity_effects=True)
fe_res = mod.fit(use_lsdv=False,
                 cov_type='clustered',
                 cluster_entity=True,
                 group_debias=True)

(2)虚拟变量

如果要把虚拟变量的参数也显示出来,需要使用exog= lin.exog_lm_dv_n

mod = PanelOLS(dependent=lin.dept_lm, exog= lin.exog_lm_dv_n) # exog需要调整
fe_res = mod.fit(use_lsdv=True,
                 cov_type='clustered',
                 cluster_entity=True,
                 group_debias=True
                 )
print(fe_res)
(3)一阶差分法
mod = FirstDifferenceOLS(dependent=lin.dept_lm, 
						 exog=lin.exog_lm.drop(columns=['const']))
fe_res = mod.fit(cov_type='robust',
                 )
print(fe_res)

双向固定

(1)加入时间趋势项
panel_lin = lin.data_lm

exog = panel_lin[[
    'ltlan', 'ltwlab', 'ltpow','ltfer','hrs','mipric1','giprice','mci','ngca','t'
    ]] # 增加了时间趋势变量't'
exog = sm.add_constant(exog)

mod = PanelOLS(dependent=lin.dept_lm, exog=exog, entity_effects=True)
fe_res = mod.fit(cov_type='clustered',
                 cluster_entity=True,  
                 group_debias=True
                 )
print(fe_res)
(2)加入时间虚拟变量

需要删除mipric1giprice全国各地都一样,会出现严格多重共线,导致虚拟变量失效,删掉。

mod = PanelOLS(dependent=lin.dept_lm,
			   exog= lin.exog_lm_dv_t.drop(['mipric1','giprice'], axis=1),
			   entity_effects=True)
res= mod.fit(cov_type='clustered', cluster_entity=True, group_debias=True)
print(res)

如果不需要显示虚拟变量的结果,直接使用:

mod = PanelOLS(dependent=lin.dept_lm, 
			   exog= lin.exog_lm,
			   entity_effects=True, 
			   time_effects=True, 
			   drop_absorbed=True)
fe_res = mod.fit(use_lsdv=True, cov_type='clustered',
                 cluster_entity=True, group_debias=True)
print(fe_res)

4.随机效应

mod = RandomEffects(dependent=lin.dept_lm, exog= lin.exog_lm.drop(['mipric1','giprice'], axis=1))
re_res = mod.fit(
          #   cov_type='clustered',
          #   cluster_entity=True,
          #   group_debias=True
                 )
print(re_res)

5.豪斯曼检验

import numpy as np
import scipy.stats as stats

mod = PanelOLS(dependent=lin.dept_lm, exog=lin.exog_lm.drop(['mipric1','giprice'], axis=1), entity_effects=True)
fe_res = mod.fit()

b_diff = fe_res.params - re_res.params
v_diff = fe_res.cov - re_res.cov
df = len(fe_res.params)

table = pd.DataFrame({'FE': fe_res.params,
                      'RE':re_res.params,
                      'dif.':b_diff,
                      'SE(dif.)':np.sqrt(np.diag(v_diff))
                      }, index=fe_res.params.index)
chi2 =  np.dot(b_diff.T,np.linalg.inv(v_diff).dot(b_diff))
p = 1- stats.chi2.cdf(chi2, df)

print(table)
print('=================================================')
print('Chi-squared:', chi2)
print('degrees of freedom:', df)
print(f'p-value:{p:.4f}')
print('=================================================')

6.组间统计量

mod = BetweenOLS(dependent=lin.dept_lm, exog= lin.exog_lm.drop(['mipric1','giprice'], axis=1))
bt_res = mod.fit()
print(bt_res)

标签:12,True,self,lm,lin,data,面板,数据,exog
From: https://www.cnblogs.com/watalo/p/18171649

相关文章

  • Codeforces 1129E Legendary Tree
    考虑让选取的集合更加特殊,不妨就让\(S=\{x\}\)。那么这个时候能发现询问\((S=\{x\},T,v)\)得到的就是以\(x\)为根时\(v\)的子树内\(T\)中的点的数量。考虑定个根,不妨为\(1\),同时令\(S=\{1\}\)。那么询问\((\{1\},\{1,\cdotsn\}\backslash\{1,x\},x)......
  • mumu模拟器 MuMuManager.exe是MuMu模拟器12新加入的工具
    前言全局说明MuMuManager.exe是MuMu模拟器12新加入的工具官方说明:https://mumu.163.com/help/20230504/35047_1086360.html一、说明MuMu模拟器12的调用程序MuMuManager.exe在模拟器的安装目录下可以找到,如“X:\ProgramFiles\Netease\MuMuPlayer-12.0\shell>MuMuManager......
  • P2573 [SCOI2012] 滑雪
    原题链接题解这题乍一看好像是一道最小生成树的模板题,但如果直接找模板打会发现WA。仔细一看这题是有向图的最小生成树,可以直接套朱刘算法,but,我还不会······直接套模板的反例3321125132231所以我们再分析题目,发现只要把山的高度设为第一优先级,边的权值......
  • 深入 Django 模型层:数据库设计与 ORM 实践指南
    title:深入Django模型层:数据库设计与ORM实践指南date:2024/5/318:25:33updated:2024/5/318:25:33categories:后端开发tags:DjangoORM模型设计数据库关系性能优化数据安全查询操作模型继承第一章:引言Django是一个基于Python的开源Web应用程序框架,它......
  • Oracle之数据库一致性读的原理
    1.概述在Oracle数据库中,undo主要有三大作用:提供一致性读(ConsistentRead)、回滚事务(RollbackTransaction)以及实例恢复(InstanceRecovery)。2.原理一致性读是相对于脏读(DirtyRead)而言的。假设某个表T中有10000条记录,获取所有记录需要15分钟时间。当前时间为9点整,某用户A发出一条......
  • WPF上位机 - S7.NETPlus批量读取数据
    在编写上位机程序中,需要读取PLC数据。使用到了S7.NETPlus这个库。S7.NETPlus提供了很多读取和写入数据的方式。大批量读取数据的方式包括一下几个方法ReadbytesReadClassReadStructReadMultipleVarsPLC侧的数据是一个Array的UDT数据,其中UDT中还包含了很多的UDT。在使用库......
  • python教程3.1:数据类型:字符串+列表list
    一、字符串字符串是⼀个有序的字符的集合,⽤于在计算机⾥存储和表示⽂本信息 常用操作二、列表list[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表⼀个元素特征 1、增加操作   追加,数据会追加到尾部 2、删除操作3、修改操作 4、查找操作 如果......
  • python教程2:变量+数据类型+运算符
    一、变量程序是从上到下依次逐⾏执⾏的,所以变量必须先定义,后调⽤,否则会报错变量定义规范 二、数据类型1、数字类型可⽤type()⽅法来查看数据类型 2、字符串多引号多引号什么作⽤呢?作⽤就是多⾏字符串必须⽤多引号字符串拼接3、布尔类型布尔类型很简单,就两个......
  • 数据库隔离级别
    1.概述数据库事务的隔离级别有4个,由低到高依次为Readuncommitted、Readcommitted、Repeatableread、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。脏读不可重复读幻读Readuncommitted√√√Readcommitted×√√Rep......
  • Oracle23ai 数据库的简单验证
    Oracle23ai数据库的简单验证背景2024年5.1期间发现有公众号再说Oracle23c使用容器方式进行安装的感觉可以试用把玩一下.简单安装dockerpullcontainer-registry.oracle.com/database/free:latest运行timedockerrun-d--nameoracle23ai-horacle23ai\--net......