代码之家  ›  专栏  ›  技术社区  ›  cpage

在进行多次回归时,应正确处理单列NA

lm na r
  •  0
  • cpage  · 技术社区  · 7 年前

    我正在尝试使用 lm 当虚拟变量为真时计算平均值。我有一个包含三列(Sepal.Length、Sepal.Width和Dummy)的数据帧。当其中一个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 回复  |  直到 7 年前
        1
  •  0
  •   cpage    7 年前

    如果你使用 map purrr 下列的 this 例子。

    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