精华内容
下载资源
问答
  • r library car_第三十九讲 R语言-线性回归:自变量中存在分类变量
    千次阅读
    2020-11-20 14:39:40

    e9dab0ccff8116ee7b4b00e9e9bb1e9d.png

    当我们提到“线性”回归时,特指的是因变量(结果变量)为连续性变量,与自变量(预测变量)有线性关系,而对自变量(预测变量)并没有要求一定要是连续性变量。前面我们已经提到,当自变量是连续变量时,线性回归可以写成一个线性方程式y = b0 + b1*x1 + b2*x2 + …

    那么,当自变量是分类变量时,回归分析时如何处理的呢?我们能不能把各个分类的类别像血压、血糖数值一样,对应为响应的数值大小来处理呢?这显然是不可以的,因为分类变量各类别间,可能并没有一个高低之分。我们将在第三十九讲带你找到答案。

    1. 分类变量

    分类变量(也称为因子定性变量)是将观察指标分类的变量。它们具有数量有限的不同值,称为级别。例如,性别是可以分为两个级别的分类变量:男性或女性。

    回归分析时需要用数值变量。因此,当需要将分类变量用在回归模型中时,需要对分类变量进行补充处理,以使结果可解释。

    通常,我们需要将分类变量进行重新编码,使成为一系列二进制的变量,被称为对比矩阵。这个新的编码,被称为“哑变量”。(下文将详细解释)

    2. 加载所需的R包

    • tidyverse 便于数据操作和可视化
    library(tidyverse)

    2.1 数据集示例

    我们将使用在car软件包中的Salaries数据集,其中包含2008-09年度某学校助理教授,副教授和教授的9个月工资情况。收集这些数据是该学校行政部门为监测男女教职员工薪资差异而收集的数据。

    # 获取数据
    data("Salaries", package = "car")
    # 检查数据,随机抽取3个样本显示。
    sample_n(Salaries, 3)
    ##     rank discipline yrs.since.phd yrs.service    sex salary
    ## 115 Prof          A            12           0 Female 105000
    ## 313 Prof          A            29          19   Male  94350
    ## 162 Prof          B            26          19   Male 176500

    2.2具有两个级别的分类变量 – 二分类变量

    基于预测变量(x)预测结果变量(y)的回归方程可以写为y = b0 + b1*x。b0和b1是回归beta系数,分别代表截距和斜率。

    假设,我们希望调查男性和女性之间的工资差异。

    基于性别变量,我们可以创建一个新的虚拟变量,其值如下:

    • 1 是男性
    • 0 是女性

    并将此变量用作回归方程式的预测变量,从而得出以下模型:

    • b0 + b1 如果是男性 (y = b0 + b1 * 1)
    • b0 如果是女性(x = b0 + b1 * 0)

    系数可以解释如下:

    1. b0 是女性的平均工资,
    2. b0 + b1 是男性的平均工资,
    3. 而b1在男性和女性之间的工资的平均差异。

    我们以Salaries数据集中男女工资差异为例,进行解说:建立一个简单的线性回归模型来解释男性和女性之间的工资差异 。虽然数据中sex是Male和Female,但是R会自动创建哑变量,于是模型结果如下:

    model <- lm(salary ~ sex, data = Salaries)
    summary(model)$coef
    ##             Estimate Std. Error t value Pr(>|t|)
    ## (Intercept)   101002       4809   21.00 2.68e-66
    ## sexMale        14088       5065    2.78 5.67e-03

    从上面的输出中,女性的平均工资估计为101002,而男性的平均工资估计为101002 + 14088 =115090。哑变量sexMale的p值 = 5.670e-3, 非常显着,表明有统计证据表明性别之间的平均工资存在差异。

    使用contrasts()函数可以返回R创建的哑变量编码:

    contrasts(Salaries$sex)
    ##        Male
    ## Female    0
    ## Male      1

    R创建了一个sexMale虚拟变量,如果性别为Male,则其值为1,否则为0。将男性编码为1,女性编码为0(基线)的决定是任意的,并且对回归计算没有影响,但会改变系数的解释方向。

    您可以使用函数relevel()将基线类别设置为男性,如下所示:

    Salaries <- Salaries %>%
      mutate(sex = relevel(sex, ref = "Male"))

    回归拟合的输出变为:

    model <- lm(salary ~ sex, data = Salaries)
    summary(model)$coef
    ##             Estimate Std. Error t value  Pr(>|t|)
    ## (Intercept)   115090       1587   72.50 2.46e-230
    ## sexFemale     -14088       5065   -2.78  5.67e-03

    sexFemale回归输出中的系数为负。这一事实表明,女性与工资的下降(相对于男性)相关。

    现在对b0和b1的估计分别为115090和-14088。解释为:

    男性的平均工资为11509,女性的平均预测为115090-14088 = 101002。

    此外,除了0/1编码外,我们还可以创建一虚拟变量-1(male)/ 1(female)。结果模型:

    • b0 - b1 如果是男性
    • b0 + b1 如果是女性

    2.3 具有两个以上级别的分类变量 – 多分类变量

    通常,将具有n个级别的分类变量转换为n-1个哑变量。这n-1个哑变量包含的信息与单个变量相同。重新编码将创建矩阵,称为对比矩阵

    例如,Salaries数据集中的rank具有三个级别:“ AsstProf”,“ AssocProf”和“ Prof”。可以将该变量编码为两个哑变量,一个称为AssocProf,另一个称为Prof:

    • 如果rank = AssocProf,则列AssocProf的编码为1,Prof的编码为0。
    • 如果rank = Prof,则将AssocProf列编码为0,将Prof列编码为1。
    • 如果rank = AsstProf,则“ AssocProf”和“ Prof”两列都将编码为0。

    该变量的编码由R自动执行。 您可以使用函数model.matrix()为分类变量创建对比矩阵,进行学习:

    res <- model.matrix(~rank, data = Salaries)
    head(res[, -1])
    ##   rankAssocProf rankProf
    ## 1             0        1
    ## 2             0        1
    ## 3             0        0
    ## 4             0        1
    ## 5             0        1
    ## 6             1        0

    建立线性模型时,有多种方法来编码分类变量,称为对比编码系统。R中的默认选项是使用分类变量的第一个级别作为参考,并用以解释相对于该级别的其余级别,比如,结果解释为:相对于该参考级别,某级别是参考级别的几倍。

    请注意,ANOVA(方差分析)是线性模型的一种特殊情况,其中预测变量是分类变量。并且,由于R理解ANOVA和回归都是线性模型的示例,因此您可以使用anova()函数或Anova()函数[ car包中] ,从回归模型中提取经典ANOVA表。我们通常建议使用此Anova()功能,因为它会自动处理不平衡设计。

    下面显示了使用多元回归预测薪水的结果。

    library(car)
    model2 <- lm(salary ~ yrs.service + rank + discipline + sex,
                 data = Salaries)
    Anova(model2)
    ## Anova Table (Type II tests)
    ## 
    ## Response: salary
    ##               Sum Sq  Df F value  Pr(>F)    
    ## yrs.service 3.24e+08   1    0.63    0.43    
    ## rank        1.03e+11   2  100.26 < 2e-16 ***
    ## discipline  1.74e+10   1   33.86 1.2e-08 ***
    ## sex         7.77e+08   1    1.51    0.22    
    ## Residuals   2.01e+11 391                    
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

    考虑到其他变量(服务年数,职级和学科),可以看出分类变量性别不再与个人之间的薪资差异显着相关。重要变量是教职等级和学科。

    如果要查看详细内容,请输入以下内容:

    summary(model2)
    ## 
    ## Call:
    ## lm(formula = salary ~ yrs.service + rank + discipline + sex, 
    ##     data = Salaries)
    ## 
    ## Residuals:
    ##    Min     1Q Median     3Q    Max 
    ## -64202 -14255  -1533  10571  99163 
    ## 
    ## Coefficients:
    ##               Estimate Std. Error t value Pr(>|t|)    
    ## (Intercept)    73122.9     3245.3   22.53  < 2e-16 ***
    ## yrs.service      -88.8      111.6   -0.80  0.42696    
    ## rankAssocProf  14560.4     4098.3    3.55  0.00043 ***
    ## rankProf       49159.6     3834.5   12.82  < 2e-16 ***
    ## disciplineB    13473.4     2315.5    5.82  1.2e-08 ***
    ## sexFemale      -4771.2     3878.0   -1.23  0.21931    
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## Residual standard error: 22700 on 391 degrees of freedom
    ## Multiple R-squared:  0.448,  Adjusted R-squared:  0.441 
    ## F-statistic: 63.4 on 5 and 391 DF,  p-value: <2e-16

    例如,可以看出,与学科A(理论系,基线)相比,来自学科B(应用系)的工资平均增加了13473.38。

    2.4 注意

    当分类变量具有大量级别时,将某些级别组合在一起,可以减少哑变量数。

    某些分类变量的级别是有序的。它们可以被转换为数值(0,1,2,3…)并按连续性变量处理。例如,如果教授等级(“ AsstProf”,“ AssocProf”和“ Prof”)具有特殊含义,则可以将它们转换为数值,从低到高排序(AsstProf = 0, AssocProf = 1, Prof = 2),对应于不同等级的教授。

    参考内容:

    1. Alboukadel Kassambara, Machine Learning Essentials: Practical Guide in R

    如果您觉得我说的对您有帮助,请点赞让我感到您的支持,您的支持是我写作最大的动力~ijournal:高颜值的期刊检索网站,助您快速找到理想目标期刊(weixin小程序也上线了哦)投必得:全专业中英文论文润色编辑助力您的论文快速发表,点击了解业务详情

    4eb7b2a10f59d62aec6d4038a778eae2.png

    专栏传送门:
    投必得科研软件安装使用手册;投必得:SCI期刊介绍与选择;投必得,教你写论文;投必得统计分析大讲堂;投必得科研生活解忧杂货店

    更多相关内容
  • 15种分类变量编码方法

    千次阅读 2021-02-16 11:04:34
    机器学习问题建模,15种分类变量编码方法。

    原文:HTML
    原题:All about Categorical Variable Encoding:Convert a categorical variable to number for Machine Learning Model Building
    作者:Baijayanta Roy
    翻译校对:datamonday



    在这里插入图片描述
    大多数机器学习算法都无法处理分类变量,需要将它们转换为数值。许多算法的性能会根据分类变量的编码方式而有所不同
    在这里插入图片描述
    以下是标量(Nominal variable)的一些示例:

    • Red, Yellow, Pink, Blue
    • Singapore, Japan, USA, India, Korea
    • Cow, Dog, Cat, Snake

    序数变量(Ordinal variables)的示例:

    • High, Medium, Low
    • “Strongly agree,” Agree, Neutral, Disagree, and “Strongly Disagree.”
    • Excellent, Okay, Bad

    可以通过多种方式将这些分类变量编码为数值,这篇文章将介绍从基本到高级的大多数内容,包含以下编码方法:

    1. One Hot Encoding
    2. Label Encoding
    3. Ordinal Encoding
    4. Helmert Encoding
    5. Binary Encoding
    6. Frequency Encoding
    7. Mean Encoding
    8. Weight of Evidence Encoding
    9. Probability Ratio Encoding
    10. Hashing Encoding
    11. Backward Difference Encoding
    12. Leave One Out Encoding
    13. James-Stein Encoding
    14. M-estimator Encoding
    15. Thermometer Encoder (To be updated)

    为了说明起见,我将使用此数据表格(DataFrame),其包含两个独立变量或特征(温度和颜色)和一个标签(目标)。 它还具有Rec-No,它是记录的序列号,共有10条记录。Python代码如下所示。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    我们将使用Pandas和Scikit-learn和category_encoders(Scikit-learn贡献库)来显示Python中的不同编码方法。


    One Hot Encoding

    在这种方法中,将每个类别映射到一个包含1和0的矢量,表示该特征的存在与否。 向量的数量取决于特征类别的数量。如果该特征类别的数量非常多,则此方法会产生很多列,从而大大降低学习速度。 Pandas的 get_dummies 函数可以将分类变量编码为哑变量:

    在这里插入图片描述
    Scikit-learn中的 OneHotEncoder 类也可以实现,但它不会创建其他特征列。
    在这里插入图片描述
    独热编码(One Hot Encoding)非常流行。可以用N-1(N=类别数)来表示所有类别,因为这足以对没有包含的类别进行编码。通常,对于回归,使用N-1(放弃独热编码新特征的第一列或最后一列),但对于分类,建议使用所有N列,因为大多数基于树的算法都是基于所有可用变量建立一棵树。在线性回归中应该使用具有N-1个二元变量的一热编码,以确保正确的自由度数(N-1)。线性回归在训练的过程中,可以获得所有的特征,因此会完全检查整个虚变量集。这意味着N-1个二元变量给线性回归提供了原始分类变量的完整信息(完全代表)。这种方法可以用于任何在训练过程中同时考察所有特征的机器学习算法。例如,支持向量机和神经网络以及和聚类算法。

    在基于树的方法中,如果删除,将永远不会考虑该附加标签。 因此,如果在基于树的学习算法中使用分类变量,则比较好的做法是将其编码为N个二进制变量,并且不要丢弃。


    Label Encoding

    在这种编码中,为每个类别分配了一个从1到N的值(N为特征的类别数)。这种方法的一个主要问题是这些类别之间没有关系或顺序,但是算法可能会将它们视为但是算法可能会将它们视为某种顺序,或者存在某种关系。 在下面的示例中,它看起来像(Cold <Hot <Very Hot <Warm … 0 <1 <2 ❤️)。
    在这里插入图片描述
    Pandas的 factorize 也执行相同的功能。

    在这里插入图片描述


    Ordinal Encoding

    我们执行序数编码以确保变量的编码保留变量的序数性质。 正如我在本文开头提到的那样,这仅对序数变量合理。 这种编码看起来几乎与标签编码类似,但略有不同,因为标签编码不会考虑变量是否为序数,并且会分配整数序列

    • as per the order of data (Pandas assigned Hot (0), Cold (1), “Very Hot” (2) and Warm (3)) or
    • as per alphabetical sorted order (scikit-learn assigned Cold(0), Hot(1), “Very Hot” (2) and Warm (3)).

    如果我们以温度标尺为顺序,则顺序值应从“冷”到“非常热”。 顺序编码会将值指定为 ( Cold(1) <Warm(2)<Hot(3)<Very Hot(4))。 通常,我们从1开始进行序数编码。

    使用Pandas引用此代码,首先,需要通过字典分配变量的原始顺序。 然后按照字典映射变量的每一行。
    在这里插入图片描述
    尽管非常简单,但仍需要进行编码以告知序数值,以及按顺序从文本到整数的实际映射是什么。


    Helmert Encoding

    在此编码中,将某个级别的因变量的平均值与所有先前级别的因变量的平均值进行比较。

    category_encoders中的版本有时称为反向Helmert编码。 将某个级别的因变量平均值与之前所有级别的因变量平均值进行比较。因此,名称“reverse”用于区别于 forward Helmert编码。

    在这里插入图片描述


    Binary Encoding

    二进制编码将类别转换为二进制数字。 每个二进制数字创建一个特征列。 如果存在n个唯一类别,则二进制编码将导致仅有log(base 2)ⁿ 个特征。 在此示例中,有四个特征; 因此,二进制编码特征的总数将是三个特征。 与“独热编码”相比,这将需要较少的特征列(对于100个类别,“独热编码”将具有100个特征,而对于“二进制”编码,我们将仅需要七个特征)

    对于二进制编码,必须遵循以下步骤:

    • 首先,将类别转换为从1开始的数字顺序(顺序是在类别出现在数据集中时创建的,并不表示任何序数性质)
    • 然后,将这些整数转换为二进制代码,例如3变为011,4变为100。
    • 然后,二进制数的数字形成单独的列。

    请参考下图:
    在这里插入图片描述
    使用category_encoders包中的 BinaryEncoder 函数可以实现二进制编码。
    在这里插入图片描述


    Frequency Encoding

    这是一种利用类别的频率作为标签的方法在频率与目标变量有些相关的情况下,它可以帮助模型根据数据的性质以正比例和反比例理解和分配权重。 三个步骤:

    • 选择要转换的分类变量
    • 按类别变量分组并获得每个类别的计数
    • 将其与训练数据集重新结合

    在这里插入图片描述


    Mean Encoding

    平均编码或目标编码是Kagglers遵循的一种病毒(viral)编码方法。这有很多变化,我将介绍基本版本和平滑版本。平均编码与标签编码类似,只是这里的标签与目标直接相关。例如,在平均目标编码中,对于特征标签中的每一个类别,都是用目标变量在训练数据上的平均值来决定的。这种编码方法将相似类别之间的关系凸显出来,但联系被限定在类别和目标本身之内。平均目标编码的优点是不影响数据量,有助于加快学习速度。通常,Mean编码存在过拟合,因此,在大多数场合,使用交叉验证或其他方法进行正则化是必须的。平均数编码的方法如下:

      1. 选择要转换的分类变量。
      1. 按类别变量分组,并获得“目标”变量上的汇总和。 (“温度”中每个类别的总数为1)
      1. 按类别变量分组,并获得“目标”变量的总计数。
      1. 划分第2步/第3步的结果,然后将其与训练集合并。

    在这里插入图片描述
    代码实现:
    在这里插入图片描述
    均值编码可以在标签中体现目标,而标签编码与目标不相关。在具有大量特征的情况下,均值编码可能被证明是更简单的选择。均值编码倾向于对类别进行分组,而在标签编码的情况下,分组是随机的。

    实际上,此目标编码有多种变体,例如平滑。 平滑可以实现如下:

    在这里插入图片描述


    Weight of Evidence Encoding

    证据权重(WoE)是衡量分组技术区分好坏的“强度”的一种度量。 开发此方法主要是为了建立一种预测模型,以评估信贷和金融行业中的贷款违约风险。 证据权重(WOE)用于衡量证据支持或破坏假设的程度

    其计算方法如下:
    在这里插入图片描述
    如果P(Goods) / P(Bads) = 1,则WoE将为0。也就是说,该组的结果是随机的。 如果P(Bads) > P(Goods) ,则优势比将小于1,WoE将小于0; 另一方面,如果一组中的P(Goods) > P(Bads),则WoE> 0。

    WoE非常适合Logistic回归,因为Logit变换只是几率的对数,即 ln(P(Goods)/P(Bads))。 因此,通过在Logistic回归中使用WoE编码的预测变量,可以将所有预测变量准备和编码为相同的比例。线性逻辑回归方程中的参数可以直接比较。

    WoE转换具有(至少)三个优点:

    • 1)它可以转换自变量,以便与因变量建立单调关系。它所做的还不止于此:要确保单调关系,将其“重新编码”为任何有序的度量(例如1,2,3,4…)就足够了,但是WoE转换按“逻辑”规模对类别进行排序, Logistic回归很自然;
    • 2)对于具有太多(稀疏填充)离散值的变量,可以将它们分为几类(密集填充),并且WoE可以用于表示整个类别的信息;
    • 3)由于WoE是标准值,因此可以在类别和变量之间比较每个类别对因变量的(单变量)影响(例如,可以将已婚人员的WoE与体力劳​​动者的WoE进行比较)。

    它还(至少)具有三个缺点:

    • 1)由于归类为几个类别而导致的信息丢失;
    • 2)这是一个“单变量”量度,因此未考虑自变量之间的相关性
    • 3)根据类别的创建方式,很容易操纵(过拟合)变量的影响。

    下面代码片段说明了如何构建代码来计算WoE。
    在这里插入图片描述

    一旦为每个组计算WoE,我们就可以将其映射回Data-frame。
    在这里插入图片描述


    Probability Ratio Encoding

    概率比编码与证据权重(WoE)类似,唯一的区别是仅使用了好坏概率之比。 对于每个标签,我们计算target = 1的平均值,即平均值为 1 ( P(1) ),以及target = 0 ( P(0) )的概率。 然后,我们计算比率P(1)/P(0)并用该比率替换标签。我们需要为P(0)添加一个最小值,以避免任何除以零的情况,其中对于任何特定类别,没有target = 0。

    在这里插入图片描述
    在这里插入图片描述


    Hashing

    散列将分类变量转换为整数的高维空间,其中分类变量的两个向量之间的距离大致保持了变换后的数字维空间。 使用散列时,维度数量将远远少于像“独热编码”这样的编码方式的维度数量当分类的基数非常高时,此方法很有用


    Backward Difference Encoding

    在后向差分编码中,将一个级别的因变量的平均值与先前级别的因变量的平均值进行比较。 这种类型的编码对于标称或有序变量可能有用。

    该技术属于用于分类特征的对比度编码系统。 K个类别或级别的特征通常以K-1个虚拟变量序列的形式进入回归。


    Leave One Out Encoding

    这与目标编码非常相似,但是在计算某个级别的平均目标以减少离群值的影响时会排除当前行的目标。


    James-Stein Encoding

    对于特征值,James-Stein估计量返回的加权平均值为:

    1. 观察到的特征值的平均目标值。
    2. 平均目标值(与特征值无关)。
      James-Stein编码器将平均值缩小为总体平均值。 它是基于目标的编码器。 但是,James-Stein估计量有一个实际限制-仅针对正态分布进行了定义。

    M-estimator Encoding

    M-Estimate编码器是目标编码器的简化版本。 它只有一个超参数-m,代表正则化的功效。 m值越高,收缩越强。 m的推荐值在1到100的范围内。


    FAQ

    【常见问题解答01:我应该使用哪种方法?】

    答:没有适用于每个问题或数据集的单一方法。 你可能需要尝试一些才能看到效果更好的结果。 一般准则是参考文章末尾显示的备忘单。

    【常见问题解答02:如何针对情况(例如目标编码)创建分类编码,因为在测试数据中不会有任何目标值?】

    答:我们需要使用训练时创建的映射值。 此过程与缩放或规范化中的概念相同,在缩放或规范化中,我们使用训练数据来缩放或规范化测试数据。 W映射并在测试时间预处理中使用相同的映射。 我们甚至可以为每个类别和映射值创建一个词典,然后在测试时使用该词典。 在这里,我使用均值编码来解释这一点。

    Training Time
    在这里插入图片描述
    Testing Time
    在这里插入图片描述


    Conclusion

    对于所有机器学习模型,必须理解所有这些编码在所有情况下或对于每个数据集都无法正常工作。 数据科学家仍然需要进行实验,并找出最适合其特定情况的方法。 如果测试数据具有不同的类别,则其中某些方法将无法使用,因为功能将不相似。 研究社区的基准出版物很少,但不是结论性的,效果最好。 我的建议是尝试使用较小的数据集尝试每种方法,然后决定将重点放在调整编码过程上。 可以使用下面的备忘单作为指导工具。
    在这里插入图片描述

    展开全文
  • 全局变量的使用范围:从定义位置开始到下面整个程序结束 局部变量:在一个函数内部定义的变量或者函数的形式参数统称为局部变量 局部变量的使用范围:在函数内部定义的变量只能在本函数内部进行使用 2.简述变量按...
  • 两个分类变量间的关系,无法直接使用常见的...也称为相应分析,是一种多元统计分析方法,目的是在同时描述各变量分类间关系时,在一个低维度空间对对应表的两个分类变量进行关系的描述。常见应用领域如市场...

    两个分类变量间的关系,无法直接使用常见的皮尔逊相关系数来表述,多采用频数统计、交叉表卡方检验等过程进行处理,当分类变量的取值较多时,列联表频数的形式就变得更为复杂,很难从中归纳出变量间的关系。

    对应分析,则是解决分类变量间关系这个复杂问题的有力武器。也称为相应分析,是一种多元统计分析方法,目的是在同时描述各变量分类间关系时,在一个低维度空间中对对应表中的两个分类变量进行关系的描述。

    常见应用领域如市场研究分析、竞争分析等。

    一、先看一个案例

    对于男性而言,个人职位是否与吸烟有关,假设有人收集了这样的一组数据,如下:

    数字表示人数,仅从交叉表内数据大小按照热度区分的话,效果大概是这个样子,红色越深的格子表示人数越多:

    我们发现初级雇员普遍吸烟,中度最多,其他的表现并不明显,总体上很难发现什么规律。

    除了热图之外,还可以考虑常见的条形图,效果如下:

    可视化的效果要比前面热图好很多,给人的直观感觉是,职位较高的男性,重度吸烟的比例较低,多数从不吸烟。

    经过以上两种图示化方法的预处理,我们能从其中总结职位和吸烟关系的把握并不大。

    二、SPSS交叉表卡方检验

    熟悉SPSS统计分析的人可能还会想到,是否可以先采用交叉表卡方检验来观察职位和吸烟之间的关系呢?

    展开全文
  • 分类变量(也称为因子或定性变量)是可以将观测数据分组的变量。它们有有限数量的不同值,称为水平。例如,性别作为一个分类变量,它有两个水平:男性或女性。 回归分析需要数值变量。因此,当研究者希望在回归模型...

    本篇描述分类变量如何进行回归(翻译自http://www.sthda.com/english/articles/40-regression-analysis/163-regression-with-categorical-variables-dummy-coding-essentials-in-r/)

    分类变量(也称为因子或定性变量)是可以将观测数据分组的变量。它们有有限数量的不同值,称为水平。例如,性别作为一个分类变量,它有两个水平:男性或女性。

    回归分析需要数值变量。因此,当研究者希望在回归模型中包含一个分类变量时,需要其他步骤使结果具有可解释性。

    在这些步骤中,分类变量被重新编码成一组单独的二元变量。这种编码被称为“哑变量编码”,并创建一个称为contrast matrix的表。这是由统计软件自动完成的,如R。

    在这里,您将学习如何构建和解释带有分类预测变量的线性回归模型。我们还将在R中提供实际的例子。

    加载需要的R包

    便于数据操作和可视化的tidyverse
    在这里插入图片描述

    数据集示例

    我们将使用Salaries数据集[car package],它包含美国一所大学的助理教授、副教授和教授2008-2009年内9个月的工资。这些数据的收集目的是监测男性和女性教师之间的工资差异。

    在这里插入图片描述
    在这里插入图片描述

    两个水平的分类变量

    回想一下,在预测变量(x)的基础上预测结果变量(y)的回归方程可以简单地写成y = b0 + b1*x。b0和b1为回归系数,分别表示截距和斜率。

    假设,我们希望调查男性和女性之间的工资差异。

    基于性别变量,我们可以创建一个新的哑变量,取值为:
    在这里插入图片描述

    并将该变量作为回归方程的预测变量,得到如下模型:在这里插入图片描述
    这些系数可以解释为:

    (1)b0是女性的平均工资,
    (2)b0 + b1是男性的平均工资,
    (3)b1是男性和女性的平均工资差异。

    为了演示,下面的例子通过计算一个简单的关于 Salaries 数据集[car包]的线性回归模型来模拟男性和女性之间的工资差异。R自动创建虚拟变量:
    在这里插入图片描述
    在这里插入图片描述
    从上面的输出可以看出,女性的平均工资估计为101002,而男性的平均工资估计为101002 + 14088 = 115090。哑变量sexMale的p值非常显著,这表明两性之间的平均工资存在显著差异。

    contrasts() 函数的作用是:返回R用来创建哑变量的编码:
    在这里插入图片描述
    在这里插入图片描述
    R创建了一个sexMale哑变量,如果性别是男性,则值为1,否则值为0。将男性编码为1,女性编码为0(基线)的决定是任意的,这对回归计算没有影响,但是会改变对系数的解释。

    可以使用relevel()函数将基线类别设置为males,如下所示:
    在这里插入图片描述
    之后回归拟合的输出为:
    在这里插入图片描述
    在这里插入图片描述
    事实上,在回归输出中性别女性的系数是负的,这表明作为女性与薪水(相对于男性)的减少有关。

    现在b0和b1的预测值分别为115090和-14088,再次得出男性的平均工资为115090,女性的平均工资为115090 -14088 = 101002。

    另外,我们可以创建一个哑变量-1(男性)/1(女性),而不是0/1编码方案。这导致模型:
    在这里插入图片描述

    具有两个以上水平的分类变量

    一般来说,一个有n个水平的分类变量会转化为n-1个各有2个水平的哑变量。这n-1个新变量包含的信息与单个变量相同。

    例如, Salaries 数据中的**’‘rank’’**有三个水平:“AsstProf”、“AssocProf”和“Prof”。这个变量可以伪编码成两个变量,一个叫AssocProf,一个叫Prof:
    在这里插入图片描述
    这个哑变量编码由r自动执行。出于演示目的,您可以使用函数model.matrix()为一个因子变量创建一个 contrast matrix :
    在这里插入图片描述
    在这里插入图片描述
    在建立线性模型时,有不同的方法来编码分类变量,称为对比编码系统。R中的默认选项是使用因子的第一个水平作为参考,并解释相对于该水平的其余水平。

    注意,ANOVA(方差分析)只是线性模型的一种特殊情况,其中的预测因子是分类变量。而且,因为R理解ANOVA和回归都是线性模型的例子,它允许您使用R base anova()函数或*ANOVA()*函数[car包]从您的回归模型中提取经典的ANOVA。我们通常推荐Anova()函数,因为它会自动处理不平衡设计。
    使用多元回归方法预测工资的结果如下:
    在这里插入图片描述
    在这里插入图片描述
    取其他变量(yrs.service, rank and discipline),可以看出分类变量性别不再与个体间薪酬差异显著相关。重要变量是rank和discipline.。

    如果你想解释分类变量的对比,输入:
    在这里插入图片描述
    例如,我们可以看到,来自discipline B( applied departments) 的员工相对于discipline A(theoretical departments)平均工资增长13473.38,这是显著相关的。

    讨论

    在这一篇章中,我们描述了分类变量是如何包含在线性回归模型中的。由于回归需要数字输入,分类变量需要被重新编码成一组二元变量。

    我们提供了实际的例子,你有两个或两个以上水平的分类变量的情况。

    注意,对于具有大量水平的分类变量,将一些水平组合在一起可能是有用的。

    有些类别变量的级别是有序的。它们可以转换为数值并按原样使用。例如,如果教授等级(“AsstProf”、“AssocProf”和“Prof”)有特殊的含义,您可以将它们转换为数值,从低到高排序。

    展开全文
  • 【单选题】以下选项中属于Python语言中合法的二进制整数是【单选题】以下说法错误的是:【单选题】下面属于B2B电子商务模式的是( )。【单选题】下面哪种金属毛坯成形的加工方法无需进行热处理和机械加工?【判断题】酶...
  • 1.什么是变量(内存当中一片区域的地址)?...在 shell 中变量是不能永久保存在系统的,必须在文件声明 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问 ...
  • 在基因数据的分析,经常会用到lasso(套索)这种方法来进行变量的筛选,其实就是在目标优化函数后边加一个L1正则化项,其中参数lamda为超参数,需要我们去确定。接下来以线性回归为例介绍其在R语言的实现,当然在...
  • 机器学习——特征工程之分类变量

    千次阅读 2019-08-30 16:05:43
    关于特征工程,已经对空值、数值型和文本数据的处理做了大致方法的说明,这篇对数据类型的另一大重要部分——分类变量,作处理方法总结。 声明:关于编程语法相关问题不会展开论述,本文只针对方法路线 分类变量...
  • 分类变量logistic回归分析--1

    千次阅读 2020-09-23 22:58:49
    变量(y变量)是多分类的,包括无序和有序的。 无序的多类别因变量:对应无序多分类logistic回归模型 有序的多类别因变量:有序多分类logistic回归模型 2.1 无序多分类logistic回归分析 2.2 有序多分类logistic...
  • 类别变量和有序类别(有序型)变量在R称为因子(factor)。区间变量取连续的数值,可以进行求和、平均等运算。名义变量和有序变量取离散值,可以用数值代表也可以 是字符型值,其具体数值没有加减乘除的意义,不能用来...
  • pandas生成虚拟变量(哑变量) import pandas as pd import numpy as np data = pd.read_csv('train.csv') ...下面将其转化为虚拟变量或者one-hot编码: Department_dummy= pd.get_dummies(data['Depart
  • SPSS-两变量相关性分析

    千次阅读 2020-12-28 21:14:06
    两个变量之间存在确定性:关系和不确定关系(会存在一定的波动范围),就好比你的亲生母亲绝对只有一个,而你的亲叔叔可能有好几个(可以在1叔—4叔之间波动)相关性一般分为 1:强正相关关系 (一个值会随着另一个值的...
  • 超级详细的特征哑变量处理

    千次阅读 2020-12-05 17:16:24
    ['男','女','男','女'],'age':[2,3,4,3]})dfget_dummies处理pd.get_dummies(df,columns=['性别','age'])get_dummies可以对多列(字符型和数值型)直接进行哑变量编码缺点:如果在测试集中出现了训练集没有出现过的...
  • 统计学当中关于变量分类

    万次阅读 2018-11-29 10:46:18
     统计学的变量(variables)大致可以分为数值变量(numrical)和分类变量(categorical)。  数值型变量是值可以取一些列的数,这些值对于 加法、减法、求平均值等操作是有意义的。而分类变量对于上述的操作是...
  • 变量分类及其介绍

    千次阅读 2018-06-01 11:30:16
    变量的静态储存方式是指,变量在定义时就被分配储存空间,直到整个程序结束。例如:全局变量、静态局部变量变量的动态储存方式是指,变量只有在使用时才会被分配储存空间,使用结束后又立马释放掉。例如:函数的...
  • 机器学习的特征变量及处理总结

    千次阅读 2019-12-09 20:48:41
    定性特征变量1.1 定类变量处理1.2 定序变量处理2. 定量特征变量3. 总结   牢记一句话:“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”。   机器学习的根本目标,就是用数据的特征变量...
  • 三个步骤: 1、选择要转换的分类变量 2、按类别变量分组并获得每个类别的计数 3、将其与训练数据集重新结合 fe = df.groupby('Temperature').size()/len(df)df.loc[:,'Temp_freq_encode'] = df['Temperature'].map...
  • dummyVars函数: dummyVars creates a full set of dummy... less than full rank parameterization----建立一套完整的虚拟变量 survey<-data.frame(service=c("very unhappy","unhappy","neutral","happy","ve...
  • 各种类型变量的定义以及赋值

    千次阅读 2020-08-23 17:54:33
    局部变量一般用在sql语句块,比如存储过程的begin/end。其作用域仅限于该语句块,在该语句块执行完毕后,局部变量就消失了。declare语句专门用于定义局部变量,可以使用default来说明默认值。set语句是设置不同...
  • 在Python可以使用 id 作为变量名,尽管不建议这样做。答:正确下列四环素类药物不良反应,哪一个是错误的答:抑制骨髓造血There ___ no need to feel homesick答:is根据增值税法律制度的规定,一般纳税人销售的...
  • 在mysql变量中分为局部变量@与全局变量@@他们都不分大小并,但两种变量用法稍有区别了,下面我来介绍产的用法.共同点:不区分大小写,都是变量.不同点:全局变量是系统中只读的,可以在配置文件中进行修改.mysql变量的术语...
  • 计算机二级C语言变量和常量知识点

    千次阅读 2021-05-20 05:13:40
    下面是关于计算机二级C语言变量和常量知识点,希望大家认真阅读!一、变量(一)、变量类型和表示方法1.什么是变量?一句话,变量是存储数据的值的空间。由于数值的类型有多种,有整数、小数(浮点数)、字符等等,那么...
  • sql中变量用法_SQL变量:基础和用法

    万次阅读 2020-07-26 10:45:52
    sql中变量用法 In this article, we will learn the notions and usage details of the SQL variable. In SQL Server, local variables are used to store data during the batch execution period. The local ...
  • 点击上方“蓝字”,我们一起分析数据Logistic回归是最常用的多因素回归模型,在医学研究,常...然后,在Rstudio,输入:mydata "clipboard")查看数据:2第二步 分类变量和等级变量转成因子型变量mydata$sex$sex...
  • 分类变量处理 分类变量是经常遇到的问题。一方面它们提供了信息;另一方面,它们可能是文本形式——纯文字或者与文字相关的整数——就像表格的索引一样。 因此,我们在建模的时候往往需要将这些变量量化,...
  • R语言变量的设置

    万次阅读 多人点赞 2019-01-30 15:51:26
    在构建回归模型时,如果自变量X为连续性...如果自变量X为二分类变量,例如是否饮酒(1=是,0=否),则回归系数β可以解释为:其他自变量不变的条件下,X=1(饮酒者)与X=0(不饮酒者)相比,所引起的因变量Y的平...
  • 机器学习的隐变量/潜变量和隐藏空间/潜在空间
  • 回归模型的哑变量

    万次阅读 多人点赞 2018-05-15 12:10:59
    如果自变量X为二分类变量,例如是否饮酒(1=是,0=否),则回归系数β可以解释为:其他自变量不变的条件下,X=1(饮酒者)与X=0(不饮酒者)相比,所引起的因变量Y的平均变化量。但是,当自变量X为多分类变量时,...
  • 松弛变量

    千次阅读 2020-02-28 13:35:19
    若所研究的线性规划模型的约束条件全是小于类型,那么可以通过标准化过程引入M个非负的松弛变量。松弛变量的引入常常是为了便于在更大的可行域内求解。若为0,则收敛到原有状态,若大于零,则约束松弛。 对线性...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 246,364
精华内容 98,545
关键字:

下面的变量中,属于分类变量的是