【发布时间】:2014-07-21 11:49:15
【问题描述】:
我正在尝试对面板数据和每年进行 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,并将其存储在具有相同结构的数据框中。我尝试了以下代码:
目标基本上是获取原始数据帧的优化副本(所有结构都以相同的方式)。
如下所述,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))
【问题讨论】:
标签: r outliers panel-data