За документы из lm
, аргумент data обрабатывает переменные в формуле двумя способами, которые НЕ являются взаимоисключающими:
данные необязательный фрейм данных, список или окружение (или объект, поддающийся as.data.frame
для фрейма данных), содержащий переменные в модели. Если не найдено в data
, переменные берутся из environment(formula)
, обычно из среды, из которой вызывается lm
.
В частности, все ваши векторные назначения являются избыточными и перекрываются с именами столбцов в кадре данных, за исключением пол и образование :
height <- data$height
earnings <- data$earnings
gender <- data$sex
age <- data$age
education <- data$educ
multiple_regression <- lm(earnings~height+age+gender+education,data = data)
При выполнении вышеупомянутых имен все ссылки, кроме пол и образование получено из данных. Но пол и образование извлекаются из глобальной среды для векторов, которые вы назначили выше. Если бы вы использовали sex и edu c, значения извлекались бы из фрейма данных, как и все остальные.
Соответственно, ваши subset
вызовы используют пол вектор, а не пол столбец. К счастью, они в точности совпадают с тем, что ошибок или нежелательных результатов не было.
data_female <- subset(data,gender==0)
data_male <- subset(data,gender==1)
Поэтому, когда вы поднастроили свои данные, lm
извлекает все значения из подмножества данные и одно значение, образование , из глобальной среды. Но помните, что education основан на фрейме данных full , поэтому он имеет большую длину, чем столбцы поднастроенного фрейма данных.
В целом, просто избегайте назначения избыточных векторов и используйте столбцы для полных и заданных кадров данных.
height <- data$height
earnings <- data$earnings
gender <- data$sex
age <- data$age
education <- data$educ
# REPLACE gender WITH sex AND education WITH educ (RENAME COLS IF NEEDED)
multiple_regression <- lm(earnings ~ height + age + sex + educ, data = data)
# REPLACE gender WITH sex
data_female <- subset(data, sex==0)
data_male <- subset(data, sex==1)
# REPLACE education WITH educ
lm(earnings ~ height + educ + age, data = data_female)