当前位置: 首页 > 面试题库 >

在统计模型中捕获高多重共线性

申屠浩歌
2023-03-14
问题内容

说我在statsmodels中拟合模型

mod = smf.ols('dependent ~ first_category + second_category + other', data=df).fit()

当我这样做时mod.summary(),可能会看到以下内容:

Warnings:
[1] The condition number is large, 1.59e+05. This might indicate that there are
strong multicollinearity or other numerical problems.

有时警告是不同的(例如,基于设计矩阵的特征值)。如何捕获变量中的 高多重共线性 条件?该警告是否存储在模型对象中的某个位置?

另外,在哪里可以找到有关这些字段的描述summary()


问题答案:

可以通过检查检测的高多重共线性 特征值相关矩阵 。极低的特征值表明数据是共线的,相应的 特征向量 表明哪些变量是共线的。

如果数据中不存在共线性,则可以预期所有特征值都不接近零:

>>> xs = np.random.randn(100, 5)      # independent variables
>>> corr = np.corrcoef(xs, rowvar=0)  # correlation matrix
>>> w, v = np.linalg.eig(corr)        # eigen values & eigen vectors
>>> w
array([ 1.256 ,  1.1937,  0.7273,  0.9516,  0.8714])

但是,如果说x[4] - 2 * x[0] - 3 * x[2] = 0,那么

>>> noise = np.random.randn(100)                      # white noise
>>> xs[:,4] = 2 * xs[:,0] + 3 * xs[:,2] + .5 * noise  # collinearity
>>> corr = np.corrcoef(xs, rowvar=0)
>>> w, v = np.linalg.eig(corr)
>>> w
array([ 0.0083,  1.9569,  1.1687,  0.8681,  0.9981])

特征值之一(这里是第一个)接近零。对应的特征向量为:

>>> v[:,0]
array([-0.4077,  0.0059, -0.5886,  0.0018,  0.6981])

基本上忽略了 几乎为零的
系数,上面基本上说x[0]x[2]并且x[4]是共线性的(如预期的那样)。如果一个标准化xs值并乘以该特征向量,则结果将在零附近徘徊,并且变化很小:

>>> std_xs = (xs - xs.mean(axis=0)) / xs.std(axis=0)  # standardized values
>>> ys = std_xs.dot(v[:,0])
>>> ys.mean(), ys.var()
(0, 0.0083)

注意,ys.var()基本上本征值接近于零。

因此,为了捕获高多线性度,请查看相关矩阵的特征值。



 类似资料:
  • 1、接口声明 在调用接口时必须在https请求的header中携带"token"参数。 token是智齿客服接口开放平台全局唯一的接口调用凭据。 开发者在调用各业务接口时都需使用token,开发者需要进行妥善保存。token的存储至少要保留32个字符空间。token的有效期目前为24个小时,需定时刷新,或根据接口返回的token失效提示,进行重新获取。请求token接口,无论token是否存在,都

  • 所以我的问题是: 基本上,我有一个方法,其中我抓住了一个WebApplication异常(javax.ws.rs.WebApplication),但我的方法是抛出NotFound异常(com.sun.jersey.api.NotFound异常)。 所以我想这样处理两者: 但是,我得到了以下编译时错误: 异常NotFoundException已被替代WebApplicationException捕获

  • 概述 本章节介绍如何从一个系统的数据库设计模型出发,一步步设计一个系统。 在软件项目(尤其是外包软件项目)中,通常有两种情况: 客户提供软件需求书; 客户提供原型设计; 对于以上两种情况的项目,在开发的流程上是有很大的差别的,最大的差别就在于页面交互上。 客户提供软件需求书:页面数量及形态不确定,带来的复杂性也不确定;(所以,为了固化需求,通常会跟客户做出原型或者UI进行需求确认,跟客户的合同也会

  • 问题内容: 我想一个更清洁的方式来获得以下功能,以捕捉和在一个块: 有什么办法吗?还是我必须分开抓住它们? 并具有一个共享的基类,但它们也与其他我要介绍的类型共享它,因此我不能只抓住基类。 问题答案: 更新: 从PHP 7.1开始,此功能可用。 语法为: 文件:https://www.php.net/manual/en/language.exceptions.php#example-287 RFC

  • 主要内容:1.策略模式,2.模板方法,3.观察者模式,4.责任链/职责链模式java8中提供的很多新特性可以用来重构传统设计模式中的写法 1.策略模式 上图是策略模式的类图,假设我们现在要保存订单,接口定义要做什么,而以及则提供了二种策略,分别是保存到数据库,以及传统的关系型数据库,最后在中通过构造函数注入最终要使用的策略。 OrderService接口 Mysql策略实现 Nosql策略实现 使用策略的辅助"容器" 运行测试类 重构后,可以省去2个策略实现类 2.模板方

  • 我希望获取具有特定post_id并且其'like'列设置为1的行。我怎么能再放一个条款呢?