【问题标题】:R: Clustered robust standard errors using miceadds lm.cluster - error with subset and weightsR:使用miceadds lm.cluster的聚类稳健标准错误 - 子集和权重的错误
【发布时间】:2017-05-12 16:25:12
【问题描述】:

我正在尝试使用miceadds 包中的lm.cluster 函数来为多重插补数据集获取稳健的聚类标准误差。

我能够运行它的标准版本,但是当我尝试添加子集或权重时出现以下错误:

Error in eval(substitute(subset), data, env) : 
..1 used in an incorrect context, no ... to look in

没有子集或权重的示例:

require("mice")
require("miceadds")
data(data.ma01)
# imputation of the dataset: use six imputations
dat <- data.ma01[ , - c(1:2) ]
imp <- mice::mice( dat , maxit=3 , m=6 )
datlist <- miceadds::mids2datlist( imp )
# linear regression with cluster robust standard errors
mod <- lapply(datlist, FUN = function(data){miceadds::lm.cluster( data=data ,         
formula=read ~ paredu+ female ,  cluster = data.ma01$idschool )}  )

# extract parameters and covariance matrix
betas <- lapply( mod , FUN = function(rr){ coef(rr) } )
vars <- lapply( mod , FUN = function(rr){ vcov(rr) } )
# conduct statistical inference
summary(pool_mi( qhat = betas, u = vars ))

与子集中断的示例:

mod <- lapply(datlist, FUN = function(data){miceadds::lm.cluster( data=data ,         
formula=read ~ paredu+ female ,  cluster = data.ma01$idschool, subset=
(data.ma01$urban==1))}  )

Error during wrapup: ..1 used in an incorrect context, no ... to look in

用权重打断的例子:

mod <- lapply(datlist, FUN = function(data){miceadds::lm.cluster( data=data ,         
formula=read ~ paredu+ female ,  cluster = data.ma01$idschool,
weights=data.ma01$studwgt)}  )

Error during wrapup: ..1 used in an incorrect context, no ... to look in

通过搜索,我认为我在通过 lm 或 glm 包装器传递这些命令时遇到了与其他人类似的问题(例如:Passing Argument to lm in R within FunctionR : Pass argument to glm inside an R functionPassing the weights argument to a regression function inside an R function

但是,我不确定如何解决估算数据集和现有 lm.cluster 命令的问题。

谢谢

【问题讨论】:

    标签: r regression r-mice


    【解决方案1】:

    这适用于 CRAN 上的 estimatr 包和 estimatr::lm_robust() 函数。两个注意事项:(1)您可以使用 se_type = 更改标准错误的类型,(2)我将 idschool 保留在数据中,因为我们希望集群在相同的 data.frame 中,因为我们适合模型。

    library(mice)
    library(miceadds)
    library(estimatr)
    
    # imputation of the dataset: use six imputations
    data(data.ma01)
    dat <- data.ma01[, -c(1)] # note I keep idschool in data
    imp <- mice::mice( dat , maxit = 3, m = 6)
    datlist <- miceadds::mids2datlist(imp)
    
    # linear regression with cluster robust standard errors
    mod <- lapply(
      datlist, 
      function (dat) {
        estimatr::lm_robust(read ~ paredu + female, dat, clusters = idschool)
      }
    )
    
    # subset
    mod <- lapply(
      datlist, 
      function (dat) {
        estimatr::lm_robust(read ~ paredu + female, dat, clusters = idschool, subset = urban == 1)
      }
    )
    
    # weights
    mod <- lapply(
      datlist, 
      function (dat) {
        estimatr::lm_robust(read ~ paredu + female, dat, clusters = idschool, weights = studwgt)
      }
    )
    
    # note that you can use the `se_type` argument of lm_robust() 
    # to change the vcov estimation
    
    # extract parameters and covariance matrix
    betas <- lapply(mod, coef)
    vars <- lapply(mod, vcov)
    # conduct statistical inference
    summary(pool_mi( qhat = betas, u = vars ))
    

    【讨论】:

      【解决方案2】:

      我不是专家,但是将权重传递给lm() 存在问题。我知道这不是一个理想的情况,但我设法通过修改 lm.cluster() 函数来硬编码权重传递,然后使用我自己的方法来让它工作。

      lm.cluster <- function (data, formula, cluster, wgts=NULL, ...) 
      {
        TAM::require_namespace_msg("multiwayvcov")
        if(is.null(wgts)) {
          mod <- stats::lm(data = data, formula = formula)
        } else {
          data$.weights <- wgts
          mod <- stats::lm(data = data, formula = formula, weights=data$.weights)
        }
        if (length(cluster) > 1) {
          v1 <- cluster
        }
        else {
          v1 <- data[, cluster]
        }
        dfr <- data.frame(cluster = v1)
        vcov2 <- multiwayvcov::cluster.vcov(model = mod, cluster = dfr)
        res <- list(lm_res = mod, vcov = vcov2)
        class(res) <- "lm.cluster"
        return(res)
      }
      

      【讨论】:

        猜你喜欢
        • 2015-01-31
        • 1970-01-01
        • 2020-12-22
        • 1970-01-01
        • 2020-03-14
        • 2013-05-06
        • 2021-04-14
        • 2020-10-18
        • 2017-10-17
        相关资源
        最近更新 更多