如何在R中制作面板数据互相关矩阵?示例代码疑问求解
R面板数据互相关矩阵及示例代码疑问解答
1. rep生成的grp变量作用及自定义应用方法
作用
示例里的grp是手动创建的分组标记变量:rep(1,100)把前100行数据归为组1,rep(2,50)把接下来50行归为组2,rep(3,50)把最后50行归为组3。它的核心作用是告诉cortab函数,要把输入的面板数据分成3个独立子集,分别计算每个子集的互相关矩阵,最终输出分组后的对比结果。
应用到自身数据集的方法
不用照搬示例的rep写法,按需调整即可:
- 若数据集已有现成分组变量(如企业类别、地区、时间区间),直接提取:
# 假设你的面板数据是my_pdata,用"region"列做分组依据 grp <- my_pdata$region - 若需自定义分组:
- 按时间拆分:比如把2010年前的数据归为组1,之后归为组2
grp <- ifelse(my_pdata$year < 2010, 1, 2) - 按行数均分:比如把200行数据分成4组,每组50行
grp <- rep(1:4, each = 50)
cortab会报错。如果是面板数据,尽量避免把同一个个体拆分到不同组(除非分析需求明确要求)。 - 按时间拆分:比如把2010年前的数据归为组1,之后归为组2
2. 为什么cortab要指定pGrunfeld$value列
cortab(来自plm包)的第一个参数要求输入宽格式的数值型矩阵/数据框——即每一行对应一个面板个体(如企业),每一列对应一个时间点的数值。
pGrunfeld是用pdata.frame()转换后的面板数据对象,它的$value属性会自动把长格式面板数据转成宽格式数值矩阵:原长格式里的数值列(如"invest""value""capital")会被整理成按个体和时间排列的宽矩阵,同时剔除个体ID、时间等非数值标识列。
如果直接把整个pGrunfeld数据框传给cortab,里面包含非数值的面板标识列,或是仍为长格式结构,cortab无法识别并计算互相关,因此必须指定$value来提取符合要求的宽格式数值矩阵。
自身数据集的用法示例
# 1. 加载包并转换面板数据 library(plm) my_pdata <- pdata.frame(your_raw_data, index = c("firm", "year")) # 替换为你的个体、时间列名 # 2. 无分组计算互相关矩阵 cortab(my_pdata$value) # 3. 按自定义分组计算 grp <- my_pdata$industry # 假设用行业分组 cortab(my_pdata$value, grouping = grp, groupnames = unique(my_pdata$industry))
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

