(四)实例解析:
数据介绍:
首先我为大家介绍一下本次使用的数据.这次我选择的疾病是高血压数据。我们的数据一共有ID、Gender、Age、A、hypertension五个变量。该数据的目的是通过对每一个观测(每一行)的性别、年龄和指标A(这个指标可以是分子标志物、临床上的任意指标),以及是否发生高血压疾病进行收集。构建预测模型。明确哪一类人是我们的潜在高血压疾病患者。从而将更多的健康宣传、金钱投入向这一类人群进行更多倾斜。
那么这儿有一个问题,那就是这个模型是否能够准确推断出我们预测的那一类人就是真正会得高血压的患者呢?这个问题推广一下,到医学领域也就是,我们构建的临床模型推测的潜在患病人群是否真的会患病呢?这就是模型的评价。那我们开始吧。
数据预处理:
第一步,我们需要导入数据
##setwd(“D:/ROC and Calibration”)
##并且不要ID这一列
dataset=read.csv('disease.csv')
dataset=dataset[2:5]
第二步,在构建模型之前需要处理数据
##将结局变量转换为因子型变量 ##将数据随机分为训练集和测试集,训练集的作用就是构建模型,测试集的目的就是构建的模型进行评价,我们采取7:3的比例随机将数据进行拆分。###install.packages(“CaTools”)
dataset$hypertension = factor(dataset$hypertension, levels = c(0, 1))
library(caTools)
set.seed(123)
split = sample.split(dataset$hypertension, SplitRatio = 0.7)
training_set = subset(dataset, split == TRUE)
test_set = subset(dataset, split == FALSE)
我们来看一看新的数据集的结构。
dim(training_set)
## [1] 280 4
str(training_set)
## 'data.frame': 280 obs. of 4 variables:
## $ Gender : Factor w/ 2 levels "Female","Male": 2 1 2 1 1 1 1 2 2 2 ...
## $ Age : int 19 26 27 27 32 35 26 20 18 29 ...
## $ A : int 19000 43000 58000 84000 150000 65000 80000 86000 82000 80000 ...
## $ hypertension: Factor w/ 2 levels "0","1": 1 1 1 1 2 1 1 1 1 1 ...
好了,现在就得到我们想要的数据模型了。
构建模型,对Logistic回归分析
有两个函数可以构建模型,分别是R本身的stats包里面的glm函数和rms包的lrm函数。我们这儿是使用的glm函数。
classifier = glm(formula = hypertension ~ .,
data = training_set,family ="binomial" )
summary(classifier)
##
## Call:
## glm(formula = hypertension ~ ., family = "binomial", data = training_set)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.0629 -0.4945 -0.1071 0.2942 2.5220
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.383e+01 1.811e+00 -7.638 2.20e-14 ***
## GenderMale 2.660e-01 3.792e-01 0.701 0.483
## Age 2.599e-01 3.527e-02 7.368 1.73e-13 ***
## A 3.833e-05 6.833e-06 5.610 2.03e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 364.98 on 279 degrees of freedom
## Residual deviance: 181.48 on 276 degrees of freedom
## AIC: 189.48
##
## Number of Fisher Scoring iterations: 6
我们发现除了性别,年龄和薪资都是结局变量的重要预测因素(P<0.005)。