【发布时间】:2021-03-02 08:53:05
【问题描述】:
我有一个无法解决的问题,我自己尝试了多种方法。
目标:我想对不同事件年份的单个变量进行 Winsorize。
也就是说,我想对每个事件年份 (-5,-4,-3...+4,+5) 的变量 var 1(以及 var 2、var 3 等)的所有观察值进行缩尾处理
想象一下以下数据结构(据我所知,pdata.frame,plm 包的对象,其行为类似于普通数据帧):
#firm-year observations with different numeric variables, sequences only for illustrative purposes, true variables are empirical observations
firms <- c(rep("firm a",11), rep("firm b", 11))
years <- seq(-5,5,1)
var1 <- seq(0,2.1,0.1)
var2 <- seq(0,21,1)
var3 <- seq(0,1,1/21)
#create panel data
df <- data.frame(cbind(firms,years,var1,var2,var3))
library(plm)
p.df <- pdata.frame(df, index=c("firms","years"))
# NAs in my variables exist
p.df[12,3] = NA
p.df[10,5] = NA
p.df
然后我的数据框如下所示:
firms years var1 var2 var3
firm a--1 firm a -1 0.4 4 0.19047619047619
firm a--2 firm a -2 0.3 3 0.142857142857143
firm a--3 firm a -3 0.2 2 0.0952380952380952
firm a--4 firm a -4 0.1 1 0.0476190476190476
firm a--5 firm a -5 0 0 0
firm a-0 firm a 0 0.5 5 0.238095238095238
firm a-1 firm a 1 0.6 6 0.285714285714286
firm a-2 firm a 2 0.7 7 0.333333333333333
firm a-3 firm a 3 0.8 8 0.380952380952381
firm a-4 firm a 4 0.9 9 <NA>
firm a-5 firm a 5 1 10 0.476190476190476
firm b--1 firm b -1 <NA> 15 0.714285714285714
firm b--2 firm b -2 1.4 14 0.666666666666667
firm b--3 firm b -3 1.3 13 0.619047619047619
firm b--4 firm b -4 1.2 12 0.571428571428571
firm b--5 firm b -5 1.1 11 0.523809523809524
firm b-0 firm b 0 1.6 16 0.761904761904762
firm b-1 firm b 1 1.7 17 0.80952380952381
firm b-2 firm b 2 1.8 18 0.857142857142857
firm b-3 firm b 3 1.9 19 0.904761904761905
firm b-4 firm b 4 2 20 0.952380952380952
firm b-5 firm b 5 2.1 21 1
我显然有更多的观察和变量。
我找到的最接近的解决方案是Masato。
但是,Masato 使用的robustHD::winsorize 与具有 NA 的数据不兼容。 DescTools:Winsorize 反过来不接受数据帧,并将我的数据在所有没有意义的可变列上进行winsorize。
我想解决方案在于编写另一个 for 循环并在将它们提取为单个事件年份(-5 到 +5)之后在各个列上使用 DescTools::Winsorize。
另一种方法是让robustHD::winsorize 函数以某种方式处理 NA,并将其应用于 var1 到 var3 的整个帧。
非常感谢您对此提供的帮助,并希望在这里提出您的建议。
最好的问候, 软木塞
【问题讨论】:
标签: r panel-data