Я пытаюсь использовать 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