首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从原始数据集中删除由Fixest (feols)删除的观测/行

从原始数据集中删除由Fixest (feols)删除的观测/行
EN

Stack Overflow用户
提问于 2022-08-13 03:10:42
回答 1查看 74关注 0票数 0

我有一个大型(数百万)观测数据集,并且我使用了feols来运行一个线性模型。这个模型已经从对缺失值的考虑中删除了许多观察结果。我已经恢复了使用$obs_selection删除的行号,但我无法确定如何使用$obs_selection生成的列表从原始数据集中删除删除的观察。

最后,我想删除掉的观测,然后将$residuals加入到原始数据中。

我最初尝试过这样做(通常在下面的代码中指定):

代码语言:javascript
复制
df[-object$obs_selection]

但是这会生成一个错误“-rows_to_delete中的错误:对一元运算符的无效参数”,并且类似于这个问题的答案:How do you retrieve the estimation sample in R?中的解决方案(以及我得到的错误)。

在下面的样本数据中,由于缺少值,模型中省略了五个观测值。如何使用fake_lm$obs_selection从原始数据集中删除掉的观测?

谢谢!

数据:

代码语言:javascript
复制
structure(list(ExamType = c("A", "B", "C", "D", "E", "F", "G", 
"A", "B", "C", "D", "E", "F", "G", "A", "B", "C", "D", "E", "F", 
"G", "A", "B", "C", "D", "E", "F", "G", "A", "B"), ExamScore = c(1L, 
2L, 2L, 3L, 1L, 4L, 4L, 5L, 2L, 1L, 4L, 3L, 2L, 5L, 1L, NA, 3L, 
2L, 1L, 2L, 5L, 4L, 4L, 3L, 1L, 2L, 5L, 4L, 3L, 1L), State = c("CA", 
"CA", "AL", "AK", "AK", "CA", "AL", "CO", "AL", "CA", "CA", "CA", 
"CO", "CO", "AR", "AR", "AK", "CA", "CA", "CT", "AL", "CA", "AK", 
"CA", "CA", "AL", "AR", "AR", "CA", "CT"), Male = c(1L, 1L, 0L, 
0L, 1L, 0L, 0L, 0L, 1L, 1L, NA, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 
0L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L), White = c(1L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 
0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L), Black = c(0L, 
1L, 0L, NA, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L), Latinx = c(0L, 
0L, 0L, 0L, 1L, 0L, NA, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 
0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L), X2.Race = c(0L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, NA, 0L, 0L, 0L, 0L, 0L, 0L)), row.names = c(NA, 
30L), class = "data.frame")

代码:

代码语言:javascript
复制
library(fixest)

fake_lm <- feols(ExamScore ~ Male + White + Black + Latinx + X2.Race | State, fake_data)
summary(fake_lm)

#These are the dropped observations
rows_to_delete <- fake_lm$obs_selection

# I would like to clean them from my dataset (fake_data), but this
# generates the error
fake_data[-rows_to_delete]

 
# Ultimately, once the original dataset only contains those used in the model, I'll add
# residuals as a column in my dataset
fake_data$resid <- fake_lm$residuals
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-13 19:13:23

在经历了一些痛苦之后,我想出了答案。

整数的向量列表可以转换为数据,从那时起,这就变成了一个有趣的问题。

从上面重写一些代码..。

代码语言:javascript
复制
library(tidyverse)

fake_data <- fake_data %>% rowid_to_column()

rows_to_delete <- as.data.frame(fake_lm$selection)
row_to_delete$obsRemoved <- rows_to_delete$obsRemoved * -1

colnames(rows_to_delete) <- c("rowid")

clean_fake_data <- anti_join(fake_data,rows_to_delete,by="rowid")

在这里,您可以按需要添加一列残差。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73341321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档