Правильно обрабатывать NA в одном столбце при запуске нескольких регрессий - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь использовать lm для вычисления среднего значения, когда фиктивная переменная истинна.У меня есть фрейм данных с тремя столбцами (Sepal.Length, Sepal.Width и Dummy).Когда один из столбцов содержит NA, вся строка исключается (хотя я запускаю две отдельные регрессии), что приводит к неверному среднему значению.Как правильно запустить несколько регрессий (без цикла for), которые не исключают целые строки, когда только один столбец содержит NA?

# 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 голосов
/ 30 сентября 2018

Кажется, это работает, если вы используете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...