运行多个回归时,请在单列中正确处理NA

时间:2018-09-30 01:32:33

标签: r na lm

当虚拟变量为true时,我尝试使用lm计算平均值。我有一个带有三个列(Sepal.Length,Sepal.Width和Dummy)的数据框。当cols之一包含NA时,将排除整个行(即使我运行两个单独的回归),也会导致均值错误。当只有一个col包含NA时,如何正确运行不排除整个行的多个回归(没有for循环)?

# setup mydata
mydata <- structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6, 5, 5.4), 
    Sepal.Width = c(NA, NA, 3.2, 3.1, 3.6, 3.9), Dummy = c(1, 
    1, 1, 0, 0, 0)), row.names = c(NA, 6L), class = "data.frame")

mydata

# Sepal.Length Sepal.Width Dummy
# 1          5.1          NA     1
# 2          4.9          NA     1
# 3          4.7         3.2     1
# 4          4.6         3.1     0
# 5          5.0         3.6     0
# 6          5.4         3.9     0

# reg Sepal.Length ~ Dummy, Sepal.Width ~ Dummy    
fit <- lm(data.matrix(mydata) ~ data.matrix(mydata["Dummy"]))

intercepts <- fit$coefficients[1,]
betas <- fit$coefficients[2,]

# calculate average when Dummy==1
intercepts + betas

# Sepal.Length  Sepal.Width        Dummy 
#         4.7          3.2          1.0 

# calculate average when Dummy==1 (does not match)
apply(data.matrix(mydata %>% filter(Dummy==1)), 2, mean, na.rm=TRUE)

# Sepal.Length  Sepal.Width        Dummy 
#         4.9          3.2          1.0 

1 个答案:

答案 0 :(得分:0)

如果您按照this示例使用map中的purrr,这似乎可行。

library("dplyr")
library("purrr")

mydata %>% map(~lm(.x ~ Dummy, data=mydata)) %>% map("coefficients") %>% map(sum)

# $Sepal.Length
# [1] 4.9

# $Sepal.Width
# [1] 3.2

# $Dummy
# [1] 1