楼主: torrentpien
2522 1

[问答] 面板数据组内离群值怎么处理? [推广有奖]

  • 0关注
  • 3粉丝

已卖:411份资源

硕士生

70%

还不是VIP/贵宾

-

威望
0
论坛币
44793 个
通用积分
83.5763
学术水平
3 点
热心指数
4 点
信用等级
3 点
经验
838 点
帖子
51
精华
0
在线时间
274 小时
注册时间
2009-11-28
最后登录
2025-9-5

楼主
torrentpien 学生认证  发表于 2017-12-23 10:23:35 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
想请教一下,要处理panel data里面group的离群值,有没有什么标准?比方说不看group看变数所有年度的资料就还好,但一看group各年度资料就有很大的离群值。

  1. library(dplyr)
  2. library(moments)
  3. library(pastecs)

  4. data <- data.frame(year = rep(2001:2008, 6),
  5.             id = rep (1:6, each = 8),
  6.             value = c(5, 100, 3, 10, 15, 6, 9, 11,
  7.                            30, 35, 20, 32, 40, 42, 43, 43,
  8.                            10, 15, 9, 26, 27, 26, 26, 26,
  9.                            45, 60, 57, 120, 63, 65, 64, 63,
  10.                            80, 100, 5, 90, 98, 87, 85, 82,
  11.                            11, 19, 14, 14, 13, 14, 14, 14))

  12. outlier <- data %>%
  13.         group_by(id) %>%
  14.             summarise(mean = mean(value),
  15.             median = median(value),
  16.             skew = skewness(value),
  17.             kurt = kurtosis(value))
复制代码

在group量很大的时候想到一个方法是用skewness大小于+-1,kurtosis大于3的id挑出来进行处理,但由于这是检测常态分布,会有点问题,例如id 6组内没有离群,但skewness = 1.1523064、kurtosis = 4.352835,请问有没有更好的方法?

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
torrentpien 学生认证  发表于 2017-12-24 03:35:27
  1. 目前用zoo和tsoutlier两个packages找到的最好的解法:

  2. library(tsoutliers)
  3. library(zoo)

  4. z <- read.zoo(data, split = "id", index = "year", FUN = identity)

  5. out.all <- list()

  6. for (i in 1:ncol(z)) {
  7.   
  8.   y <- z[,i]
  9.   fit <- arima(y, order = c(1, 1, 0), seasonal = list(order = c(2, 0, 2)))
  10.   resid <- residuals(fit)
  11.   pars <- coefs2poly(fit)
  12.   outliers <- locate.outliers(resid, pars)
  13.   
  14.   if (nrow(outliers) == 0) {
  15.   } else {
  16.    
  17.     outliers <- data.frame(id = i, outliers)
  18.     out.all <- bind_rows(out.all, outliers)
  19.    
  20.   }
  21. }

  22. out.all <- filter(out.all, type == 'AO')

  23. data$fix <- data$value

  24. for (i in 1:nrow(out.all)) {
  25.   
  26.   data$fix[data$id == out.all[i,1] & data$year == unique(data$year)[out.all[i,3]]] <-
  27.     mean(data$fix[data$id == out.all[i,1]])
  28.   
  29. }
复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 05:36