Функция R с разделением данных и нахождением линейной регрессии - PullRequest
0 голосов
/ 17 марта 2020

Я хочу рассчитать влияние роста на доход с учетом пола. Я разделил свои данные на данные для мужчин и женщин, но когда я запускаю функцию lm (заработок ~ рост + образование + возраст, данные = data_female), я получаю сообщение об ошибке: Ошибка в model.frame.default (формула = заработок ~ рост) + образование +: переменные длины различаются (для «образования»)

Сможете ли вы помочь или предложить лучший способ усовершенствования моей модели, или помочь исправить эту конкретную ошибку? Пожалуйста, дайте мне знать.

setwd("~/Google Drive/R Data")
data <- read.csv('data_ass5.csv')
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)
lm(earnings~height+age+gender+education,data = data)
summary(multiple_regression)
summary(linear_regression)
multiple_regression_redefined <- lm(earnings~age+gender+education,data = data)

# Now I wish to particularly assess the impact of gender on earnings
# therefore  trying to refine my model doing the following: 
# but the lm last line is causing an error. Would you be able to adivse on 
# if this is the correct way to refine it and/or why I am getting the error.
# I even tried putting na.rm=TRUE after the lm code, but error still. 

data_female <- subset(data,gender==0)
data_male <- subset(data,gender==1)
lm(earnings~height+education+age, data = data_female)

1 Ответ

0 голосов
/ 17 марта 2020

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