我有一个大型(数百万)观测数据集,并且我使用了feols来运行一个线性模型。这个模型已经从对缺失值的考虑中删除了许多观察结果。我已经恢复了使用$obs_selection删除的行号,但我无法确定如何使用$obs_selection生成的列表从原始数据集中删除删除的观察。
最后,我想删除掉的观测,然后将$residuals加入到原始数据中。
我最初尝试过这样做(通常在下面的代码中指定):
df[-object$obs_selection]但是这会生成一个错误“-rows_to_delete中的错误:对一元运算符的无效参数”,并且类似于这个问题的答案:How do you retrieve the estimation sample in R?中的解决方案(以及我得到的错误)。
在下面的样本数据中,由于缺少值,模型中省略了五个观测值。如何使用fake_lm$obs_selection从原始数据集中删除掉的观测?
谢谢!
数据:
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")代码:
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发布于 2022-08-13 19:13:23
在经历了一些痛苦之后,我想出了答案。
整数的向量列表可以转换为数据,从那时起,这就变成了一个有趣的问题。
从上面重写一些代码..。
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")在这里,您可以按需要添加一列残差。
https://stackoverflow.com/questions/73341321
复制相似问题