一、引言
肥胖是当今全球范围内面临的严重健康问题。根据世界卫生组织的数据,全球超过10亿人口被认定为超重,其中近4亿人被诊断为肥胖。肥胖不仅会导致身体外观的变化,还与多种慢性疾病(如心血管疾病、糖尿病和某些癌症)的风险增加相关联。因此,了解导致肥胖的主要因素对于预防和管理肥胖具有重要意义。
逻辑回归分析是研究肥胖诱因的常用方法之一。与传统的回归分析方法相比,逻辑回归分析可以考虑时间因素、不需要对生存时间分布进行明确的假设,并可以同时考虑多个预测变量对肥胖的影响。逻辑回归分析能够揭示导致肥胖的内在因素,从而提供制定防治策略和政策的依据。
目前已经有许多研究。例如,通过长期追踪研究数据发现,高热量摄入、缺乏运动和遗传因素是导致肥胖的重要因素。另外,的研究结果表明,心理压力和环境因素(如居住环境和社会影响)也与肥胖发生相关。但是我们今天从另外一些角度考虑导致肥胖的因素?
本文旨在使用逻辑回归分析方法揭示导致肥胖的主要因素。通过综合现有研究以及本文的分析,将进一步加深对肥胖发生机制的理解,并为预防和管理肥胖提供科学依据。接下来,我们将详细描述逻辑回归分析的原理以及数据的收集和处理方法,最后讨论研究结果,并提出未来深入研究的方向。
二、逻辑回归分析简介
2.1 逻辑回归模型的基本原理
逻辑回归是一种广泛应用于分类问题的统计学方法。它使用逻辑函数(也称为Sigmoid函数)将输入的线性组合转换为概率值,从而对二元变量的概率进行建模和预测。逻辑回归模型通过估计系数来捕捉自变量与因变量之间的关系。
2.2 逻辑回归在研究肥胖诱因的优势
逻辑回归在研究肥胖诱因方面有许多应用优势。首先,它可以处理二元的因变量(例如,肥胖与非肥胖)。其次,逻辑回归模型可以同时考虑多个预测变量,如基因、环境和行为等因素。这样可以揭示出不同变量对肥胖发生的相对重要性,从而帮助我们理解肥胖的复杂机制。此外,逻辑回归模型还可以通过计算参数的置信区间来评估变量的显著性,为肥胖的防治提供定量依据。
2.3 逻辑回归的变量选择和解释方法
在逻辑回归分析中,变量的选择和解释是至关重要的。为了选择最具预测能力的变量,我们可以使用统计方法如AIC(赤池信息准则)或BIC(贝叶斯信息准则)来进行模型选择。此外,变量的解释可以通过查看系数的大小和符号来进行。对于二元变量,正系数表示增加该变量会增加发生肥胖的概率;负系数则表示相反。对于连续变量,系数的绝对值越大,表示该变量对肥胖的影响越大。
总结:逻辑回归模型是一种用于分类问题的统计学方法,可用于研究肥胖诱因。该模型基于逻辑函数将线性组合转换为概率值,以估计变量之间的关系。逻辑回归模型的应用优势包括处理二元因变量、考虑多个预测因素以及提供变量选择和解释方法。通过选择具有预测能力的变量和解释系数,我们可以更好地理解肥胖的机制和影响因素。
三、数据收集和处理
3.1 肥胖相关数据描述
#install.packages("NHANES") library(NHANES) data(NHANES) str(NHANES)
结果展示:
> str(NHANES) tibble [10,000 x 76] (S3: tbl_df/tbl/data.frame) $ ID : int [1:10000] 51624 51624 51624 51625 51630 51638 51646 51647 51647 51647 ... $ SurveyYr : Factor w/ 2 levels "2009_10","2011_12": 1 1 1 1 1 1 1 1 1 1 ... $ Gender : Factor w/ 2 levels "female","male": 2 2 2 2 1 2 2 1 1 1 ... $ Age : int [1:10000] 34 34 34 4 49 9 8 45 45 45 ... $ AgeDecade : Factor w/ 8 levels " 0-9"," 10-19",..: 4 4 4 1 5 1 1 5 5 5 ... $ AgeMonths : int [1:10000] 409 409 409 49 596 115 101 541 541 541 ... $ Race1 : Factor w/ 5 levels "Black","Hispanic",..: 4 4 4 5 4 4 4 4 4 4 ... $ Race3 : Factor w/ 6 levels "Asian","Black",..: NA NA NA NA NA NA NA NA NA NA ... $ Education : Factor w/ 5 levels "8th Grade","9 - 11th Grade",..: 3 3 3 NA 4 NA NA 5 5 5 ... $ MaritalStatus : Factor w/ 6 levels "Divorced","LivePartner",..: 3 3 3 NA 2 NA NA 3 3 3 ... $ HHIncome : Factor w/ 12 levels " 0-4999"," 5000-9999",..: 6 6 6 5 7 11 9 11 11 11 ... $ HHIncomeMid : int [1:10000] 30000 30000 30000 22500 40000 87500 60000 87500 87500 87500 ... $ Poverty : num [1:10000] 1.36 1.36 1.36 1.07 1.91 1.84 2.33 5 5 5 ... $ HomeRooms : int [1:10000] 6 6 6 9 5 6 7 6 6 6 ... $ HomeOwn : Factor w/ 3 levels "Own","Rent","Other": 1 1 1 1 2 2 1 1 1 1 ... $ Work : Factor w/ 3 levels "Looking","NotWorking",..: 2 2 2 NA 2 NA NA 3 3 3 ... $ Weight : num [1:10000] 87.4 87.4 87.4 17 86.7 29.8 35.2 75.7 75.7 75.7 ... $ Length : num [1:10000] NA NA NA NA NA NA NA NA NA NA ... $ HeadCirc : num [1:10000] NA NA NA NA NA NA NA NA NA NA ... $ Height : num [1:10000] 165 165 165 105 168 ... $ BMI : num [1:10000] 32.2 32.2 32.2 15.3 30.6 ... $ BMICatUnder20yrs: Factor w/ 4 levels "UnderWeight",..: NA NA NA NA NA NA NA NA NA NA ... $ BMI_WHO : Factor w/ 4 levels "12.0_18.5","18.5_to_24.9",..: 4 4 4 1 4 1 2 3 3 3 ... $ Pulse : int [1:10000] 70 70 70 NA 86 82 72 62 62 62 ... $ BPSysAve : int [1:10000] 113 113 113 NA 112 86 107 118 118 118 ... $ BPDiaAve : int [1:10000] 85 85 85 NA 75 47 37 64 64 64 ... $ BPSys1 : int [1:10000] 114 114 114 NA 118 84 114 106 106 106 ... $ BPDia1 : int [1:10000] 88 88 88 NA 82 50 46 62 62 62 ... $ BPSys2 : int [1:10000] 114 114 114 NA 108 84 108 118 118 118 ... $ BPDia2 : int [1:10000] 88 88 88 NA 74 50 36 68 68 68 ... $ BPSys3 : int [1:10000] 112 112 112 NA 116 88 106 118 118 118 ... $ BPDia3 : int [1:10000] 82 82 82 NA 76 44 38 60 60 60 ... $ Testosterone : num [1:10000] NA NA NA NA NA NA NA NA NA NA ... $ DirectChol : num [1:10000] 1.29 1.29 1.29 NA 1.16 1.34 1.55 2.12 2.12 2.12 ... $ TotChol : num [1:10000] 3.49 3.49 3.49 NA 6.7 4.86 4.09 5.82 5.82 5.82 ... $ UrineVol1 : int [1:10000] 352 352 352 NA 77 123 238 106 106 106 ... $ UrineFlow1 : num [1:10000] NA NA NA NA 0.094 ... $ UrineVol2 : int [1:10000] NA NA NA NA NA NA NA NA NA NA ... $ UrineFlow2 : num [1:10000] NA NA NA NA NA NA NA NA NA NA ... $ Diabetes : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 1 1 1 1 ... $ DiabetesAge : int [1:10000] NA NA NA NA NA NA NA NA NA NA ... $ HealthGen : Factor w/ 5 levels "Excellent","Vgood",..: 3 3 3 NA 3 NA NA 2 2 2 ... $ DaysPhysHlthBad : int [1:10000] 0 0 0 NA 0 NA NA 0 0 0 ... $ DaysMentHlthBad : int [1:10000] 15 15 15 NA 10 NA NA 3 3 3 ... $ LittleInterest : Factor w/ 3 levels "None","Several",..: 3 3 3 NA 2 NA NA 1 1 1 ... $ Depressed : Factor w/ 3 levels "None","Several",..: 2 2 2 NA 2 NA NA 1 1 1 ... $ nPregnancies : int [1:10000] NA NA NA NA 2 NA NA 1 1 1 ... $ nBabies : int [1:10000] NA NA NA NA 2 NA NA NA NA NA ... $ Age1stBaby : int [1:10000] NA NA NA NA 27 NA NA NA NA NA ... $ SleepHrsNight : int [1:10000] 4 4 4 NA 8 NA NA 8 8 8 ... $ SleepTrouble : Factor w/ 2 levels "No","Yes": 2 2 2 NA 2 NA NA 1 1 1 ... $ PhysActive : Factor w/ 2 levels "No","Yes": 1 1 1 NA 1 NA NA 2 2 2 ... $ PhysActiveDays : int [1:10000] NA NA NA NA NA NA NA 5 5 5 ... $ TVHrsDay : Factor w/ 7 levels "0_hrs","0_to_1_hr",..: NA NA NA NA NA NA NA NA NA NA ... $ CompHrsDay : Factor w/ 7 levels "0_hrs","0_to_1_hr",..: NA NA NA NA NA NA NA NA NA NA ... $ TVHrsDayChild : int [1:10000] NA NA NA 4 NA 5 1 NA NA NA ... $ CompHrsDayChild : int [1:10000] NA NA NA 1 NA 0 6 NA NA NA ... $ Alcohol12PlusYr : Factor w/ 2 levels "No","Yes": 2 2 2 NA 2 NA NA 2 2 2 ... $ AlcoholDay : int [1:10000] NA NA NA NA 2 NA NA 3 3 3 ... $ AlcoholYear : int [1:10000] 0 0 0 NA 20 NA NA 52 52 52 ... $ SmokeNow : Factor w/ 2 levels "No","Yes": 1 1 1 NA 2 NA NA NA NA NA ... $ Smoke100 : Factor w/ 2 levels "No","Yes": 2 2 2 NA 2 NA NA 1 1 1 ... $ Smoke100n : Factor w/ 2 levels "Non-Smoker","Smoker": 2 2 2 NA 2 NA NA 1 1 1 ... $ SmokeAge : int [1:10000] 18 18 18 NA 38 NA NA NA NA NA ... $ Marijuana : Factor w/ 2 levels "No","Yes": 2 2 2 NA 2 NA NA 2 2 2 ... $ AgeFirstMarij : int [1:10000] 17 17 17 NA 18 NA NA 13 13 13 ... $ RegularMarij : Factor w/ 2 levels "No","Yes": 1 1 1 NA 1 NA NA 1 1 1 ... $ AgeRegMarij : int [1:10000] NA NA NA NA NA NA NA NA NA NA ... $ HardDrugs : Factor w/ 2 levels "No","Yes": 2 2 2 NA 2 NA NA 1 1 1 ... $ SexEver : Factor w/ 2 levels "No","Yes": 2 2 2 NA 2 NA NA 2 2 2 ... $ SexAge : int [1:10000] 16 16 16 NA 12 NA NA 13 13 13 ... $ SexNumPartnLife : int [1:10000] 8 8 8 NA 10 NA NA 20 20 20 ... $ SexNumPartYear : int [1:10000] 1 1 1 NA 1 NA NA 0 0 0 ... $ SameSex : Factor w/ 2 levels "No","Yes": 1 1 1 NA 2 NA NA 2 2 2 ... $ SexOrientation : Factor w/ 3 levels "Bisexual","Heterosexual",..: 2 2 2 NA 2 NA NA 1 1 1 ... $ PregnantNow : Factor w/ 3 levels "Yes","No","Unknown": NA NA NA NA NA NA NA NA NA NA ... >
特征解读:
这个数据集是 NHANES(National Health and Nutrition Examination Survey)的一部分,它收集了关于参与者的健康和营养等多个方面的信息。以下是该数据集中的一些变量的说明: "ID": 参与者的唯一标识符。 "SurveyYr": 数据采集的年份。 "Gender": 参与者的性别。 "Age": 参与者的年龄。 "AgeDecade": 参与者的年龄十年段。 "AgeMonths": 参与者的年龄(以月为单位)。 "Race1": 参与者的种族(包含多个类别)。 "Education": 参与者的教育程度。 "MaritalStatus": 参与者的婚姻状况。 "HHIncome": 参与者的家庭收入范围。 "Poverty": 参与者的贫困指数。 "HomeRooms": 参与者居住的房间数。 "HomeOwn": 参与者是否拥有住房。 "Work": 参与者的工作状态。 "Weight": 参与者的体重。 "Height": 参与者的身高。 "BMI": 参与者的身体质量指数。 其他变量包括血压、胆固醇水平、尿液参数、糖尿病情况、睡眠时间、饮酒、吸烟、性行为等。 该数据集包含了大量关于参与者健康和行为习惯的信息,可以用于进行健康研究、统计分析和建模等。根据具体需求,您可以选择并操作其中的变量来进行分析或研究。
3.2 数据预处理和清洗
从展示在内容上看,里面是存在很多NA项,所以在分析之前需要对数据进行处理。
# 选择与肥胖可能相关的特征 selected_features <- c("Age", "Gender", "Race1", "Education", "MaritalStatus", "HHIncome", "Poverty", "HomeRooms", "Weight", "Height", "BMI", "Pulse", "BPSysAve", "BPDiaAve", "Diabetes", "HealthGen", "DaysPhysHlthBad", "DaysMentHlthBad", "PhysActive", "TVHrsDay") # 提取选定的特征 selected_data <- NHANES[, selected_features] library(mice) input.data <- mice(selected_data,seed=5) fat <- complete(input.data,3) # 检查是否有缺失值 any(is.na(data)) # 通过BMI区分是否肥胖,BMI大于24.9属于肥胖行列 fat$status[fat$BMI < 24.9] <- 0 fat$status[fat$BMI >= 24.9] <- 1 fat <- fat[,c(-11)] head(fat)
结果展示:
> any(is.na(fat)) [1] FALSE > head(fat) Age Gender Race1 Education MaritalStatus HHIncome Poverty HomeRooms Weight Height Pulse BPSysAve BPDiaAve Diabetes HealthGen DaysPhysHlthBad DaysMentHlthBad PhysActive TVHrsDay 1 34 male White High School Married 25000-34999 1.36 6 87.4 164.7 70 113 85 No Good 0 15 No More_4_hr 2 34 male White High School Married 25000-34999 1.36 6 87.4 164.7 70 113 85 No Good 0 15 No 0_to_1_hr 3 34 male White High School Married 25000-34999 1.36 6 87.4 164.7 70 113 85 No Good 0 15 No 4_hr 4 4 male Other 9 - 11th Grade NeverMarried 20000-24999 1.07 9 17.0 105.4 74 109 0 No Good 0 0 Yes 3_hr 5 49 female White Some College LivePartner 35000-44999 1.91 5 86.7 168.4 86 112 75 No Good 0 10 No 2_hr 6 9 male White College Grad LivePartner 75000-99999 1.84 6 29.8 133.1 82 86 47 No Vgood 0 0 Yes 1_hr status 1 1 2 1 3 1 4 0 5 1 6 0
四、示例与代码实现
- 「构建逻辑回归模型」
# 建立逻辑回归模型 model <- glm(status ~ ., data = fat, family = binomial) summary(model)
结果展示:
> summary(model) Call: glm(formula = status ~ ., family = binomial, data = fat) Deviance Residuals: Min 1Q Median 3Q Max -4.3240 -0.0001 0.0000 0.0000 3.4208 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 79.4955878 4.3858476 18.125 < 2e-16 *** Age 0.0258715 0.0073583 3.516 0.000438 *** Gendermale -2.5364034 0.2497450 -10.156 < 2e-16 *** Race1Hispanic 2.1435548 0.4887376 4.386 1.16e-05 *** Race1Mexican 1.6731443 0.4702696 3.558 0.000374 *** Race1White 0.3313085 0.3500982 0.946 0.343980 Race1Other 0.9042700 0.4501859 2.009 0.044573 * Education9 - 11th Grade -0.2866018 0.4201338 -0.682 0.495133 EducationHigh School 0.5319172 0.4193992 1.268 0.204697 EducationSome College 0.1474245 0.4082673 0.361 0.718026 EducationCollege Grad -0.4256557 0.4345053 -0.980 0.327267 MaritalStatusLivePartner 0.1407168 0.4720503 0.298 0.765629 MaritalStatusMarried -0.3431799 0.3609402 -0.951 0.341709 MaritalStatusNeverMarried 0.2762281 0.3878895 0.712 0.476384 MaritalStatusSeparated -1.3555598 0.7581200 -1.788 0.073767 . MaritalStatusWidowed 0.5351238 0.5960516 0.898 0.369302 HHIncome 5000-9999 -1.9734039 0.8570836 -2.302 0.021309 * HHIncome10000-14999 -0.8139297 0.6993016 -1.164 0.244457 HHIncome15000-19999 -0.5248117 0.6602109 -0.795 0.426663 HHIncome20000-24999 -0.5541883 0.6433682 -0.861 0.389026 HHIncome25000-34999 -0.5744834 0.6471499 -0.888 0.374695 HHIncome35000-44999 -0.3129562 0.6845260 -0.457 0.647537 HHIncome45000-54999 -0.9424392 0.7315295 -1.288 0.197637 HHIncome55000-64999 -1.3678793 0.8464674 -1.616 0.106097 HHIncome65000-74999 -0.0570029 0.8141450 -0.070 0.944181 HHIncome75000-99999 -0.4176704 0.8344176 -0.501 0.616686 HHIncomemore 99999 -0.2853326 0.8984954 -0.318 0.750813 Poverty 0.0338856 0.1513822 0.224 0.822881 HomeRooms 0.0537576 0.0524571 1.025 0.305461 Weight 1.7425619 0.0878087 19.845 < 2e-16 *** Height -1.2196543 0.0620369 -19.660 < 2e-16 *** Pulse -0.0002953 0.0082019 -0.036 0.971280 BPSysAve 0.0062286 0.0076691 0.812 0.416700 BPDiaAve 0.0204505 0.0069128 2.958 0.003093 ** DiabetesYes 0.4518567 0.5032420 0.898 0.369243 HealthGenVgood 0.3352276 0.2997003 1.119 0.263335 HealthGenGood 0.8631663 0.3255994 2.651 0.008025 ** HealthGenFair 0.2164820 0.4073381 0.531 0.595103 HealthGenPoor 0.2060893 0.7168902 0.287 0.773747 DaysPhysHlthBad -0.0007852 0.0166173 -0.047 0.962313 DaysMentHlthBad 0.0072140 0.0134837 0.535 0.592640 PhysActiveYes -0.1163305 0.2201030 -0.529 0.597133 TVHrsDay0_to_1_hr 0.1366113 0.6334081 0.216 0.829240 TVHrsDay1_hr -0.3521444 0.6201572 -0.568 0.570150 TVHrsDay2_hr 0.0858912 0.6096160 0.141 0.887954 TVHrsDay3_hr -0.0769907 0.6259298 -0.123 0.902105 TVHrsDay4_hr -0.6685018 0.6330809 -1.056 0.290991 TVHrsDayMore_4_hr -0.2049652 0.6391173 -0.321 0.748437 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 13753.33 on 9999 degrees of freedom Residual deviance: 826.73 on 9952 degrees of freedom AIC: 922.73 Number of Fisher Scoring iterations: 12
- 「绘制ROC曲线」
# 使用测试集进行预测 predictions <- predict(model, newx =fat, type = "response") library(pROC) # 计算真阳性率和假阳性率 roc <- pROC::roc(fat$status,predictions) # 绘制ROC曲线 plot(roc, main = "ROC Curve", print.auc = TRUE, auc.polygon = TRUE, grid = TRUE, legacy.axes = TRUE,col="blue")
- 「特征重要性雷达图」
# 提取特征系数 coef_data <- data.frame(Feature = names(coef(model)), Coefficient = abs(coef(model))) # 按照系数绝对值降序排序 coef_data <- coef_data[order(coef_data$Coefficient, decreasing = TRUE),] # 选择前10个特征 top_10_features <- coef_data[1:10, ] top_10_features # 绘制特征重要性柱状图 library(ggplot2) ggplot(data = top_10_features, aes(x = reorder(Feature, Coefficient), y = Coefficient)) + geom_bar(stat = "identity", fill = "steelblue") + xlab("Feature") + ylab("Coefficient (Absolute Value)") + ggtitle("Logistic Regression Feature Importance")
结果展示:
> top_10_features Feature Coefficient (Intercept) (Intercept) 79.4955878 Gendermale Gendermale 2.5364034 Race1Hispanic Race1Hispanic 2.1435548 HHIncome 5000-9999 HHIncome 5000-9999 1.9734039 Weight Weight 1.7425619 Race1Mexican Race1Mexican 1.6731443 HHIncome55000-64999 HHIncome55000-64999 1.3678793 MaritalStatusSeparated MaritalStatusSeparated 1.3555598 Height Height 1.2196543 HHIncome45000-54999 HHIncome45000-54999 0.9424392
五、结论
5.1 总结研究的主要发现和贡献:
根据逻辑回归分析的结果,我们得出以下主要发现和贡献:
- 在研究人群中,性别、种族、家庭收入、体重和身高等因素与肥胖之间存在显著关联。 性别在肥胖的发生中扮演着重要角色,男性相对于女性更容易患肥胖。
- 种族差异也是肥胖问题的一个重要因素,特别是Hispanic和Mexican族裔的肥胖率较高。
- 家庭收入水平与肥胖之间存在一定的关联,收入较低的人群更容易面临肥胖的风险。
- 体重和身高是预测肥胖的重要指标,体重增加、身高下降会增加患肥胖的可能性。
5.2 逻辑回归分析的重要性:
本研究通过逻辑回归分析,揭示了多个与肥胖相关的重要特征,并量化了它们与肥胖之间的关系。逻辑回归模型为我们提供了一种有效的方法来理解和预测肥胖的风险因素。通过明确这些风险因素,我们可以更好地了解肥胖的发生机制,并采取相应的干预措施。
5.3 预防和管理肥胖的建议和措施:
基于研究发现,我们提出以下预防和管理肥胖的建议和措施:
- 性别教育和意识提高:针对男性群体,加强肥胖的认知和健康教育,推广健康生活方式。
- 种族特定的干预策略:针对Hispanic和Mexican族裔人群,开展针对其文化和风俗习惯的营养教育和健康促进活动。
- 收入不平等的关注:加强贫困人口的营养援助和经济支持,提供物质条件给予他们更好的选择健康饮食的能力。
- 健康促进政策:制定并执行全面的健康促进政策,鼓励个人和社区参与身体运动,提供健康的饮食选择和环境。
- 早期干预和教育:加强儿童和青少年的健康教育,推广健康的生活习惯,提供适当的支持和指导。