在 r 中使用回归时如何计算使用和删除的观察值

how to count observations used and deleted when using a regression in r

我有一个正在使用的数据集,它有多个变量。其中一些变量的观测值是 NA。在 运行 回归之后,由于 NA,删除了一些观察结果。我使用以下代码对数据进行子集化:

jsubset= jtrain %>% select(2,11,23,24,28)

返回以下输出: j子集

A tibble: 471 x 5
    fcode   d89 cgrant clemploy cgrant_1
    <dbl> <dbl>  <dbl>    <dbl>    <dbl>
 1 410032     0      0  NA            NA
 2 410032     0      0   0.270         0
 3 410032     1      0  -0.0630        0
 4 410440     0      0  NA            NA
 5 410440     0      0   0.0800        0
 6 410440     1      0   0.0741        0
 7 410495     0      0  NA            NA
 8 410495     0      0   0.223         0
 9 410495     1      0  -0.0408        0
10 410500     0      0  NA            NA
 ... with 461 more rows

我如何区分对剩余列有值的 FCODES 和对某些列有值但没有 NA 的 FCODES?或者更容易计算回归中使用和删除的观察值?我知道 STATA 中的命令是 e(sample) ,它更容易做到这一点,但试图在 R 中复制。

按 NA 值排列

如果你有合适的数据框,应该是直截了当的。首先,我只是把你的数据复制到一个文本文件中,命名它,然后把它变成一个数据框:

slack <- read.table("slack.txt")
colnames(slack) <- c("fcode",
                     "d89",
                     "cgrant",
                     "clemploy",
                     "cgrant_1")
slack <- data.frame(slack)

然后只需排列值,这自然会重新排列您提到的 NA 值:

slack %>% 
  arrange(cgrant_1)

给你这个:

   fcode    d89 cgrant clemploy cgrant_1 
1      3 410032      1       0  -0.0630   
2      9 410495      1       0  -0.0408   
3      6 410440      1       0   0.0741   
4      5 410440      0       0   0.0800   
5      8 410495      0       0   0.2230   
6      2 410032      0       0   0.2700   
7      1 410032      0       0       NA  
8      4 410440      0       0       NA  
9      7 410495      0       0       NA  
10    10 410500      0       0       NA  

删除 NA 值

如果您只想去掉 NA 值:

slack %>% 
  na.omit()

这给你:

  fcode    d89 cgrant cemploy cgrant_1 
2     2 410032      0       0   0.2700   
3     3 410032      1       0  -0.0630   
5     5 410440      0       0   0.0800   
6     6 410440      1       0   0.0741   
8     8 410495      0       0   0.2230   
9     9 410495      1       0  -0.0408   

删除了 NA 值的子集数据

您还可以使用以下代码将该数据子集化为一个新的数据帧:

# NA Removed Dataframe:    
no_na_slack <- slack %>% 
      na.omit()

# Is NA Dataframe:
is_na_slack <- slack %>% 
      filter_all(any_vars(is.na(.)))

对于这两种情况,您都可以使用 filterif_any()。抽样:

library(dplyr)
df <- read.csv(text="
 fcode   d89 cgrant clemploy cgrant_1
 410032     0      0  NA            NA
 410032     0      0   0.270         0
 410032     1      0  -0.0630        0
 410440     0      0  NA            NA
 410440     0      0   0.0800        0
 410440     1      0   0.0741        0
 410495     0      0  NA            NA
 410495     0      0   0.223         0
 410495     1      0  -0.0408        0
 410500     0      0  NA            NA", sep="")


df_no_na <- df %>%      
        filter(!if_any(everything(), is.na))

df_na <- df %>%     
        filter(if_any(everything(), is.na))

df_no_na:

   fcode d89 cgrant clemploy cgrant_1
1 410032   0      0   0.2700        0
2 410032   1      0  -0.0630        0
3 410440   0      0   0.0800        0
4 410440   1      0   0.0741        0
5 410495   0      0   0.2230        0
6 410495   1      0  -0.0408        0

df_na:

   fcode d89 cgrant clemploy cgrant_1
1 410032   0      0       NA       NA
2 410440   0      0       NA       NA
3 410495   0      0       NA       NA
4 410500   0      0       NA       NA