精华内容
下载资源
问答
  • 多重替代法
    千次阅读
    2021-04-19 04:38:36

    多重共线性问题的几种解决方法

    在多元线性回归模型经典假设中,其重要假定之一是回归模型的解释变量之间不存在线性关系,也就是说,解释变量X1,X2,……,Xk中的任何一个都不能是其他解释变量的线性组合。如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性。多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。

    所谓多重共线性是指线性回归模型的解释变量之间由于存在精确相关关系或者高度相关关系而使模型评估失真或者不准确。这里,我们总结了8个处理多重共线性问题的可用方法,大家在遇到多重共线性问题时可作参考:

    1、保留重要解释变量,去掉次要或可替代解释变量

    自变量之间存在共线性,说明自变量所提供的信息是重叠的,可以删除不重要的自变量减少重复信息。但从模型中删去自变量时应该注意:从实际经济分析确定为相对不重要并从偏相关系数检验证实为共线性原因的那些变量中删除。如果删除不当,会产生模型设定误差,造成参数估计严重有偏的后果。

    2、改变解释变量的形式

    改变解释变量的形式是解决多重共线性的一种简易方法,例如对于横截面数据采用相对数变量,对于时间序列数据采用增量型变量。

    3、差分法

    4、逐步回归分析

    逐步回归(Stepwise Regression)是一种常用的消除多重共线性、选取“最优”回归方程的方法。其做法是将逐个引入自变量,引入的条件是该自变量经F检验是显著的,每引入一个自变量后,对已选入的变量进行逐个检验,如果原来引入的变量由于后面变量的引入而变得不再显著,那么就将其剔除。引入一个变量或从回归方程中剔除一个变量,为逐步回归的一步,每一步都要进行F 检验,以确保每次引入新变量之前回归方程中只包含显著的变量。这个过程反复进行,直到既没有不显著的自变量选入回归方程,也没有显著自变量从回归方程中剔除为止。

    5、主成份分析

    主成分分析作为多元统计分析的一种常用方法在处理多变量问题时具有其一定的优越性,其降维的优势是明显的,主成分回归方法对于一般的多重共线性问题还是适用的,尤其是对共线性较强的变量之间。

    6、偏最小二乘回归

    7、岭回归

    岭回归估计是通过最小二乘法的改进允许回归系数的有偏估计量存在而补救多重共线性的方法,采用它可以通过允许小的误差而换取高于无偏估计量的精度, 因此它接近真实值的可能性较大。灵活运用岭回归法, 可以对分析各变量之间的作用和关系带来独特而有效的帮助。

    8、增加样本容量

    多重共线性问题的实质是样本信息的不充分而导致模型参数的不能精确估计,因此追加样本信息是解决该问题的一条有效途径。但是,由于资料收集及调查的困难,要追加样本信息在实践中有时并不容易。

    这次我们主要研究逐步回归分析方法是如何处理多重共线性问题的。

    逐步回归分析方法的基本思想是通过相关系数r、拟合优度R2和标准误差三个方面综合判断一系列回归方程的优劣,从而得到最优回归方程。具体方法分为两步:

    第一步,先将被解释变量y对每个解释变量作简单回归:

    对每一个回归方程进行统计检验分析(相关系数r、拟合优度R2和标准误差),并结合经济理论分析选出最优回归方程,也称为基本回归方程。

    第二步,将其他解释变量逐一引入到基本回归方程中,建立一系列回归方程,根据每个新加的解释变量的标准差和复相关系数来考察其对每个回归系数的影响,一般根据如下标准进行分类判别:

    1.如果新引进的解释变量使R2得到提高,而其他参数回归系数在统计上和经济理论上仍然合理,则认为这个新引入的变量对回归模型是有利的,可以作为解释变量予以保留。

    2.如果新引进的解释变量对R2改进不明显,对其他回归系数也没有多大影响,则不必保留在回归模型中。

    3.如果新引进的解释变量不仅改变了R2,而且对其他回归系数的数值或符号具有明显影响,则认为该解释变量为不利变量,引进后会使回归模型出现多重共线性问题。不利变量未必是多余的,如果它可能对被解释变量是不可缺少的,则不能简单舍弃,而是应研究改善模型的形式,寻找更符合实际的模型,重新进行估计。如果通过检验证明回归模型存在明显线性相关的两个解释变量中的其中一个可以被另一个很好地解释,则可略去其中对被解释变量影响较小的那个变量,模型中保留影响较大的那个变量。

    下边我们通过实例来说明逐步回归分析方法在解决多重共线性问题上的具体应用过程。

    具体实例

    例1设某地10年间有关服装消费、可支配收入、流动资产、服装类物价指数、总物价指数的调查数据如表1,请建立需求函数模型。

    表1  服装消费及相关变量调查数据

    e22d8bfdde543d867f66a2609b481071.png

    (1)设对服装的需求函数为

    用最小二乘法估计得估计模型:

    模型的检验量得分,R2=0.998,D·W=3.383,F=626.4634

    R2接近1,说明该回归模型与原始数据拟合得很好。由得出拒绝零假设,认为服装支出与解释变量间存在显著关系。

    (2)求各解释变量的基本相关系数

    上述基本相关系数表明解释变量间高度相关,也就是存在较严重的多重共线性。

    (3)为检验多重共线性的影响,作如下简单回归:

    各方程下边括号内的数字分别表示的是对应解释变量系数的t检验值。

    观察以上四个方程,根据经济理论和统计检验(t检验值=41.937最大,拟合优度也最高),收入Y是最重要的解释变量,从而得出最优简单回归方程。

    (4)将其余变量逐个引入,计算结果如下表2:

    表2 服装消费模型的估计

    3eae77f5df4ea0f16c8fc4761c57f79b.png

    结果分析:

    ①在最优简单回归方程中引入变量Pc,使R2由0.9955提高到0.9957;根据经济理论分析,正号,负号是合理的。然而t检验不显著(),而从经济理论分析,Pc应该是重要因素。虽然Y与Pc高度相关,但并不影响收入Y回归系数的显著性和稳定性。依照第1条判别标准,Pc可能是“有利变量”,暂时给予保留。

    ②模型中引入变量L,R2由0.9957提高到0.9959,值略有提高。一方面,虽然Y与L,Pc与L均高度相关,但是L的引入对回归系数、的影响不大(其中的值由0.1257变为0.1387,值由-0.0361变为-0.0345,变化很小);另一方面,根据经济理论的分析,L与服装支出C之间应该是正相关关系,即的符号应该为正号而非负号,依照第2条判别标准,解释变量L不必保留在模型中。

    ③舍去变量L,加入变量P0,使R2由0.9957提高到0.9980,R2值改进较大。、、均显著(这三个回归系数的t检验值绝对值均大于),从经济意义上看也是合理的(服装支出C与Y,P0之间呈正相关,而与服装价格Pc之间呈负相关关系)。根据判别标准第1条,可以认为Pc、P0皆为“有利变量”,给予保留。

    ④最后再引入变量L,此时R2=0.9980没有增加(或几乎没有增加),新引入变量对其他三个解释变量的参数系数也没有产生多大影响,可以确定L是多余变量,根据判别标准第2条,解释变量L不必保留在模型中。

    因此我们得到如下结论:回归模型为最优模型。

    通过以上案例的分析,我们从理论和实际问题两方面具体了解了逐步回归分析是如何对多重共线性问题进行处理的。事实上,一般统计软件如SPSS,在回归模型的窗口中都会提供变量逐步进入的选项,勾选后实际上就是选择了运用逐步回归的思想来构建回归模型。运用SPSS软件不需要我们懂得其背后的运行规律,然而作为分析师,了解并理解模型背后的理论知识,将更有助于我们理解模型、解释结论背后的内在含义,从而达到更好地分析问题的目的。

    喜欢 (2)or分享 (0)

    更多相关内容
  • 多重填补

    千次阅读 2020-11-12 10:07:51
    插补方法有多重回归填补(Multiple Regression Imputation)、倾向得分(Propensity Score)和马尔科夫链蒙特卡罗(Markov Chain Monte Carlo,MCMC),由于多重回归填补和倾向得分一般运用在数据呈单调缺失的...

    数据缺失机制的分类

    • 完全随机缺失
      数据的缺失不依赖任何测量值。
      如受试者因为工作原因从一个地方搬到另外一个地方,远离了原来的研究中心而无法继续试验。
    • 随机缺失
      数据的缺失依赖于已经观测到的测量值,而不依赖于未观测到的测量值。
      如受试者在临床试验中因为疗效不好从而退出试验。
    • 非随机缺失
      数据的缺失依赖于未观测到的测量值。
      如受试者在之前的访视中一切良好,然而在某次访视后疾病恶化从而退出试验。

    当数据缺失是完全随机缺失或者随机缺失的时候,根据现有的试验数据做出的统计推断依然是有效的(尽管不会像完整的数据那么有效)。如果数据缺失是非随机缺失的,根据现有的数据做出的统计推断很有可能会产生偏倚。

    数据缺失模式的分类

    在这里插入图片描述

    多重填补(MI)

    给每一个缺失值都构造m个填补值,产生m个完整数据集,对每个完整数据集分别使用相同的方法进行处理,得到m个处理结果,再综合这m个结果,最终得到对目标变量的估计。
    多重插补并没有试图去通过模拟值去估计每个缺失值,而是提出缺失数据值的一个随机样本,借此估计变量的实际后验分布,这反映了缺失值引起的不确定性。
    在这里插入图片描述
    插补方法有多重回归填补法(Multiple Regression Imputation)、倾向得分法(Propensity Score)和马尔科夫链蒙特卡罗法(Markov Chain Monte Carlo,MCMC),由于多重回归填补法和倾向得分法一般运用在数据呈单调缺失的模式中,MCMC 法用于任意缺失模式的连续型变量数据,而临床试验中,临床数据一般是任意缺失的,因此主要运用马尔科夫链蒙特卡罗法
    在这里插入图片描述

    马尔科夫链蒙特卡罗法

    MCMC法是Bayes理论中探索后验概率分布的一种方法,使用MCMC对数据缺失进行多重填补时有以下假设:
    假设数据是随机缺失的、是任意缺失的、服从多元正态分布

    填补步骤:
    (1) 填补步(imputation step)
    每一个迭代过程均以给定的均值μ和协方差矩阵∑开始,从条件分布中为缺失值抽取替代值。

    (2)后验步(posterior step)
    通过填补步中得到的完整数据估算出整体的均值和方差矩阵,将这些新估算出的数值再次循环应用到填补步中。通过填补步和后验步迭代多次后,得到一个比较稳定的数据集,最终通过迭代数次,使得结果收敛,得到一个稳定的分布。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    当没有缺失数据时,填补间方差B=0,B的大小反映了与观察到的数据相比,缺失数据相对包含了多少信息。α和r揭示了Q的估计在多大程度上受到了数据缺失的影响。可依据这些指标选择m。

    展开全文
  • 数据分析之缺失值填充(重点讲解多重插值Miceforest) 数据分析的第一步——数据预处理,不可缺失的一步。为了得到更好的结果,选择合适的数据处理方法是非常重要的! 数据预处理之缺失值填充 在大数据样本时,...

    数据分析之缺失值填充(重点讲解多重插值法Miceforest)

    数据分析的第一步——数据预处理,不可缺失的一步。为了得到更好的结果,选择合适的数据处理方法是非常重要的!
    数据预处理之缺失值填充
    在大数据样本时,缺失少量的数据时,可以选择直接剔除,也可以按照某种方法进行填充。在小数据样本时,只能选择填充缺失值。
    缺失值填充的常用方法:均值填充、众数填充、多重插值法(更适用于多模态数据,例如医学数据)、K近邻填充、回归/分类预测填充(线性回归、非线性回归、随机森林等多种机器学习方法,或神经网络)。常用且简单的方法就是均值填充、众数填充、多重插值法填充。回归/分类预测填充法就是使用未缺失的数据预测缺失数据,增大了工作量。
    Python实现缺失值的填充:
    先制作一个有缺失值的数据集,如下:

    import miceforest as mf
    import pandas as pd
    import numpy as np
    from sklearn.datasets import load_iris
    
    iris_data = load_iris()
    iris = pd.concat(load_iris(as_frame=True,return_X_y=True),axis=1)
    iris.rename({"target": "species"}, inplace=True, axis=1)
    iris['species'] = iris['species'].astype('category')
    iris_amp = mf.ampute_data(iris,perc=0.25,random_state=1991)   #先做一个有缺失值的数据
    
    print(iris_amp.isnull().sum())  # 查看缺失值及数量
    
    #sepal length (cm)    37
    #sepal width (cm)     37
    #petal length (cm)    37
    #petal width (cm)     37
    #species              37
    #dtype: int64
    
    # 看下现在的数据
    iris_amp
    

    iris_amp
    #使用均值填充缺失值

    #使用均值填充缺失值数据
    New_iris_amp = iris_amp.fillna(iris_amp.mean())  #当然也可以一列一列的填充  
    New_iris_amp
    

    在这里插入图片描述
    #观察上图,发现species类别这一列并没有填充。iris这个数据集中species是作为标签,是一组分类数据即离散数值。如果取均值可能会出现小数。这里python应该是自动识别它是分类类型变量,没有填充,也是合理的。
    我们也可以检查一下填充的缺失值是不是原数据的均值。
    在这里插入图片描述
    #使用其他值填充缺失值的方法和均值一样,自行选择。
    上述操作是整个数据所有列按照均值填充的。有的时候,你不想每列都使用均值填充,那就一列一列的填充或多列一起填充(顺便介绍下fillna函数),演示如下:
    #fillna()函数
    在这里插入图片描述

    #只对某一列进行缺失值的填充
    iris_amp['sepal length (cm)'].fillna(value=iris_amp['sepal length (cm)'].mean(),inplace=True)
    iris_amp
    

    在这里插入图片描述

    #现实中我们用的是自己的数据,当然需要先将数据导入到Python中,填充后导出。这里顺便把这个操作写进来
    #导出方法
    New_iris_amp.to_excel(r'E:\CSDN\New_iris_amp.xlsx')
    #导入方法
    Data = pd.read_excel(r'E:\CSDN\New_iris_amp.xlsx')
    Data
    

    本文重点介绍:多重插值法(miceforest)
    miceforest:使用 lightgbm 进行快速、高效的内存插补

    • 快速:使用 lightgbm 作为后端,并有高效的均值匹配解决方案。
    • 内存高效:能够在不复制数据集的情况下执行多重插补。如果数据集可以放入内存,则可以(可能)进行估算。
    • 灵活:可以处理 pandas DataFrames 和 numpy 数组。插补过程可以完全定制。可以自动处理分类数据。
    • 用于生产:使用的内核可以被保存(推荐使用 dill 包)并估算新的、看不见的数据集。输入新数据通常比在新mice程序中包含新数据快几个数量级。即使没有缺失值,也可以根据内核数据集构建插补模型。新数据也可以就地估算。
      网站miceforest官网
      python安装命令(pip 或 conda 选一种)
     pip install miceforest
     pip install git+https://github.com/AnotherSamWilson/miceforest.git
     conda install -c conda-forge miceforest
    

    本文介绍的版本是2022年4月15日最新发行的,和之前有所不同。

    • 新的主类 ( ImputationKernel, ImputedData) 替换 ( KernelDataSet, MultipleImputedKernel, ImputedDataSet, MultipleImputedDataSet)。
      现在可以在适当的位置引用和估算数据。这节省了大量内存分配并且速度更快。
    • 现在可以就地完成数据。这允许在任何给定时间仅在内存中存储一​​个数据集副本,即使执行多重插补也是如此。
    • mean_match_subset参数已替换data_subset. 为此子集用于构建模型的数据以及候选数据。
    • 数据复制时间和存储位置的更多性能改进。
    • 原始数据现在作为原始数据存储。可以处理 pandas DataFrame和 numpy ndarray。
      案例
    #如果只想创建单个插补数据集,将datasets设置为1
    kds = mf.ImputationKernel(
        iris_amp,
        datasets=1,
        save_all_iterations=True,
        random_state=1991
    )
    #查看下kds
    print(kds)
    #              Class: ImputationKernel
    #          Datasets: 1
    #         Iterations: 0
    #  Imputed Variables: 4
    save_all_iterations: True
    #设置mice算法迭代3次
    kds.mice(3)
    

    我们通常不想只估算单个数据集。在统计学中,多重插补是一个过程,通过该过程可以通过创建多个不同的插补数据集来检查由缺失值引起的不确定性/其他影响。ImputationKernel可以包含任意数量的不同数据集,所有这些数据集都经历了互斥的插补过程。如下:

    # Create kernel. 
    kernel = mf.ImputationKernel(
      iris_amp,
      datasets=4,
      save_all_iterations=True,
      random_state=1
    )
    
    # Run the MICE algorithm for 2 iterations on each of the datasets
    kernel.mice(2)
    
    # Printing the kernel will show you some high level information.
    print(kernel)
    ##               Class: ImputationKernel
    ##            Datasets: 4
    ##          Iterations: 2
    ##   Imputed Variables: 5
    ## save_all_iterations: True
    
    #运行mice后,从kernel中获取完整的数据集
    completed_dataset = kernel.complete_data(dataset=0,inplace=False)
    print(completed_dataset.isnull().sum())
    
    ## sepal length (cm)    0
    ## sepal width (cm)     0
    ## petal length (cm)    0
    ## petal width (cm)     0
    ## species              0
    ## dtype: int64
    
    

    使用inplace=False返回已完成数据的副本。由于原始数据已经存储在 中kernel.working_data,您可以设置 inplace=True完成数据而不返回副本

    kernel.complete_data(dataset=0, inplace=True)
    print(kernel.working_data.isnull().sum(0))
    ## sepal length (cm)    0
    ## sepal width (cm)     0
    ## petal length (cm)    0
    ## petal width (cm)     0
    ## species              0
    ## dtype: int64
    

    控制树的生长

    # Run the MICE algorithm for 1 more iteration on the kernel with new parameters
    kernel.mice(iterations=1,n_estimators=50)
    

    当然你也会发现iris数据中species种类数据是分类类型,在插补的过程需要更多时间,就因为它是多类的,你可以通过以下方式减少专门针对该列的n_estimators:

    # Run the MICE algorithm for 2 more iterations on the kernel 
    kernel.mice(iterations=1,variable_parameters={'species': {'n_estimators': 25}},n_estimators=50)
    

    这种方式和上述方式有所不同,但是在这种情况下,指定的任何参数variable_parameters都将优于第一种方式kwargs。

    如果你知道你的数据初始的分布的话,这也可以设置
    如下,sepal width (cm)是一种泊松分布。

    # Create kernel. 
    cust_kernel = mf.ImputationKernel(
      iris_amp,
      datasets=1,
      random_state=1
    )
    
    cust_kernel.mice(iterations=1, variable_parameters={'sepal width (cm)': {'objective': 'poisson'}})
    

    使用 Gradient Boosted Trees(梯度树)进行插补
    初始默认的方式是随机森林

    # 创建内核。
    kds_gbdt = mf.ImputationKernel(
      iris_amp,
      datasets=1,
      save_all_iterations=True,
      random_state=1991
    )
    
    # 我们需要添加一个小的最小 hessian,否则 lightgbm 会报错:
    kds_gbdt.mice(iterations=1, boosting='gbdt', min_sum_hessian_in_leaf=0.01) 
    # Return the completed kernel data
    completed_data = kds_gbdt.complete_data(dataset=0)
    #结果如下图
    

    在这里插入图片描述
    自定义插补过程
    可以通过变量大量定制我们的插补程序。通过将命名列表传递给variable_schema,您可以为要估算的每个变量指定预测变量。您还可以 通过传递有效值的字典来指定mean_match_candidates和按变量,变量名作为键。data_subset如果您愿意,您甚至可以替换整个默认均值匹配函数

    var_sch = {
        'sepal width (cm)': ['species','petal width (cm)'],
        'petal width (cm)': ['species','sepal length (cm)']
    }
    var_mmc = {
        'sepal width (cm)': 5,
        'petal width (cm)': 0
    }
    var_mms = {
      'sepal width (cm)': 50
    }
    
    # The mean matching function requires these parameters, even
    # if it does not use them.
    def mmf(
      mmc,
      model,
      candidate_features,
      bachelor_features,
      candidate_values,
      random_state,
      hashed_seeds
    ):
    
        bachelor_preds = model.predict(bachelor_features)
        imp_values = random_state.choice(candidate_values, size=bachelor_preds.shape[0])
    
        return imp_values
    
    cust_kernel = mf.ImputationKernel(
        iris_amp,
        datasets=3,
        variable_schema=var_sch,
        mean_match_candidates=var_mmc,
        data_subset=var_mms,
        mean_match_function=mmf
    )
    cust_kernel.mice(1)
    

    使用现有模型估算新数据
    多重插补可能需要很长时间。如果您希望使用 MICE 算法估算数据集,但没有时间训练新模型,则可以使用ImputationKernel 对象估算新数据集。该impute_new_data()函数使用收集的随机森林ImputationKernel来执行多重插补,而不在每次迭代时更新随机森林:

    
    from datetime import datetime
    
    # 选取iris_amp中的前15行数据作为新输入的数据
    new_data = iris_amp.iloc[range(15)]
    
    start_t = datetime.now()
    new_data_imputed = kernel.impute_new_data(new_data=new_data)
    print(f"New Data imputed in {(datetime.now() - start_t).total_seconds()} seconds")
    

    也可以在非缺失数据上构建模型

    orig_missing_cols = ["sepal length (cm)", "sepal width (cm)"]
    new_missing_cols = ["sepal length (cm)", "sepal width (cm)", "species"]
    
    iris_amp2 = iris.copy()
    iris_amp2[orig_missing_cols] = mf.ampute_data(
      iris_amp2[orig_missing_cols],
      perc=0.25,
      random_state=1991
    )
    var_sch = new_missing_cols
    cust_kernel = mf.ImputationKernel(
        iris_amp2,
        datasets=1,
        variable_schema=var_sch,
        train_nonmissing=True
    )
    cust_kernel.mice(1)
    iris_amp2_new = iris.iloc[range(10),:].copy()
    iris_amp2_new[new_missing_cols] = mf.ampute_data(
      iris_amp2_new[new_missing_cols],
      perc=0.25,
      random_state=1991
    )
    
    
    iris_amp2_new_imp = cust_kernel.impute_new_data(iris_amp2_new)
    iris_amp2_new_imp.complete_data(0).isnull().sum()
    
    #sepal length (cm)    0
    #sepal width (cm)     0
    #petal length (cm)    0
    #petal width (cm)     0
    #species              0
    #dtype: int64
    
    

    调整参数使插补结果更好
    上述了多种方式及其函数,为了使插补的结果更好,应该多次调整参数,选取最好的结果。

    多重插补是处理缺失数据的最可靠的方法之一——但它可能需要很长时间。您可以使用多种策略来减少进程运行所需的时间:

    • 减少data_subset。默认情况下,每个变量的所有非缺失数据点都用于训练模型并执行均值匹配。这可能导致模型训练最近邻搜索需要很长时间来处理大数据。可以使用 搜索这些点的子集data_subset。
    • 将您的数据转换为 numpy 数组。Numpy 数组的索引速度要快得多。虽然尽可能避免了索引开销,但没有办法绕过它。还要考虑转换为float32数据类型,因为它会导致生成的对象占用更少的内存。
    • 减少mean_match_candidates。使用默认参数考虑的最大邻居数为 10。但是,对于大型数据集,这仍然是一项昂贵的操作。考虑明确设置mean_match_candidates较低。
    • 使用不同的 lightgbm 参数。lightgbm 通常不是问题,但是如果某个变量有大量的类,那么实际生长的最大树数是 (# classes) * (n_estimators)。您可以专门减少大型多类变量的 bagging 分数或 n_estimators,或者通常减少树的生长。
    • 使用更快的均值匹配函数。默认均值匹配函数使用 scipy.Spatial.KDtree 算法。如果您认为均值匹配是阻碍因素,那么还有更快的替代方案。

    保存和加载内核
    可以使用该.save_kernel()方法保存内核,然后使用该utils.load_kernel()函数再次加载。在内部,此过程使用blosc和dill包来执行以下操作:

    1、将工作数据转换为 parquet 字节(如果它是 pandas 数据帧)
    2、序列化内核
    3、压缩这个序列化
    4、保存到文件

    诊断绘图

    截至目前,miceforest有四个可用的诊断图。
    插补值的分布
    .plot_imputed_distributions()函数

    #红线是原始数据,黑线是每个数据集的插补值。
    kernel.plot_imputed_distributions(wspace=1,hspace=1)
    

    在这里插入图片描述
    相关性
    .plot_correlations()函数

    kernel.plot_correlations(wspace=1,hspace=1)
    

    在这里插入图片描述
    变量的重要性
    .plot_feature_importance()

    kernel.plot_feature_importance(dataset=0, annot=True,cmap="YlGnBu",vmin=0, vmax=1)
    

    在这里插入图片描述
    显示的数字是从 lightgbm.Booster.feature_importance()函数返回的。每个方块代表列变量在估算行变量中的重要性

    平均值收敛程度
    . plot_mean_convergence()
    如果我们的数据没有完全随机丢失,我们可能会看到我们的模型需要进行几次迭代才能使插补分布正确。我们可以绘制插补的平均值,看看是否发生了这种情况:

    kernel.plot_mean_convergence(wspace=0.3, hspace=0.4)
    

    在这里插入图片描述
    使用插补数据

    #使用插补数据
    dataset_0 = kernel.complete_data(0)
    dataset_0
    

    MICE算法

    在这里插入图片描述
    预测均值匹配
    在这里插入图片描述
    均值匹配的影响
    这里给出官方的一个代码,可以看看,其实在我们实际应用中,就是加了一个参数而已。直接用就好!(不过可以学习下中seaborn绘图!)

    randst = np.random.RandomState(1991)
    # random uniform variable
    nrws = 1000
    uniform_vec = randst.uniform(size=nrws)
    
    def make_bimodal(mean1,mean2,size):
        bimodal_1 = randst.normal(size=nrws, loc=mean1)
        bimodal_2 = randst.normal(size=nrws, loc=mean2)
        bimdvec = []
        for i in range(size):
            bimdvec.append(randst.choice([bimodal_1[i], bimodal_2[i]]))
        return np.array(bimdvec)
    
    # Make 2 Bimodal Variables
    close_bimodal_vec = make_bimodal(2,-2,nrws)
    far_bimodal_vec = make_bimodal(3,-3,nrws)
    
    
    # Highly skewed variable correlated with Uniform_Variable
    skewed_vec = np.exp(uniform_vec*randst.uniform(size=nrws)*3) + randst.uniform(size=nrws)*3
    
    # Integer variable correlated with Close_Bimodal_Variable and Uniform_Variable
    integer_vec = np.round(uniform_vec + close_bimodal_vec/3 + randst.uniform(size=nrws)*2)
    
    # Make a DataFrame
    dat = pd.DataFrame(
        {
        'uniform_var':uniform_vec,
        'close_bimodal_var':close_bimodal_vec,
        'far_bimodal_var':far_bimodal_vec,
        'skewed_var':skewed_vec,
        'integer_var':integer_vec
        }
    )
    
    # Ampute the data.
    ampdat = mf.ampute_data(dat,perc=0.25,random_state=randst)
    
    # Plot the original data
    import seaborn as sns
    import matplotlib.pyplot as plt
    g = sns.PairGrid(dat)
    g.map(plt.scatter,s=5)
    

    在这里插入图片描述
    我们直接使用下这个参数,对比下结果:
    参数:mean_match_candidates

    kernelmeanmatch = mf.ImputationKernel(ampdat, datasets=1,mean_match_candidates=5)
    kernelmodeloutput = mf.ImputationKernel(ampdat, datasets=1,mean_match_candidates=0)
    
    kernelmeanmatch.mice(2)
    kernelmodeloutput.mice(2)
    
    kernelmeanmatch.plot_imputed_distributions(wspace=1,hspace=1)
    

    在这里插入图片描述

    kernelmodeloutput.plot_imputed_distributions(wspace=1,hspace=1)
    

    在这里插入图片描述
    明显使用均值匹配的方式更好!

    总结

    通过上述所作的工作可以发现:micsforest在进行插值时,不管是连续变量还是分类变量都能够进行缺失的填充。如果使用传统的均值填充(.fillna()),并不是填充分类变量的缺失值。
    从本质上分析多重插值法,其实也是一直利用未缺失数据预测缺失数据。这种方法在医学领域应用比较广泛,在多模态数据中应用广泛。如想了解更详细内容,请查看官网内容。小白学习分享,如有错误请指正,谢谢!

    展开全文
  • 这个 m 文件它是 Marascuillo 测试的一个已实现的替代方案,并确定了最后一个没有的显着成对对比。 如果先前的卡方检验导致 p 值小于 alpha 值,则认为结果显着,拒绝所有比例相等的原假设,并得出结论:至少之间...
  • MCPerm:案例控制关联研究中用于多重测试相关性的蒙特卡罗排列方法传统置换(TradPerm)测试是一种重要的非参数分析方法,可以作为案例对照关联研究中进行多重测试校正的金标准。 但是,它依赖于原始的单核苷酸多态...
  • 均值插补是利用样本数据平均值或众数作为其替代值对数据进行插值。均值插补的插补值计算方程为: (1) 其中,为是否回答的描述符号表示,表示“是”,表示“否”,是个数 2. 回归插值 回归插值是根据样本中...

    目录

    1.  均值插值法

    2.  回归插值法

    3.  EM算法

    4.  多重插值


    A12J

    1.  均值插值法

    均值插补是利用样本数据平均值或众数作为其替代值对数据进行插值。均值插补的插补值计算方程为:

    \overline{y}= \frac{\sum_{i=1}^{n}\beta _{i}y_{i}}{n_{i}}          (1)

    其中,\beta _{i}为是否回答的描述符号表示,\beta _{i}=1表示“是”,\beta _{i}=0表示“否”,n_{i}是个数

    2.  回归插值法

    回归插值是根据样本中缺失变量和已得到变量构建回归方程,即根据已有的样本数据,对调查中目标变量的缺失值进行估算。构建自变量X_{i}(i=1,2,\cdots ,m)与目标变量Y的关系,且第k个缺失值的插补估算值可表示为:

    y_{k}=\alpha _{0}+\sum_ {i=1}^{m}\alpha _{i}X_{ik}       (2)

    由上式得出,对于相同的X_{i}(i=1,2,\cdots ,m),回归变换后,得出相同的估计值,其结果与均值插值一致。所以在回归过程中需要增加随机因素,以此来填补该插值法中的缺陷。此时该回归方程表示为:

    y_{k}=\alpha _{0}+\sum_ {i=1}^{m}\alpha _{i}X_{ik}+\xi _{k}

    其中,\xi表示构建数据集。     

    3.  EM算法

    4.  多重插值

    Rubin在80年代初期以单一插值法为基础,提出的多重插值法(multiple imputation)

    4.1 主要思想

    给每个缺失值都构造m个插补值(m>1), 根据每个插补值都产生一个完整数据集,这样,经过m次插补就可以产生m个完整数据集;对每组完整数据集使用标准的完整数据分析进行分析,得到m次分析结果;综合m次分析结果得到最终结果。多重插值的形式各异,但一般都要经过以下三个步骤,即:1、插补 imputation; 2、分析 analysis;3、合并 pooling

    4.2  优缺点

    插补法主要经历了单一插补和多重插补两个阶段,多重插补法的出现,弥补了单一插补法的缺陷。

    优点:1. 多重插补过程产生多个中间插补值,可以利用插补值之间的变异反映无回答的不确定性,包括无回答原因已知情况下抽样的变异性和无回答原因不确定造成的变异性;

               2.  多重插补通过模拟缺失数据的分布,较好地保持变量之间的关系;

               3.  多重插补能给出衡量估计结果不确定性的大量信息,单一插补给出的估计结果则较为简单。

    缺点:与单一插值相比,多重插补唯一的缺点是需要做大量的工作来创建插补集并进行结果分析,无论是何种情况下的多重插补,其处理过程都是比较复杂的,新的统计计算方法的出现大大简化了计算并完成一系列简单的极大化或模拟。

    4.3 一般过程

     

     

     

    展开全文
  • 如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性。多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。这里,我们...
  • 多重共线性问题的几种解决方法

    万次阅读 多人点赞 2018-01-28 16:45:51
    如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性。多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。  所谓...
  • #识别缺失值所在行数 inputfile1=inputfile[-sub, ] #将数据集分成完整数据和缺失数据两部分inputfile2=inputfile[sub, ]#行删除处理缺失, 结果转存result1=inputfile1#均值替换处理缺失, 结果转存avg_...
  • 我在程序中开启了多重采样,在屏幕上显示出来的效果确实有抗锯齿。但是当我用FBO离屏渲染,然后保存为BMP图像的时候,发现保存出来的BMP图像并没有抗锯齿效果。 问题产生原因及解决方案: 在默认帧缓冲中启用...
  • 如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性。多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。 所谓多重...
  • 如果违背这一假定,即线性回归模型中某一个解释变量与其他解释变量间存在线性关系,就称线性回归模型中存在多重共线性。多重共线性违背了解释变量间不相关的古典假设,将给普通最小二乘法带来严重后果。 所谓多重共...
  • 这主要是由于多重散射现象导致被询问样品中的整体光灭绝。 该限制要求将稀溶液用于吸收光谱。 但是,根据所用溶剂的极性,吸收光谱可能会在给定溶液中变化。 结构照明技术提供了此问题的替代方法,并提供了在密集...
  • 借汉诺塔理解栈与递归 单调栈 双端单调队列 单调队列优化的背包问题 01背包问题 完全背包问题 多重背包问题 串的定长表示 串的堆分配实现 KMP 一、引子 二、分析总结 三、基本操作 四、原理 五、复杂度分析 ...
  • 多重共线性:一个变量可以由其他变量求出,例如,学生的总成绩可以由各科成绩求出。 ① 度量多重共线性严重程度的一个重要指标是矩阵的条件数,可以由函数kappa()求出。在R中,函数kappa()计算矩阵的条件数。 注意...
  • 用戶可自定程式語言:自定的程式語言不僅有語高亮度顯示功能,而且有語摺疊功能功能。 註解關鍵字及運算符號亦可自定。詳情請參考用戶自定程式語言線上輔助 ( 畫面一, 畫面二, 畫面三, 畫面四 )。 字詞自動...
  • 解释变量之间的多重共线 解释变量为随机变量,存在内生性 异方差性 线性模型的基本假设中有var(u|x1,x2...xk)=d,即随机干扰项的方差不因自变量的不同而不同。表现在现实的经济生活中,以消费
  • 机器学习-Sklearn-12(回归类大家族-上——多元线性回归、岭回归、Lasso)(解决多重共线性)
  • 信息网络传播权的服务器标准与实质替代标准之争在关于信息网络传播权直接侵权认定方面,最关键的问题就是如何认定“提供”,具体来说就是《信息网络传播权保护条例》第二条所指的“通过信息网络向公众提供”,实践中...
  • Taichi:太极示范

    2021-03-18 11:50:42
    隐式时间积分方法中实现了两种不同的线性方程组替代方法:Jacobi迭代和共渐变梯度。模拟结果导出到.ply中之后使用Blender进行渲染。涡旋涡旋方法的简单实现。 TODO:快速多极方法欧拉流体对的实现。更新:在...
  • " " " "将现代信息技术与课堂教学融合,不是把信息技术仅仅作为辅助教或辅助学" "的工具,而是强调要把信息技术作为促进学生自主学习的认知工具和情感激" "励工具,利用信息技术所提供的自主探索、多重交互、合作...
  • 主要利用核函数将原始非线性数据映射到线性子空间,并采用独立的成分分析消除因子之间的多重共线性,再利用虚假最近邻点,计算原始数据在KICA子空间中投影的距离,依次确定各辅助变量对变量变量的解释能力,转换...
  • 多重网格、自适应网格和无网格

    万次阅读 2013-01-19 10:58:43
    多重网格简介(Multi Grid) 转自:http://blog.sina.com.cn/s/blog_4b700c4c0102drjb.html 多重网格是一种用于求解方程组的方法,可用于插值、解微分方程等。 从专业角度讲多重网格实际上是一种多分辨率...
  • 也就是说同一hash值的Node都存储在一个链表中,在JDK1.7中使用头插(在JDK1.8后使用的尾插,后续再讲解),也就是说新来的值会占用原有值的位置,而原有值就顺推到了链表的下一个节点,因为写这段代码的作者...
  • 多重插补:多重插补的处理有两个要点:先删除Y变量的缺失值然后插补 1)被解释变量有缺失值的观测不能填补,只能删除,不能自己乱补; 2)只对放入模型的解释变量进行插补。 8.不处理:根据该异常值的性质特点,使用...
  • 介绍了数据异常值分析与处理的内容,并使用沈阳大气污染预测精度分析。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,675
精华内容 5,470
关键字:

多重替代法