分类变量的多重共线性

2024-04-16

对于数值/连续数据,为了检测预测变量之间的共线性,我们使用皮尔逊相关系数并确保预测变量之间不相关,但与响应变量相关。


但我们怎样才能检测到多重共线性如果我们有一个数据集,其中预测变量都是绝对的。我正在共享一个数据集,我试图找出预测变量是否相关


> A(Response Variable)   B     C   D
> Yes                    Yes Yes Yes
> No                     Yes Yes Yes
> Yes                    No   No  No

如何做同样的事情?


共线性可以是(但并不总是)只是一对变量的属性,在处理分类变量时尤其如此。因此,尽管相关系数很高充足的为了确定共线性可能是一个问题,一堆成对的低到中等相关性不足以检验是否缺乏共线性。变量的连续混合或分类集合的常用方法是查看方差膨胀因子(我的记忆告诉我,它与方差-协方差矩阵的特征值成正比)。无论如何,这是代码vif- 包中的功能:rms:

vif  <- 
function (fit) 
{
    v <- vcov(fit, regcoef.only = TRUE)
    nam <- dimnames(v)[[1]]
    ns <- num.intercepts(fit)
    if (ns > 0) {
        v <- v[-(1:ns), -(1:ns), drop = FALSE]
        nam <- nam[-(1:ns)]
    }
    d <- diag(v)^0.5
    v <- diag(solve(v/(d %o% d)))
    names(v) <- nam
    v
}

分类变量更容易产生共线性的原因是三向或四向表格经常形成导致完全共线性的线性组合。您的示例案例是共线性的极端情况,但您也可以通过以下方式获得共线性

A B C D
1 1 0 0
1 0 1 0
1 0 0 1

请注意,这是共线的,因为A == B+C+D在所有行中。两两相关性都不高,但系统在一起会导致完全共线性。

将数据放入 R 对象并运行后lm()在此基础上,很明显还有另一种方法可以确定与 R 的共线性,这是因为lm当因子变量“别名”时,将从结果中删除因子变量,“别名”只是完全共线的另一个术语。

这是 @Alex 演示高度共线性数据和输出的示例vif在那种情况下。一般来说,您希望看到方差膨胀因子低于 10。

> set.seed(123)
> dat2 <- data.frame(res = rnorm(100), A=sample(1:4, 1000, repl=TRUE)
+ )
> dat2$B<-dat2$A
> head(dat2)
          res A B
1 -0.56047565 1 1
2 -0.23017749 4 4
3  1.55870831 3 3
4  0.07050839 3 3
5  0.12928774 2 2
6  1.71506499 4 4
> dat2[1,2] <- 2   
#change only one value to prevent the "anti-aliasing" routines in `lm` from kicking in
> mod <-  lm( res ~ A+B, dat2) 
> summary(mod)

Call:
lm(formula = res ~ A + B, data = dat2)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.41139 -0.58576 -0.02922  0.60271  2.10760 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  0.10972    0.07053   1.556    0.120
A           -0.66270    0.91060  -0.728    0.467
B            0.65520    0.90988   0.720    0.472

Residual standard error: 0.9093 on 997 degrees of freedom
Multiple R-squared:  0.0005982, Adjusted R-squared:  -0.001407 
F-statistic: 0.2984 on 2 and 997 DF,  p-value: 0.7421

> vif ( mod )
       A        B 
1239.335 1239.335 

如果您创建独立于前两个预测器的第四个变量“C”(不可否认,对于变量来说这是一个坏名字,因为C也是一个 R 函数),你会得到更理想的结果vif:

 dat2$C <- sample(1:4, 1000, repl=TRUE)

 vif ( lm( res ~ A + C, dat2) )
#---------    
   A        C 
1.003493 1.003493 

编辑:我意识到我实际上并没有创建“分类变量”的 R 表示,尽管从1:4。该“样本”的因子版本也会出现同样的结果:

>  dat2 <- data.frame(res = rnorm(100), A=factor( sample(1:4, 1000, repl=TRUE) ) )
>  dat2$B<-dat2$A
>  head(dat2)
          res A B
1 -0.56047565 1 1
2 -0.23017749 4 4
3  1.55870831 3 3
4  0.07050839 3 3
5  0.12928774 2 2
6  1.71506499 4 4
>  dat2[1,2] <- 2   
> #change only one value to prevent the "anti-aliasing" routines in `lm` from kicking in
>  mod <-  lm( res ~ A+B, dat2) 
>  summary(mod)


Call:
lm(formula = res ~ A + B, data = dat2)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.43375 -0.59278 -0.04761  0.62591  2.12461 

Coefficients: (2 not defined because of singularities)
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  0.11165    0.05766   1.936   0.0531 .
A2          -0.67213    0.91170  -0.737   0.4612  
A3           0.01293    0.08146   0.159   0.8739  
A4          -0.04624    0.08196  -0.564   0.5728  
B2           0.62320    0.91165   0.684   0.4944  
B3                NA         NA      NA       NA  
B4                NA         NA      NA       NA  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9099 on 995 degrees of freedom
Multiple R-squared:  0.001426,  Adjusted R-squared:  -0.002588 
F-statistic: 0.3553 on 4 and 995 DF,  p-value: 0.8404

请注意,系数计算中省略了两个因子水平。 ...因为它们与相应的 A 级别完全共线。所以如果你想看什么vif对于几乎共线的因子变量的返回,您需要更改更多值:

> dat2[1,2] <- 2   
> dat2[2,2] <-2; dat2[3,2]<-2; dat2[4,2]<-4
>  mod <-  lm( res ~ A+B, dat2) 
>  summary(mod)

Call:
lm(formula = res ~ A + B, data = dat2)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.42819 -0.59241 -0.04483  0.62482  2.12461 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  0.11165    0.05768   1.936   0.0532 .
A2          -0.67213    0.91201  -0.737   0.4613  
A3          -1.51763    1.17803  -1.288   0.1980  
A4          -0.97195    1.17710  -0.826   0.4092  
B2           0.62320    0.91196   0.683   0.4945  
B3           1.52500    1.17520   1.298   0.1947  
B4           0.92448    1.17520   0.787   0.4317  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9102 on 993 degrees of freedom
Multiple R-squared:  0.002753,  Adjusted R-squared:  -0.003272 
F-statistic: 0.4569 on 6 and 993 DF,  p-value: 0.8403
#--------------
> library(rms)

> vif(mod)
      A2       A3       A4       B2       B3       B4 
192.6898 312.4128 308.5177 191.2080 312.5856 307.5242 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分类变量的多重共线性 的相关文章

  • 在 R Shiny 中,如何使用可排序 js 将其在列表中出现的顺序次数附加到每个列表元素?

    下面的可重现代码适用于将元素从一个面板拖动到另一个面板 并在 拖动到 面板中自动使用 HTML CSS 对拖入的每个元素进行排名顺序编号 但是 我现在尝试附加到每个 拖动到 列表元素的末尾 使用某种形式的paste0 我假设 该元素在 拖至
  • 编写健壮的 R 代码:命名空间、屏蔽和使用 `::` 运算符

    简洁版本 对于那些不想阅读我的 案例 的人来说 这就是本质 最小化新包破坏现有代码 即编写您编写的代码 的机会的推荐方法是什么尽可能坚固 充分利用该功能的推荐方法是什么 命名空间机制 when a just using贡献的软件包 比如在一
  • R lubridate:当地语言的工作日

    如何获取本地语言的工作日和月份 My code library lubridate data lt c 10 02 2015 11 03 2015 data lubri lt dmy data wday data lubri label T
  • 将天气 iframe 嵌入到 Shiny Dashboard 中

    我正在尝试将 Forecast io 的天气预报嵌入到闪亮的仪表板中 我最初在使用 符号时遇到了麻烦 但看到一篇文章提供了如何使用特殊字符格式化 HTML 代码的示例 但是 当我运行该应用程序时 我看到一个简单的 未找到 即使我知道该链接有
  • 使用starts_with() 将 NA 替换为 0

    我正在尝试替换我的一组特定列的 NA 值tibble 这些列都以相同的前缀开头 所以我想知道是否有一种简洁的方法来使用starts with 函数从dplyr包可以让我做到这一点 我已经看到了有关 SO 的其他几个问题 但是它们都需要使用特
  • 使用 data.table 进行分组并选择最短日期

    My Data df1 lt structure list ID c A A A B B C c1 1 6 c2 1 6 myDate c 01 01 2015 02 02 2014 03 01 2014 09 09 2009 10 10
  • 具有动态变量数的公式

    假设有一些 data framefoo data frame想要找到目标列的回归Y由其他一些专栏 为此目的 通常使用一些公式和模型 例如 linear model lt lm Y FACTOR NAME 1 FACTOR NAME 2 fo
  • 使用管道语法处理模型列表

    我经常喜欢拟合和检查与 R 数据框中的两个变量相关的多个模型 我可以使用如下语法来做到这一点 require tidyverse require broom models lt list hp exp cyl hp cyl map df m
  • 访问 R 工作区中的数据[重复]

    这个问题在这里已经有答案了 我是自学 R 的 可能有一些非常基本的东西我可能不熟悉 如果是这样我道歉 我正在尝试访问外部来源提供给我的数据 它作为一个工作空间出现 我的流程如下 gt ls 1 2003OHT HR gt attach 20
  • 使用 readHTMLTable 从 https 网页读取表格

    我安装了 R 3 3 1 并使用 RStudio 0 99 903 我正在尝试从以下 URL 将表格读入 R https www fantasypros com nfl rankings consensus cheatsheets php
  • R:如何找到向量的模式[重复]

    这个问题在这里已经有答案了 下面是我的data frame我想知道每个内存类别 1 到 8 的模式是什么 gt dput d structure list MEMORY1 c 5 5 7 1 5 6 4 5 4 5 5 4 1 5 5 2
  • ggplot 图例标签内的希腊字母、符号和换行符

    我在尝试着 有换行符 自动或强制 对齐文本 左对齐或左右对齐 有希腊字母和百分号 在 gglot 图例标签内 我尝试了几种方法 但我似乎无法将我读到的所有技巧结合起来 我可以通过插入来换行 n进入标签 但这似乎不适用于希腊字母 不适用于图例
  • R data.table 连接不等式条件

    我想使用 data table 包根据多个不等式条件对数据进行子集化 data table 手册中的示例展示了如何使用字符变量执行此操作 但不显示数字不等式 我还了解了如何使用子集函数来执行此操作 但我真的很想利用 data table 二
  • 为每个因素级别添加日期时间序列

    我有一个带有因子列的数据框 s lt data frame id 901 910 s id lt as factor s id 我有一个日期时间序列 library lubridate start lt now as difftime 2
  • 根据 R 数据框中的名称对列进行平均

    我想知道是否有一种有效的方法来获取每组的平均值类似命名的列谁的名字结尾为 1S and 2S ex ex1S ex2S at time 1并取每组的平均值类似命名的列谁的名字结尾为 1C or 2C ex ex1C ex2C at time
  • 如何在R中匹配具有相同主键的两个表中的数据

    我有两个表 其中包含有关人员的数据 df1 lt data frame id c 113 202 377 288 359 name c Alex Silvia Peter Jack Jonny 这为我提供了 id name 1 113 Al
  • zsh:未找到命令:使用 Big Sur Mac 的终端上的 R

    我从官方 cran 网站安装了 R 我可以从 Rstudio 运行 R 但是当我尝试从终端使用 R 时 我得到以下结果 base ege Eges MBP R zsh command not found R base ege Eges MB
  • R参考类问题

    我正在尝试在 R 中创建一个简单的参考类 这是我的代码 R 初学者 MyClass lt setRefClass MyClass fields list a numeric b numeric methods list initialize
  • R 中使用 `UseMethod()` 与 `inherits()` 来确定对象的类

    如果我需要根据 R 对象的类以不同的方式处理它们 我可以使用if and else在单个函数内 foo lt function x if inherits x list Foo the list else if inherits x num
  • numpy polyfit 中使用的权重值是多少以及拟合误差是多少

    我正在尝试对 numpy 中的某些数据进行线性拟合 Ex 其中 w 是该值的样本数 即对于点 x 0 y 0 我只有 1 个测量值 该测量值是2 2 但对于这一点 1 1 我有 2 个测量值 值为3 5 x np array 0 1 2 3

随机推荐

  • 在哪里可以下载 Windows Phone 开发人员工具?

    我找到了 Web 下载程序 但它们似乎对我不起作用 我如何下载 ISO 格式的最新版本或完整安装程序 我无法使用网络下载器 谢谢 尝试这个 http go microsoft com fwlink LinkId 201927 http go
  • 在 Typescript 对象中添加新属性

    我正在尝试在对象中添加新属性 但打字稿给出错误 错误 TS2339 类型 对象 上不存在属性 数量 product Object qty Number foo this product qty 1 Object是错误的注释 更改您的注释 p
  • 如何更改客户 ID 和订单 ID?

    当前 CustomerID 从 1 开始 而生成的第一个订单已OrderID 100000001 有什么方法可以改变这些字段 所以创建的第一个客户已经 顾客号码900000001并且创建的第一个订单有OrderID 900000001 通过
  • Dagger组件依赖含义

    我正在尝试 Dagger 2 我只是通过测试来了解这个框架 我有一个 ApplicationComponent 需要成为整个应用程序的单例 所以我将其定义如下 Component modules ApplicationModule clas
  • 在 SQL Server 2008 中添加列会锁定表吗?

    我想在大约 1200 万条记录的表上运行以下命令 ALTER TABLE t1 ADD c1 int NULL ALTER TABLE t2 ADD c2 bit NOT NULL DEFAULT 0 我已经在暂存中完成了它 并且时机似乎很
  • 如何在 Swift 中将十六进制数转换为 bin?

    我有字符串变量 var str 239A23F 如何将该字符串转换为二进制数 str toInt 不起作用 您可以使用NSScanner 来自基金会框架 let scanner NSScanner string str var result
  • 如何使x轴上的字体大小变量变小

    我有这段代码来创建条形图 但我想将 x 轴中的名称更改为物种名称 并且我想让字体变小 以便我可以将其全部放入 我尝试过使用cex 功能在各种组合中 但没有起作用 如果有建议我将不胜感激 count lt matrix c 16 102 11
  • Excel 2010 VBA ActiveChart.SetSourceData 失败

    我有一个 Excel VBA 应用程序 该应用程序在 Excel 2003 中运行良好 但在 Excel 2010 中失败 相关代码为 Public Sub Create Chart Dim c Dim OutputText As Stri
  • JUnit 测试时排除 @Component 类的过滤器?

    是否可以排除 Component带注释的类 我想从 JUnit 测试中排除一个特殊的类 我的项目有一个类xEventHandler注释为 Component我不希望 spring 在 junit 测试时使用这个类 我的应用程序 TestCo
  • 按 2 个键对 FireBase 中的数据进行排序

    我构建了游戏应用程序 并将记录保存在 FireBase 的实时数据库中 数据库看看 Ka8xxTgyFB8yYKH50j score 10 seconds 1325 K222xTgyFBF33FD50j score 10 seconds 4
  • 如何使用更少的包绘制二元正态分布的表面和轮廓

    我将绘制二元正态分布的 3D 曲面及其轮廓 可以是任何二元正态分布 我想用persp and contour在我的画中 我在网上搜索了一下 但发现了很多方法 大多数人都使用过一些软件包 但我想以使用更少的软件包甚至不安装任何软件包的方式来执
  • R:rJava 包安装失败

    使用以下命令安装 rJava 时install packages rJava 命令我收到以下错误 checking Java support in R present interpreter usr bin java archiver us
  • 为什么我在比较 Perl 中输入的行时遇到问题?

    我不知道这个简单的交易可能做错了什么 但它不起作用 print OK y or n n ans lt gt print n if ans eq y print ans 我基本上想知道如何测试用户输入 这点代码对我来说不起作用 我只是想打印
  • 嵌套 Javascript Promise - 从 firestore 获取数据

    在过去的三天里 我一直被这个错误困扰 我已经尝试了几乎所有的方法 尝试以 1000 种方式构建承诺 但似乎没有任何效果 也许我正在失去 大局 所以希望新的眼睛能有所帮助 谢谢阅读 我有一个在 Firebase Cloud Functions
  • Angular CLI 可执行文件 (ng) 始终仅显示可用命令的列表

    视窗 角 电子邮件受保护 cdn cgi l email protection节点 v 16 13 1 npm v 8 1 2 ng command 在 Windows CMD 中总是给出可用命令的列表 就像在这样的情况下 ng 但如果我使
  • 如何在本地主机中为 XAMPP 创建有效的 SSL [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我如何使用安全连接 SSL in my XAMPP在窗口中 当我打开 localhost 页面时出现以下错误 连接不安全 在我的 XAMP
  • Protractor:彻底清除浏览数据

    我正在寻找一种使用 Protractor 完全删除所有 cookie 会话 状态 cookie 存储等的方法 基本上 我想在量角器中完成与用户相同的事情 方法是转到 设置 gt 清除浏览数据 browser manage deleteAll
  • CsvHelper 更改日期和时间的输出方式

    我在用CSV助手 https joshclose github io CsvHelper 编写一些 CSV 文件 并希望将日期和时间的格式更改为特定的格式 遵循以下建议https stackoverflow com a 31817621 2
  • React-Native:从剪贴板设置和获取文本时出错

    import React useState from react import SafeAreaView View Text TouchableOpacity StyleSheet from react native import Clip
  • 分类变量的多重共线性

    对于数值 连续数据 为了检测预测变量之间的共线性 我们使用皮尔逊相关系数并确保预测变量之间不相关 但与响应变量相关 但我们怎样才能检测到多重共线性如果我们有一个数据集 其中预测变量都是绝对的 我正在共享一个数据集 我试图找出预测变量是否相关