【问题标题】:R Winsorizing individual variables in different panel data yearsR Winsorizing 不同面板数据年份中的单个变量
【发布时间】: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


    【解决方案1】:

    试试这个:

    library(tidyverse)
    
    p.df%>%
      as.tibble()%>%
      group_by(years)%>%
      mutate(across(c(var1,var2,var3),as.double))%>%
      mutate(across(c(var1,var2,var3),~DescTools::Winsorize(.x,na.rm=T)))
    ```
    

    【讨论】:

    • 您好 TobKel,谢谢。它并不能仅通过 Winsorizing 来解决问题,例如仅 var3 的第 5 年值。 IE。它现在将整个 var1 ... var 3 列从不同年份中取值。我想对个别年份和个别变量进行 Winsorize,即 Winsorize 所有 -5 和 var1 观测值的集合,然后分别对所有 -4 和 var 3 进行 Winsorize,依此类推。 var2 和 var3 相同。例如鉴于我有 11 个独特的年份(-5 到 5,包括 0)和 3 个不同的变量,我想对 33 个单独的集合进行 Winsorize。你知道我的意思吗?
    • 我不知道你到底是什么意思。那么,您是否要对各个年份进行分组,以便对它们进行单独的 Winsorized 处理?
    • 是的,所以我想例如对变量 3 的 -5 年的观察结果进行 Winsorize 处理,并对所有年份和变量分别执行此操作。
    • 查看我的更新版本。 (我加了group_by(years)
    • 是的,它有效!与此同时,我实际上已经编写了一个函数,现在已经将我的函数的输出与你的建议进行了比较。结果是一样的。谢谢!
    猜你喜欢
    • 2014-12-22
    • 2020-09-04
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    相关资源
    最近更新 更多