使用 R 统计模型解释数据
介绍
统计模型不仅在机器学习中很有用,在解释数据和理解变量之间的关系方面也很有用。在本指南中,读者将学习如何在定量(线性回归)和定性(逻辑回归)目标变量上拟合和分析统计模型。读者还将学习如何创建和解释数值变量的相关矩阵。
我们将从了解数据开始。
数据
在本指南中,我们将使用包含 600 个观测值和 9 个变量的贷款申请人的虚构数据,如下所述:
Marital_status:申请人是否已婚(“是”)或未婚(“否”)。
Is_graduate:申请人是否是毕业生(“是”)或不是(“否”)。
收入:申请人的年收入(美元)。
Loan_amount:提交申请的贷款金额(以美元计)。
Credit_score:申请人的信用评分是好(“好”)还是不好(“坏”)。
年龄:申请人的年龄。
性别:申请人是女性(F)还是男性(M)。
authorization_status:贷款申请是否被批准(“是”)或未被批准(“否”)。
投资:申请人申报的股票和共同基金投资(以美元计)。
让我们首先加载所需的库和数据。
library(readr)
library(dplyr)
library(mlbench)
dat <- read_csv("data_r.csv")
glimpse(dat)
输出:
Observations: 600
Variables: 9
$ Marital_status <chr> "Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "No", "Yes...
$ Is_graduate <chr> "No", "No", "No", "No", "No", "No", "No", "No", "No", "No...
$ Income <int> 586700, 426700, 735500, 327200, 240000, 683200, 800000, 4...
$ Loan_amount <int> 70500, 70000, 275000, 100500, 51500, 69000, 147000, 61000...
$ Credit_score <chr> "Bad", "Bad", "Bad", "Bad", "Bad", "Bad", "Bad", "Bad", "...
$ approval_status <chr> "No", "No", "No", "No", "No", "No", "No", "No", "No", "No...
$ Age <int> 76, 76, 75, 75, 75, 74, 72, 72, 71, 71, 71, 70, 70, 69, 6...
$ Sex <chr> "M", "M", "M", "M", "M", "M", "M", "M", "M", "M", "M", "M...
$ Investment <int> 117340, 85340, 147100, 65440, 48000, 136640, 160000, 9568...
输出显示数据集有五个分类变量(标记为“chr”),其余四个是数值变量(标记为“int”)。
线性回归
回归模型是预测连续标签的算法。线性回归是一种回归模型,它假设目标和预测变量之间存在线性关系。
简单线性回归
简单线性回归是最简单的回归形式,它仅使用一个协变量来预测目标变量。在我们的例子中,“投资”是协变量,而“收入”是目标变量。
下面的第一行代码拟合单变量线性回归模型,而第二行打印拟合模型的摘要。请注意,我们使用的是lm命令,该命令用于在 R 中拟合线性模型。
fit_lin <- lm(Income ~ Investment, data = dat)
summary(fit_lin)
输出:
Call:
lm(formula = Income ~ Investment, data = dat)
Residuals:
Min 1Q Median 3Q Max
-4940996 -93314 -33441 78990 3316423
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.393e+05 2.091e+04 11.45 <2e-16 ***
Investment 2.895e+00 8.071e-02 35.87 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 401100 on 598 degrees of freedom
Multiple R-squared: 0.6827, Adjusted R-squared: 0.6821
F-statistic: 1286 on 1 and 598 DF, p-value: < 2.2e-16
输出解释
投资是预测收入的重要变量,从变量 p 值旁边打印的重要性代码“***”可以看出。
***Pr(>|t|)*** 列下显示的 p 值小于显著性值 0.05,这也表明变量“投资”和“收入”之间存在统计学上的显著关系。
产出的系数表明,‘投资’每增加一个单位,‘收入’就会增加2.895美元。
R 平方值:表示由独立变量(投资)解释的因变量(收入)的百分比变化。在我们的例子中,R 平方值为 0.68,表示变量“收入”的 68% 变化由变量“投资”解释。
以上所有因素都表明两个变量之间存在很强的线性关系。
相关性
对于数值属性,思考关系的一个很好的方法是计算相关性。
两个变量之间的相关系数
使用cor函数计算的皮尔逊相关系数是两个变量之间线性关系的程度和强度的指标。下面的代码行打印出相关系数,结果为 0.82。这是两个变量之间的强正相关性,最高正值为 1。
cor(dat$Income, dat$Investment)
输出:
1] 0.8262401
多个变量之间的相关性
还可以为多个变量创建相关矩阵,它是数值变量的所有属性相关性对的对称表。下面的第一行代码计算数值变量之间的相关性,而第二行显示相关矩阵。
correl_dat <- cor(dat[,c(3,4,7,9)])
print(correl_dat)
输出:
Income Loan_amount Age Investment
Income 1.00000000 0.76643958 0.02787282 0.8262401
Loan_amount 0.76643958 1.00000000 0.05791348 0.7202692
Age 0.02787282 0.05791348 1.00000000 0.1075841
Investment 0.82624011 0.72026924 0.10758414 1.0000000
上图矩阵显示,收入与“贷款金额”和“投资”呈高度正相关。
多元线性回归
顾名思义,多元线性回归试图使用多个预测因子来预测目标变量。在我们的例子中,我们将使用所有其他变量构建多元统计模型。但在进行建模之前,最好将字符变量转换为因子类型。下面的第一行代码在数据集中创建了一个字符变量列表。第二行使用lapply函数将存储在“名称”中的这些变量转换为因子变量。第三行提供有关数据的信息,其中分类变量已转换为“因子”类型。
names <- c(1,2,5,6,8)
dat[,names] <- lapply(dat[,names] , factor)
glimpse(dat)
输出:
Observations: 600
Variables: 9
$ Marital_status <fct> Yes, No, Yes, Yes, Yes, No, Yes, No, Yes, Yes, Yes, Yes, ...
$ Is_graduate <fct> No, No, No, No, No, No, No, No, No, No, No, No, Yes, Yes,...
$ Income <int> 586700, 426700, 735500, 327200, 240000, 683200, 800000, 4...
$ Loan_amount <int> 70500, 70000, 275000, 100500, 51500, 69000, 147000, 61000...
$ Credit_score <fct> Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad, Go...
$ approval_status <fct> No, No, No, No, No, No, No, No, No, No, No, No, No, No, N...
$ Age <int> 76, 76, 75, 75, 75, 74, 72, 72, 71, 71, 71, 70, 70, 69, 6...
$ Sex <fct> M, M, M, M, M, M, M, M, M, M, M, M, M, M, F, M, M, M, M, ...
$ Investment <int> 117340, 85340, 147100, 65440, 48000, 136640, 160000, 9568...
现在我们准备拟合多元线性回归。下面的代码行拟合模型并打印结果摘要。
fit_mlr <- lm(Income ~ Marital_status + Is_graduate + Loan_amount + Credit_score + Age + Sex + Investment, data = dat)
summary(fit_mlr)
输出:
Call:
lm(formula = Income ~ Marital_status + Is_graduate + Loan_amount +
Credit_score + Age + Sex + Investment, data = dat)
Residuals:
Min 1Q Median 3Q Max
-4184641 -133867 -37001 92469 2852369
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.055e+05 6.802e+04 4.491 8.53e-06 ***
Marital_statusYes 2.341e+04 3.299e+04 0.710 0.4782
Is_graduateYes 8.032e+04 3.671e+04 2.188 0.0291 *
Loan_amount 3.419e-01 2.925e-02 11.688 < 2e-16 ***
Credit_scoreGood -5.012e+04 3.196e+04 -1.568 0.1174
Age -2.426e+03 1.006e+03 -2.412 0.0162 *
SexM 4.793e+04 4.048e+04 1.184 0.2370
Investment 2.021e+00 1.043e-01 19.379 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 357700 on 592 degrees of freedom
Multiple R-squared: 0.7502, Adjusted R-squared: 0.7473
F-statistic: 254 on 7 and 592 DF, p-value: < 2.2e-16
输出解释
R平方值从0.68增加到0.75,表明变量的增加提高了预测能力。
“投资”和“贷款金额”是高度显著的预测因子,而“年龄”和“是否毕业”是中等显著的变量。显著程度也可以从变量 p 值旁边打印的星号(如果有)的数量来了解。
上面讨论的所有四个变量的 p 值均小于显著性值 0.05,如标记为 ***Pr(>|t|)*** 的列下所示。这也强化了我们的推断,即这些变量与“收入”变量具有统计上的显著关系。
逻辑回归
逻辑回归是一种用于分类问题的广义线性模型。虽然线性回归模型预测连续结果,但逻辑回归模型的思想是将其扩展到结果变量为分类的情况。在本指南中,我们将使用逻辑回归进行二分类。我们将使用相同的数据集,但这次,目标变量将是“approval_status”,它表示贷款申请是否被批准(“是”)或未获批准(“否”)。
单变量逻辑回归
我们将仅从一个协变量“Credit_score”开始,以预测“approval_status”。使用的函数是glm命令,用于在 R 中拟合广义线性模型。下面的代码行拟合单变量逻辑回归模型并打印模型摘要。参数 ***family="binomial"*** 指定我们正在构建一个用于预测二元结果的逻辑回归模型。
mod_log = glm(approval_status ~ Credit_score, data=dat, family="binomial")
summary(mod_log)
输出:
Call:
glm(formula = approval_status ~ Credit_score, family = "binomial",
data = dat)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.3197 -0.6550 0.3748 0.3748 1.8137
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.4302 0.1783 -8.023 1.03e-15 ***
Credit_scoreGood 4.0506 0.2674 15.147 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 749.20 on 599 degrees of freedom
Residual deviance: 395.64 on 598 degrees of freedom
AIC: 399.64
Number of Fisher Scoring iterations: 5
使用上面的Pr(>|z|)结果,我们可以得出结论,变量“Credit_score”是“糖尿病”的重要预测因子,因为 p 值小于 0.05。重要性代码也支持这一推论。同样直观的是,信用评分高的申请人更有可能获得贷款申请批准,反之亦然。
多元逻辑回归
我们还可以使用approval_status ~ .,命令将多个变量包含在逻辑回归模型中。下面我们将使用所有其他变量为“approval_status”拟合多元逻辑回归模型。
mod_log2 = glm(approval_status ~ ., data=dat, family="binomial")
summary(mod_log2)
输出:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~