获取模型估计中被剔除观测数据框的实现方案
模型估计中缺失观测的提取函数实现
背景说明
在进行模型估计时,估计函数会剔除因公式*左侧(LHS)或右侧(RHS)*所用变量存在缺失值的观测(即数据行)。
示例代码
dt <- mtcars dt[1:5, "wt"] <- NA mod <- lm(mpg ~ wt + cyl + disp, data = dt) summary(mod) print(paste0(nrow(dt), " observations in the dataframe")) print(paste0(nobs(mod), " have been used in the estimator")) print(paste0(nrow(dt) - nobs(mod), " have been dropped"))
此例中,lm会剔除前5行,因为这些行的RHS变量wt存在缺失值。上述代码返回:
"32 observations in the dataframe" "27 have been used in the estimator" "5 have been dropped"
函数编写需求
需要编写一个名为get_dropped_obs的函数,返回模型估计中未被使用的被剔除观测数据框,且该函数需尽可能适配多种估计函数(如lm、glm、glmmTMB等)。
待适配的估计函数示例
library(magrittr) mods <- list() mods %<>% rlist::list.append(lm(mpg ~ wt + cyl + disp, data = dt)) mods %<>% rlist::list.append(glm(am ~ wt, data = dt, family = binomial())) mods %<>% rlist::list.append(glmmTMB::glmmTMB(mpg ~ wt + cyl + disp, data = dt)) mods %<>% rlist::list.append(glmmTMB::glmmTMB(am ~ wt + vs, data = dt, family = binomial())) mods %<>% rlist::list.append(glmmTMB::glmmTMB(carb ~ wt + gear, data = dt, family = glmmTMB::nbinom2())) mods %<>% rlist::list.append(pscl::zeroinfl(vs ~ wt + cyl + disp, data = dt)) mods %<>% rlist::list.append(pscl::hurdle(vs ~ wt + cyl + disp, data = dt)) mods %<>% rlist::list.append(fixest::feols(vs ~ wt | gear, data = dt)) mods %<>% rlist::list.append(fixest::feglm(am ~ wt + cyl | vs, data = dt, family = binomial())) mods %<>% rlist::list.append(lme4::lmer(vs ~ wt + (1 | gear), data = dt))
测试要求
该函数需通过如下测试:
for (i in seq_along(mods)) { tryCatch( { df_dropped <- get_dropped_obs(mods[[i]], dt) cat(paste0( "Model ", i, ": ", nrow(df_dropped), " observations have been dropped\n" )) }, error = function(e) { cat(paste0("Model ", i, ": ", e)) } ) }
内容的提问来源于stack exchange,提问作者robertspierre
相关产品推荐
相关产品推荐

