R语言 分类变量的回归

R语言 分类变量的回归

回归 是一个多步骤的过程,用于估计因变量和一个或多个自变量之间的关系,也被称为预测因素或协变量。回归分析主要用于两个概念上不同的目的:预测和预报,它的使用与机器学习领域有很大的重叠,其次它有时可以用来推断自变量和因变量之间的关系。

分类变量的回归

分类变量 是可以采取有限和固定数量的可能值之一的变量,根据一些定性属性将每个个体或其他观察单位分配到一个特定的群体或名义类别。它们也被称为因子或定性变量。最适合分类变量的回归分析类型是Logistic回归。Logistic回归使用最大似然估计法来估计参数。它得出了一组变量(自变量)和一个分类变量(因变量)之间的关系。使用R语言来实现回归模型是非常容易的,因为它有很好的库。现在,让我们试着建立一个带有分类变量的逻辑回归模型,以便更好地理解。

例子: 我们的目标是用gre、gpa和rank等变量来预测一个考生是否能被大学录取。为了让用户更好地理解,我们提供了并列的R脚本,并进行了注释。数据是.csv格式的。我们将用 getwd()函数获得工作目录,并将数据集binary.csv放在其中,以便进一步进行。请在这里下载CSV文件。

# preparing the dataset 
getwd() 
data <- read.csv("binary.csv" ) 
str(data)
R

输出

'data.frame':    400 obs. of  4 variables:
 admit: int  0 1 1 1 0 1 1 0 1 0 ... gre  : int  380 660 800 640 520 760 560 400 540 700 ...
 gpa  : num  3.61 3.67 4 3.19 2.93 3 2.98 3.08 3.39 3.92 ... rank : int  3 3 1 4 4 2 1 2 3 2 ...
R

观察数据集的结构,我们可以发现它有4个变量,其中admission告诉我们考生是否会被录取(如果被录取为1,如果不被录取为0)gre,gpa和rank分别给出考生的gre分数,他/她在以前的大学的gpa和以前的大学排名。 我们用录取作为因变量,用gre、gpa和排名作为自变量。现在,请注意,录取和排名是分类变量,但属于数字类型。但是为了在我们的模型中使用它们作为分类变量,我们将使用 _ as.factor()_ 函数将它们转换为因子变量。

# converting admit and rank
# columns into factor variables
dataadmit = as.factor(dataadmit)
datarank = as.factor(datarank)
  
# two-way table of factor
# variable
xtabs(~admit + rank, data = data)
R

输出

     rank
admit  1  2  3  4
    0 28 97 93 55
    1 33 54 28 12
R

现在将数据分为训练集和测试集。训练集用于寻找因变量和自变量之间的关系,而测试集则是分析模型的性能。我们使用60%的数据集作为训练集。训练集和测试集的数据分配是通过随机抽样完成的。我们使用 sample() 函数在R上进行随机抽样。使用 set.seed() ,每次生成相同的随机样本,并保持一致性。

# Partitioning of data
set.seed(1234)
data1<-sample(2, nrow(data), 
                   replace = T, 
                 prob = c(0.6, 0.4))
train<-data[data1 == 1,]
test<-data[data1 == 2,]
R

现在为我们的数据建立一个逻辑回归模型。 glm() 函数帮助我们为数据建立一个神经网络。我们在这里使用的 glm() 函数的语法如下。

语法

glm(formula, family = gaussian, data, weights, subset, na.action, start = NULL, etastart, mustart, offset,

control = list(..), model = TRUE, method = “glm.fit”, x = FALSE, y = TRUE, singular.ok = TRUE, contrasts = NULL, …)

参数 说明
formula 对要拟合的模型的符号描述。
family 对模型中使用的误差分布和链接函数的描述。
data 一个可选的数据框。
weights 拟合过程中使用的 “先验权重 “的可选向量。应该是NULL或一个数字向量。
subset 一个可选的向量,指定拟合过程中使用的观测值子集。
na.action 一个函数,表示当数据包含NA时应该发生什么。
start 线性预测器中参数的起始值。
etastart 线性预测器的起始值。
mustart 指数向量的起始值。
offset 可以用来指定在拟合过程中包含在线性预测器中的一个先验的已知成分。
control 用于控制拟合过程的参数列表。
model 一个逻辑值,表示是否应将模型框架作为返回值的一个组成部分。
method 拟合模型时使用的方法。
x,y 逻辑值,表示是否应将拟合过程中使用的响应向量和模型矩阵作为返回值的组成部分返回。
singular.ok 逻辑值;如果是FALSE,单数拟合是一个错误。
contrasts 一个可选的列表。
参数,如果没有直接提供,将用于形成默认的控制参数。
mymodel<-glm(admit~gre + gpa + rank, 
                        data = train, 
                        family = 'binomial')
summary(mymodel)
R

输出

Call:
glm(formula = admit ~ gre + gpa + rank, family = "binomial", 
    data = train)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6576  -0.8724  -0.6184   1.0683   2.1035  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)   
(Intercept) -4.972329   1.518865  -3.274  0.00106 **
gre          0.001449   0.001405   1.031  0.30270   
gpa          1.233117   0.450550   2.737  0.00620 **
rank2       -0.784080   0.406376  -1.929  0.05368 . 
rank3       -1.203013   0.426614  -2.820  0.00480 **
rank4       -1.699652   0.536974  -3.165  0.00155 **
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 312.66  on 248  degrees of freedom
Residual deviance: 283.38  on 243  degrees of freedom
AIC: 295.38

Number of Fisher Scoring iterations: 4
R

从模型的总结中可以看出,gre在预测中没有明显的作用,所以我们可以把它从我们的模型中删除,改写为如下。

mymodel<-glm(admit~gpa + rank, 
                  data = train, 
                 family = 'binomial')
R

现在,让我们试着通过做一些预测来分析我们的回归模型。

# Prediction
p1<-predict(mymodel, train, 
            type = 'response')
head(p1)
R

输出

        1         7         8        10        12        13 
0.3013327 0.3784012 0.2414806 0.5116852 0.4610888 0.7211702 
R
head(train)
R

输出

   admit gre  gpa rank
1      0 380 3.61    3
7      1 560 2.98    1
8      0 400 3.08    2
10     0 700 3.92    2
12     0 440 3.22    1
13     1 760 4.00    1
R

然后,我们通过创建一个混淆矩阵来比较真/假阳性和阴性的数量,从而对我们的结果进行取舍。我们将用训练数据形成一个混淆矩阵。

# confusion Matrix 
# Misclassification error -Training data  
pre1<-ifelse(p1>0.5, 1, 0)
table<-table(Prediction = pre1, 
             Actual = trainadmit) 
table
R

输出

          Actual
Prediction   0   1
         0 158  55
         1  11  25
R

该模型产生了158个真阴性(0),25个真阳性(1),而有11个假阴性和55个假阳性。现在,让我们计算一下错误分类误差(针对训练数据),即{1-分类误差}。

1 - sum(diag(table)) / sum(table)
R

输出

[1] 0.2650602
R

错误分类的误差为24.9%。在这一点上,我们可以用分类变量的回归技术来处理其他各种数据。

回归分析是一种非常有效的方法,人们可以使用众多类型的回归模型。这种选择往往取决于你有什么样的因变量数据,以及提供最佳拟合的模型类型,如逻辑回归最适合于分类变量。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册