我正在尝试对面板数据和每年进行 Winsorize(用与平均值相差 2 或 3 个标准差的值替换异常值)。我安装了包含这样一个功能的 robustHD 包,但是我无法在我的数据集上实现它。
我的数据集看起来类似于 Grunfeld(尽管我有 NA)在同一年的不同公司。(1935-1954)
> head(Grunfeld, 6)
firm year inv value capital
1 1 1935 317.6 3078.5 2.8
2 1 1936 391.8 4661.7 52.6
3 1 1937 410.6 5387.1 156.9
4 1 1938 257.7 2792.2 209.2
5 1 1939 330.8 4313.2 203.4
6 1 1940 461.2 4643.9 207.2
我现在想做的是只对所有公司的某些列(即inv和value)进行winsorize,并将其存储在具有相同结构的数据框中。我尝试了以下代码:
目标基本上是获得原始数据帧的 Winsorized 副本(所有结构都以相同的方式)。
如下所述,plyr 是拆分数据帧和应用函数的好方法,但我无法让它工作。
library(plm)
library(robustHD)
library(plyr)
data("Grunfeld", package="plm")
#Winsorize data each year (over all firms) therefore split dataframe for each year and apply the winsorize function)
Grunfeld.w<-ddply(Grunfeld, .(year) function(x) winsorize(x$inv,x$value))