如何在纵向数据集中进行Winsorize(或移除单变量离群值)

鲁迪

我试图弄清楚如何对纵向数据集中按个人分组的观察结果进行分类处理。

我首先给出了一个极好的答案,它是关于如何从变量均值中删除大于2个标准差的数据。作者也有帮助地展示了如何在类别中做到这一点。

我的用例略有不同:我有一个纵向数据集,并且我希望删除那些随着时间的推移被系统地证明是异常值的个体。除了要排除对象内的极端观察之外,我要完全排除那些人(修剪数据),或者用削减值代替最低和最高2.5%的值(令人兴奋的内容,请参阅:http://en.wikipedia。 org / wiki / Winsorising)。

例如,我的长格式数据可能如下所示:

name time points
MJ   1    998
MJ   2    1000
MJ   3    998
MJ   4    3000
MJ   5    998
MJ   5    420
MJ   6    999
MJ   7    998
Lebron   1    9
Lebron   2    1
Lebron   3    3
Lebron   4    900
Lebron   5    4
Lebron   5    4
Lebron   6    3
Lebron   7    8
Kobe   1    2
Kobe   2    1
Kobe   3    4
Kobe   4    2
Kobe   5    1000
Kobe   5    4
Kobe   6    7
Kobe   7    9
Larry   1    2
Larry   2    1
Larry   3    4
Larry   4    2
Larry   5    800
Larry   5    4
Larry   6    7
Larry   7    9

如果我想删除points个人(name中的极端观察,我的代码将是:

do.call(rbind,by(df,df$name,function(x) x[!abs(scale(x$points)) > 2,]))

但是我真正想做的是排除极端的INDIVIDUAL(在这种情况下为MJ)。我将如何去做?

(PS-在此插入有关不应该删除异常值的所有警告。这只是一个健壮性测试!)

用户名

我只会使用dplyr:

test <- read.csv("test.csv", header=TRUE)
library(dplyr)

test <- test %.% 
  group_by(name) %.% 
  mutate(mean_points=mean(points))

cut_point_top <- quantile(test$mean_points, 0.95)
cut_point_bottom <- quantile(test$mean_points, 0.05)

test <- test %.% 
  group_by(name) %.% 
  mutate(outlier_top = (mean_points >= cut_point_top), 
         outlier_bottom = mean_points <= cut_point_bottom) %.%
  filter(!outlier_top & ! outlier_bottom)

这将MJ的平均得分最高的2.5%过滤掉,将Larry的平均得分最低的2.5%过滤掉。

如果要用2.5个百分点的切点替换points变量,只需删除最后一个filter语句,如下所示:

test <- test %.% 
  group_by(name) %.% 
  mutate(outlier_top = (mean_points >= cut_point_top), 
         outlier_bottom = mean_points <= cut_point_bottom) 

test$points <- ifelse(test$outlier_top, cut_point_top, 
                      ifelse(test$outlier_bottom, cut_point_bottom, test$points))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在纵向数据集中进行Winsorize(或去除单变量离群值)

来自分类Dev

纵向数据集中的累积变量构造

来自分类Dev

如何在gnuplot中对boxplot离群值进行分组

来自分类Dev

如何应用sklearn的EllipticEnvelope找出给定数据集中的离群值?

来自分类Dev

如何通过离群值检测方法在基于周期或基于序列的数据上产生离群值脉冲以进行实验?

来自分类Dev

如何使用PROC EXPAND填写面板(纵向)数据集中的时间序列观测值?

来自分类Dev

如何在MySQL中进行插值

来自分类Dev

转换纵向数据以在R中进行事件分析

来自分类Dev

如何在R中的if语句中进行变量更改值

来自分类Dev

如何在 React 的字符串变量中进行字符串插值?

来自分类Dev

如何基于R中的分类变量删除数据框中的离群值

来自分类Dev

如何在时间序列数据帧中检测离群值,并在新数据帧中写入“干净”值

来自分类Dev

如何在Rstudio中删除大型数据集中的变量?

来自分类Dev

如何在bash环境变量列表中进行迭代?

来自分类Dev

如何在env_file中进行变量替换?

来自分类Dev

如何在模板中进行PHP变量循环

来自分类Dev

如何在Sparql中进行计数和选择变量

来自分类Dev

如何在八度中进行多变量赋值?

来自分类Dev

如何在R函数中进行变量循环

来自分类Dev

如何在字符串变量 XSLT 中进行替换?

来自分类Dev

如何确保使用Rails在数据库中进行单次输入?

来自分类Dev

如何在R中绘制纵向数据

来自分类Dev

单批从数据集中对每个图像进行 N 次采样

来自分类Dev

如何在Matlab数据集中的行中更新几个值?

来自分类Dev

熊猫:如何在大型数据集中填充缺失值?

来自分类Dev

如何在json格式数据集中获取最高值?

来自分类Dev

如何在数据集中找到值错误?

来自分类Dev

如何在IntelliJ中进行调试时修改列表值

来自分类Dev

如何在NLP中进行单个值预测

Related 相关文章

  1. 1

    如何在纵向数据集中进行Winsorize(或去除单变量离群值)

  2. 2

    纵向数据集中的累积变量构造

  3. 3

    如何在gnuplot中对boxplot离群值进行分组

  4. 4

    如何应用sklearn的EllipticEnvelope找出给定数据集中的离群值?

  5. 5

    如何通过离群值检测方法在基于周期或基于序列的数据上产生离群值脉冲以进行实验?

  6. 6

    如何使用PROC EXPAND填写面板(纵向)数据集中的时间序列观测值?

  7. 7

    如何在MySQL中进行插值

  8. 8

    转换纵向数据以在R中进行事件分析

  9. 9

    如何在R中的if语句中进行变量更改值

  10. 10

    如何在 React 的字符串变量中进行字符串插值?

  11. 11

    如何基于R中的分类变量删除数据框中的离群值

  12. 12

    如何在时间序列数据帧中检测离群值,并在新数据帧中写入“干净”值

  13. 13

    如何在Rstudio中删除大型数据集中的变量?

  14. 14

    如何在bash环境变量列表中进行迭代?

  15. 15

    如何在env_file中进行变量替换?

  16. 16

    如何在模板中进行PHP变量循环

  17. 17

    如何在Sparql中进行计数和选择变量

  18. 18

    如何在八度中进行多变量赋值?

  19. 19

    如何在R函数中进行变量循环

  20. 20

    如何在字符串变量 XSLT 中进行替换?

  21. 21

    如何确保使用Rails在数据库中进行单次输入?

  22. 22

    如何在R中绘制纵向数据

  23. 23

    单批从数据集中对每个图像进行 N 次采样

  24. 24

    如何在Matlab数据集中的行中更新几个值?

  25. 25

    熊猫:如何在大型数据集中填充缺失值?

  26. 26

    如何在json格式数据集中获取最高值?

  27. 27

    如何在数据集中找到值错误?

  28. 28

    如何在IntelliJ中进行调试时修改列表值

  29. 29

    如何在NLP中进行单个值预测

热门标签

归档