簡體   English   中英

具有分離數據和查找線性回歸的 R 函數

[英]R function with separating data and finding linear regression

我想根據性別計算身高對收入的影響。 我將我的數據分為男性和女性數據,但是當我運行 lm(earnings~height+education+age, data = data_female) 函數時,它給了我一個錯誤說:模型.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)

根據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)

當上面運行時,除了性別教育之外的所有引用名稱都來自數據框。 但是性別教育是從全球環境中提取的,用於您在上面分配的向量。 如果您使用了sexeduc ,則會像所有其他人一樣從數據框中提取值。

相關地,您的subset調用使用性別向量而不是性別列。 幸運的是,它們完全相同,沒有發生錯誤或意外結果。

data_female <- subset(data,gender==0)
data_male <- subset(data,gender==1)

因此,當子集數據, lm子集數據和一個價值,教育拉動所有值,從全球環境。 但請記住,教育是基於完整數據框的,因此比子集數據框的列保持更大的長度。


總而言之,只需避免分配冗余向量並為完整和子集數據幀使用列。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM