Advertisement

R 逻辑回归乳腺癌数据

阅读量:

7-1 乳腺癌数据准备

复制代码
    loc <- "http://archive.ics.uci.edu/ml/machine-learning-databases/" 
    ds <- "breast-cancer-wisconsin/breast-cancer-wisconsin.data" 
    url <- paste(loc, ds, sep="") 
    breast <- read.table(url, sep=",", header=FALSE, na.strings="?") 
    names(breast) <- c("ID", "clumpThickness", "sizeUniformity", 
     "shapeUniformity", "maginalAdhesion", 
    "singleEpithelialCellSize", "bareNuclei", 
     "blandChromatin", "normalNucleoli", "mitosis", "class") 
    df <- breast[-1] 
    df$class <- factor(df$class, levels=c(2,4), 
     labels=c("benign", "malignant")) 
    set.seed(1234) 
    train <- sample(nrow(df), 0.7*nrow(df)) 
    df.train <- df[train,] 
    df.validate <- df[-train,] 
    table(df.train$class) 
    table(df.validate$class)

逻辑回归(logistic regression)是广义线性模型的一种,可根据一组数值变量预测二元输出
(13.2节有详细介绍)。R中的基本函数glm()可用于拟合逻辑回归模型。glm()函数自动将预测变
量中的分类变量编码为相应的虚拟变量。威斯康星乳腺癌数据中的全部预测变量都是数值变量,
因此不必要对其编码。下面给出R中逻辑回归流程。

复制代码
    > fit.logit <- glm(class~., data=df.train, family=binomial()) 
    > summary(fit.logit)
    Call: 
    glm(formula = class ~ ., family = binomial(), data = df.train) 
    Deviance Residuals: 
     Min 1Q Median 3Q Max 
    -2.7581 -0.1060 -0.0568 0.0124 2.6432 
    Coefficients: 
     Estimate Std. Error z value Pr(>|z|) 
    (Intercept) -10.4276 1.4760 -7.06 1.6e-12 *** 
    clumpThickness 0.5243 0.1595 3.29 0.0010 ** 
    sizeUniformity -0.0481 0.2571 -0.19 0.8517 
    shapeUniformity 0.4231 0.2677 1.58 0.1141 
    maginalAdhesion 0.2924 0.1469 1.99 0.0465 * 
    singleEpithelialCellSize 0.1105 0.1798 0.61 0.5387 
    bareNuclei 0.3357 0.1072 3.13 0.0017 ** 
    blandChromatin 0.4235 0.2067 2.05 0.0405 * 
    normalNucleoli 0.2889 0.1399 2.06 0.0390 * 
    mitosis 0.6906 0.3983 1.73 0.0829 . 
    --- 
    Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
    > prob <- predict(fit.logit, df.validate, type="response") 
    > logit.pred <- factor(prob > .5, levels=c(FALSE, TRUE), 
     labels=c("benign", "malignant"))
    > logit.perf <- table(df.validate$class, logit.pred,
     dnn=c("Actual", "Predicted")) 
    > logit.perf 
     Predicted 
    Actual benign malignant 
     benign 118 2 
     malignant 4 76

首先,以类别为响应变量,其余变量为预测变量➊。基于df.train数据框中的数据构造逻
辑回归模型。接着给出了模型中的系数➋。系数解释见13.2节。
接着,采用基于df.train建立的模型来对df.validate数据集中的样本单元分类。
predict()函数默认输出肿瘤为恶性的对数概率,指定参数type="response"即可得到预测肿
瘤为恶性的概率➌。样本单元中,概率大于0.5的被分为恶性肿瘤类,概率小于等于0.5的被分为
良性肿瘤类。
最后给出预测与实际情况对比的交叉表(即混淆矩阵,confusion matrix)➍。模型正确判别
了118个类别为良性的患者和76个类别为恶性的患者。另外,df.validate数据集中有10个样本
单元因包含缺失数据而无法判别。
验证集上,正确分类的模型(即准确率,accuracy)为(76+118)/200=97%,17.4节中将进
一步探讨评估模型有效性的统计量。
同时要注意的是,模型中有三个预测变量(sizeUniformity、shapeUniformity和
singleEpithelialCellSize)的系数未通过显著性检验(即p值大于0.1)。从预测的角度来说,
我们一般不会将这些变量纳入最终模型。当这类不包含相关信息的变量特别多时,可以直接将其
认定为模型中的噪声。
在这种情况下,可用逐步逻辑回归生成一个包含更少解释变量的模型,其目的是通过增加或
移除变量来得到一个更小的AIC值。具体到这一案例,可通过:
logit.fit.reduced <- step(fit.logit)
来得到一个精简的模型。这样,上面提到的三个变量就从最终模型中移除,这种精简后的模型在
验证集上的误差相对全变量模型更小。

全部评论 (0)

还没有任何评论哟~