【问题标题】:ClusterBootstrap::clusbootglm() taking long time to runClusterBootstrap::clusbootglm() 需要很长时间才能运行
【发布时间】:2020-05-16 02:39:15
【问题描述】:

我正在使用 ClusterBootstrap 包中的 clusbootglm() 函数。运行它需要非常长的时间。数据框仅包含 900 行和 4 列。

clusfunc <- function(df1) {
  mod1 <- clusbootglm(y ~ treat + u, data = 
df1, clusterid = group, family = gaussian, B = 900)
  coef(mod1)[[2]]
}

betasclustered <- replicate(1000, clusfunc(df1))

这里是 the documentation 用于此功能。

运行一次函数迭代大约需要一秒钟。但是,运行 1000 所花费的时间超过 1000 秒。你有什么建议吗?我应该自己编写一个不同的函数而不是使用 clusbootglm() 函数吗?

【问题讨论】:

  • hmmm 为什么你需要在同一个数据集上运行这个引导程序 1000 次?我问是因为可能有一种更简单的方法来计算你需要的东西
  • 这是我的计量经济学课作业的一部分。所以可能有一个更简单的方法,但不幸的是我需要这样做。
  • 确切的作业问题是什么?因为在函数 clusbootglm 中,当您设置 B=900 时,您正在执行 900 次引导。然后你重复这 900 个引导程序 1000 次?
  • 对我来说不太有意义

标签: r cluster-analysis replicate


【解决方案1】:

我可以使用以下函数,而不是使用 clusbootglm()。我已经测试过了,只需要几秒钟就可以迭代 1000 次。我仍然不清楚为什么 clusbootglm() 运行时间如此之长(超过 45 分钟),但这是一个不错的选择。

getclusteredsamplecoef <- function(df1) {
  sample <- df1 %>% 
  group_by(group) %>% 
  nest(df1 = -group) %>%  
  ungroup() %>% 
  sample_n(180, replace = TRUE) %>% 
  unnest(df1)
  model <- lm(y ~ treat + u, sample)
  return(model$coefficients[[2]])
}

值得注意的是,这与 clusbootglm() 并不完全相同,因为我运行的是线性模型而不是广义线性模型。这可以通过在函数中使用 glm() 或 lm_robust() 代替 lm() 来改变。

设置 n=180 产生 180 个组。在我的样本中,每组中有 5 个人,因此这会产生 900 个观察值。如果你想获得一定数量的观察,取这个数字并除以每个组内的数字,然后将结果用作 sample_n() 的输入。

【讨论】:

    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多