python包中的statsmodels,如何处理重复的特征?

2024-03-25

我是 R 的重度用户,最近正在学习 python。 我有一个关于 statsmodels.api 如何处理重复功能的问题。 据我了解,这个函数是R包中glm的python版本。所以我期望该函数返回最大似然估计(MLE)。

我的问题是 statsmodels 使用哪种算法来获得 MLE? 特别是算法如何处理重复特征的情况?

为了澄清我的问题,我从伯努利分布中生成了一个大小为 50 的样本,其中包含单个协变量 x1。

import statsmodels.api as sm
import pandas as pd
import numpy as np
def ilogit(eta):
    return 1.0 - 1.0/(np.exp(eta)+1)

## generate samples
Nsample = 50
cov = {}
cov["x1"] = np.random.normal(0,1,Nsample)
cov = pd.DataFrame(cov)
true_value = 0.5
resp = {}
resp["FAIL"] =   np.random.binomial(1, ilogit(true_value*cov["x1"]))
resp = pd.DataFrame(resp)
resp["NOFAIL"] = 1 - resp["FAIL"]

然后将逻辑回归拟合为:

## fit logistic regrssion 
fit = sm.GLM(resp,cov,family=sm.families.Binomial(sm.families.links.logit)).fit()
fit.summary()

这将返回:

估计系数或多或少与真实值相似(=0.5)。 然后我创建一个重复列,即 x2,并再次拟合逻辑回归模型。 (R 包中的 glm 将为 x2 返回 NA)

cov["x2"] = cov["x1"]
fit = sm.GLM(resp,cov,family=sm.families.Binomial(sm.families.links.logit)).fit()
fit.summary()

这输出:

令人惊讶的是,这个工作原理以及 x1 和 x2 的系数估计完全相同 (=0.1182)。由于之前的拟合返回 x1 = 0.2364 的系数估计值,因此估计值减半。 然后我将重复特征的数量增加到 9 并拟合模型:

cov = cov
for icol in range(3,10):
    cov["x"+str(icol)] = cov["x1"]
fit = sm.GLM(resp,cov,family=sm.families.Binomial(sm.families.links.logit)).fit()
fit.summary()

正如预期的那样,每个重复变量的估计值相同 (0.0263),并且它们似乎比 x1 的原始估计值 (0.2364) 小 9 倍。

我对最大似然估计的这种意外行为感到惊讶。您能否解释一下为什么会发生这种情况以及 statsmodels.api 背后采用了哪些算法?


简短的回答:

在本例中,GLM 使用 Moore-Penrose 广义逆 pinv,它对应于主成分回归,其中特征值为零的成分被丢弃。零特征值由 numpy.linalg.pinv 中的默认阈值 (rcond) 定义。

statsmodels 对于共线性没有系统的政策。当矩阵求逆失败时,某些非线性优化例程会引发异常。然而,线性回归模型 OLS 和 WLS 默认使用广义逆,在这种情况下我们会看到上述行为。

默认优化算法GLM.fit是迭代重新加权的最小二乘法irls它使用 WLS 并继承 WLS 对于奇异设计矩阵的默认行为。 statsmodels master 中的版本还可以选择使用标准 scipy 优化器,其中奇异或接近奇异设计矩阵的行为将取决于优化算法的细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python包中的statsmodels,如何处理重复的特征? 的相关文章

  • 使用 Python-AppKit-Objective C 转换为预组合 Unicode 字符串

    苹果公司的这份文件技术问答 QA1235 http developer apple com qa qa2001 qa1235 html描述了一种将 unicode 字符串从组合版本转换为分解版本的方法 由于我对包含某些字符 例如重音符号 的
  • 选择一个单元格内的最小值或最大值(分隔字符串)

    我有一个数据框 其中每个样本的列可以有多个值 例如 Gene Pvalue1 Pvalue2 Pvalue3 Beta Ace 0 0381 0 00357 0 01755 0 001385 0 0037 NA 0 039 0 03 1 1
  • SQLAlchemy+pymysql 错误:sqlalchemy.util.queue.Empty

    尝试使用 Eclispse 在 Ubuntu 上运行 Python 2 SQLAlchemy 0 8 和 MySQL5 2 但我不断收到以下错误 我使用 pymysql 实际上是 pymysql3 引擎 模块监视器 from sqlalch
  • 使用 PRAW 帮助获取 Reddit 帖子链接到的 URL

    我正在尝试使用 Praw 获取 Reddit 提交标题中链接的帖子 例如提交 http www reddit com r AdviceAnimals comments 1adu71 apparently people still need
  • 尽管 Matplotlib FuncAnimation(...,repeat=False) 保存的动画图不断循环

    我想使用制作动画matplotlib进行 Powerpoint 演示 动画应该只播放一次 在我的代码中 参数repeat of FuncAnimation 被设置为 false 因为我需要将图导入到powerpoint中 所以我使用保存它a
  • 如何在海龟图形中将多个按键绑定在一起?

    我正在尝试制作一个连接点的 python 游戏 我希望游戏记录 2 次按钮按下操作 示例 如果用户按向上和向右箭头键 乌龟将向东北方向移动 45 度 这是我的代码 import turtle flynn turtle Turtle win
  • python 没有名为serial的模块

    我的 python 程序有问题 我编写了程序来将数据 温度 从 arduino 获取到我的树莓派 sqlite 数据库 但它在第 4 行 导入串行 处给了我一个错误 提示 ImportError 没有名为串行的模块 我使用 python3
  • Rstudio 命令历史记录

    这些天我经常使用 Rstudio 但最近注意到我的命令不再存储在历史记录中 我不知道这是从什么时候开始的 但可能是在安装最新版本时发生的 关于问题可能是什么的任何想法吗 Thanks 这是我们在 v0 93 73 中引入并在 v0 93 7
  • Jupyter 笔记本中未显示绘图

    我正在尝试为 Anscombe 数据集创建 2x2 图 加载数据集并分离数据集中的每个类 import seaborn as sns import matplotlib pyplot as plt anscombe sns load dat
  • 如何加速 R for 循环?

    我正在为 R 中 GWmodel 包中的 gwr basic 函数运行以下 for 循环 我需要做的是收集任何给定带宽的估计参数的平均值 代码如下 library GWmodel data DubVoter Dub voter LARent
  • 在 Python 中快速确定小于 10 亿的数字是否为素数

    我目前在 python 中检查数字素数的算法对于 1000 万到 10 亿之间的数字来说速度很慢 我希望它能够得到改进 因为我知道我永远不会得到超过 10 亿的数字 背景是我无法获得足够快的实现来解决项目 Euler 的问题 60 我在 7
  • 用于 OAuth 身份验证的 WSGI 中间件

    我使用构建了一个非常小的网络应用程序Flask http flask pocoo org 现在我想向网站添加非常基本的身份验证 我不需要授权 由于 Flask 不支持开箱即用的 auth auth 我想插入 WSGI 中间件来完成这项工作
  • 按最小值分组并用另一列中的值填充 NA

    我有一个如下所示的示例数据框 df pd DataFrame data uid 1 1 1 2 2 3 pagename home blah blah home blah blah startpage NA NA NA home home
  • 如何配置应用程序中的所有记录器

    Python 的日志记录模块允许模块或类定义自己的记录器 不同的记录器可以有不同的处理程序 其中一些可能选择记录到文件 而另一些则选择记录到标准输出 现在 我的应用程序使用其中几个模块 每个模块都有自己的记录器 这些记录器具有各种处理程序
  • 加载 IPython 笔记本时出错

    一旦我用 Jupyter 打开笔记本文件 它要求我转换文件 我就再也无法在标准 IPython 笔记本中打开它了 我收到以下错误 Error loading notebook Bad Request 2014 12 21 04 13 03
  • 列槽不足

    当尝试为 data table 中的每个变量 108 个变量 创建 12 个滞后时 我收到一条错误 指出列槽不足 此操作应创建大约 1200 个变量或列 Data A as data table Datos A Varnames names
  • 获取 pandas 中最后一次出现特定值之后的所有行

    我的数据框看起来像 ID colA 1 B 1 D 2 B 2 D 2 C 我已返回每组中事件 B 最后一次出现后的所有行 输出将是 ID colA 1 D 2 D 2 C 我试过 a df colA str contains B grou
  • Python中矩阵元素的双重求和

    基于下面的简化示例 我想在我的代码中 from sympy import import numpy as np init printing x y symbols x y mat Matrix x 1 1 y X 1 2 3 Y 10 20
  • 为什么 Python ggplot 返回名称“aes”未定义?

    当我使用以下命令时 p ggplot aes x DTM y TMP1 data data 我收到以下错误 NameError name aes is not defined 你可以帮帮我吗 你需要导入aes from ggplot imp
  • 重定向到破折号中的 url

    我正在使用 dash 构建一个仪表板 每当单击特定数据点时 我都会创建一个唯一的 url 如何将用户重定向到此创建的 url 我正在使用下面给出的代码 每当有人单击任何数据点时 单击事件就会触发并执行回调函数 app layout html

随机推荐

  • 在 mono/Linux 下从命名管道读取/写入

    我想从 Linux 下的命名管道 FIFo 队列中读取 写入 我已经尝试了标准类 StreamWriter 和 System IO 中的其他类 但它失败了 因为它正在使用查找 有人曾经使用 Mono 从命名管道中写入 读取过吗 我正在设法阅
  • ES6 导入的执行顺序(HTML 和代码)

    如果我有以下情况 我说得对吗 你不能 100 确定three js将被处决AFTER one js and two js 但是 如果我有 我说得对吗 我可以有信心three js将被处决AFTER one js and two js 这个很
  • 不确定如何使用 CICrop 裁剪图像

    我正在尝试使用 CICrop 裁剪图像 但是当我尝试裁剪时 它崩溃并显示以下错误消息 由于未捕获的异常 NSUnknownKeyException 而终止应用程序 原因 setValue forUndefinedKey 这个类 不符合键的键
  • Entity Framework 4 CTP 4 Code First:如何使用非常规的主键和外键名称

    实体框架 4 中是否有方法 如果重要的话使用 CTP4 和 Code First 来更改用于自动识别主键和外键的约定 我尝试将 EF 与旧数据库一起使用 该旧数据库使用 pk fk 前缀而不是 id 后缀来标记键 此外 地址表具有多个外键
  • 无法在docker上安装jenkins的建议插件

    我已经通过docker启动了jenkins 它已经以管理员模式启动 输入密码后 当我选择安装建议的插件时 大部分安装都会失败 发布当我创建 jenkins 用户并导航到 jenkins 主页时 它显示错误 如下面的屏幕截图所示 通过以下命令
  • 某些实体变量的 Spring Security

    是否可以使用 Spring Security 来安全更新某些实体属性 例如 如果我有一个用户实体 我希望 ROLE USER 能够修改 更新用户的所有属性 除了可由 ROLE ADMIN 更新的活动列之外 我还没有找到Spring Secu
  • 相对布局中的百分比宽度

    我正在研究登录的表单布局Activity在我的 Android 应用程序中 下图是我想要的样子 我能够通过以下方式实现此布局XML 问题是 这有点hackish 我必须对主机 EditText 的宽度进行硬编码 具体来说 我必须指定 and
  • 是否有创建 BPMN 的 Java API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有办法以编程方式创建BPMN 2 0 http en wikipedia org wiki Business Process Mode
  • Symfony2 minify 无需 java 或 node

    我无法访问共享主机上的 java 或 node 有没有办法缩小服务器端 这样我就可以继续使用 assetic 而不需要这些引擎 Uglify 使用node yui compressor 无论如何已弃用 使用java Thanks 似乎有 2
  • 已安装的 gem 列表?

    我可以调用 Ruby 方法来获取已安装 gem 的列表吗 我想解析的输出gem list 有其他方法可以做到这一点吗 这列出了我安装的所有 gem gem query local http guides rubygems org comma
  • 如何使用 Moment.js 将日期验证为指定格式?

    我无法找到有关如何使用 moment js 验证日期输入以确保其格式为 2017 12 31T23 59 59Z 的现有问题 答案 鉴于我有一个日期字符串 2017 12 31T23 59 59Z 如何验证日期字符串严格采用指定的格式 YY
  • 如何使用sidenav的EventEmitter(onClose)

    我想检查一下我的
  • c# SSL TCPServer 卡在 SsLStream.AuthenticateAsServer()

    故事情节 我想用 C 创建我自己的网络服务器 第一次尝试 进展顺利 我正在使用Visual Studio 到代码申请和火狐浏览器检查如果我做得对的话 并且我成功地制作了一个基本的 TCPServer 当我尝试向其添加 SSL 支持时 遇到了
  • Symfony2 多个应用程序和以 api 为中心的应用程序

    我正在尝试做一个以 Symfony2 为中心的应用程序 并重新使用 Web 前端应用程序的所有捆绑包 该应用程序将分为三个API FrontEnd BackEnd 以便我们可以像Service Bundle一样编码API并在整个应用程序中使
  • 如何使用 Dart 和 Shelf 提供动态和静态页面?

    Using shelf static通过 Dart 提供静态网页是没有问题的 var staticHandler createStaticHandler staticPath defaultDocument home html io ser
  • Nodejs 分析:父级(切片字符串)

    我分析了我的 Nodejs 应用程序并看到一些奇怪的字符串 它被标记为父级 切片字符串 我使用 v8 profiler 和 node inspector 这是分析器屏幕的照片 抱歉是照片 不是屏幕截图 只是我的系统真的超载并且没有足够的空间
  • 如何从 PHP 调用 RESTful WCF 服务

    我正在尝试使用 PHP 中的 REST 向自托管 WCF 服务发送请求 我想将对象作为 JSON 对象发送到 WCF 服务 我还没有让它运行 有谁有如何从 PHP 调用服务的示例吗 这是操作合约 方法是POST方法 OperationCon
  • 如何使 CriteriaBuilder 加入自定义“开启”条件?

    我想使用 CriteriaBuilder 在连接 2 个表的位置进行查询 在 MySQL 中 我尝试进行的查询如下所示 SELECT FROM order LEFT JOIN item ON order id item order id A
  • Memorystream.Read() 始终返回 0 bytesRead 和空 byte[]

    我目前有一个内存流 http msdn microsoft com en us library System IO MemoryStream v vs 110 aspx长度约为30000 Named memStream here 我希望这个
  • python包中的statsmodels,如何处理重复的特征?

    我是 R 的重度用户 最近正在学习 python 我有一个关于 statsmodels api 如何处理重复功能的问题 据我了解 这个函数是R包中glm的python版本 所以我期望该函数返回最大似然估计 MLE 我的问题是 statsmo