【问题标题】:Loop for outlier detection in R, panel data循环用于 R 中的异常值检测,面板数据
【发布时间】:2018-10-16 02:39:16
【问题描述】:

我正在使用如下所示的面板数据框:

        date    w    x    y    z    Country
1    2009 01    21   43   12    3   AT
2    2009 02    32   54   21   16   AT
3    2009 03    14   32   65   32   AT
4    2009 04    65   33   75   21   AT
:        :      :    :    :    :       :
:        :      :    :    :    :       :
55   2009 01    32   58   53   17   BE
56   2009 02    12   47   43   23   BE
57   2009 03    87   43   21   76   BE
:        :      :    :    :    :       :
85   2009 01    12   46   84   29    CZ
86   2009 02    85   29   90   12    CZ
:        :      :    :    :    :       :
:        :      :    :    :    :       :

for total of 28 countries

我想运行一个循环,通过针对不同子集(一次不包括一个国家/地区)评估相同的 plm 模型来检测可能的异常区域。子集创建可能看起来像这样:

uniq <- unique(unlist(full_panel$Country))
for (i in 1:length(uniq)){
data_1 <- subset(full_panel, Country!=uniq[i])
}

以及要评估的模型:

plm(data_1, y~x+lag(x)......,
  model="within", effect="individual")

之后,我希望代码通过从结果中打印一个特定的统计数据(比如说 adj R-sq) 来生成数据框,以便稍后比较不同的子集。

目前,我只尝试创建代码的不同部分,并且由于我是初学者,在编写最后一部分并将它们全部组合起来时遇到了问题。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 有一个outliers-package,但我发现大多数搜索“异常值”的努力都是基于我通常忽略的错误和危险的统计思维(或说负面的话)关于此类问题。

标签: r loops outliers panel-data


【解决方案1】:

考虑 by 跨数据帧的子集运行操作,返回包含函数返回项的列表(等于不同分组的数量),这里是每个子集数据的 plm 模型结果的数据帧。

model_results_list <- by(full_panel, full_panel$Country, FUN=function(sub_df){

            fit <- plm(sub_df, y~x+lag(x)......,
                       model="within", effect="individual")

            data.frame(country = max(sub_df$Country),
                       f_stat = summary(fit)$fstatistic$statistic,
                       r_sq = summary(fit)$r.squared['rsq'],
                       adj_rsq = summary(fit)$r.squared['adjrsq'],
                       rss = sum(resid(fit)^2)
            )    
})

# BIND ALL DFS TO ONE SINGULAR DF
country_models_df <- do.call(rbind, model_results_list)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 2016-02-28
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2020-02-23
    • 2017-10-20
    相关资源
    最近更新 更多