首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中素食包的varpart函数检测因子和数值变量之间的意外共线性

R中素食包的varpart函数检测因子和数值变量之间的意外共线性
EN

Stack Overflow用户
提问于 2019-05-01 11:55:18
回答 1查看 482关注 0票数 1

我正在尝试对一些响应数据运行变量分区分析。我有三个约束变量,一个数字变量和两个因子,它们是我编码的虚拟变量,目的是捕捉与响应数据中的预测信号相关的变化。我遇到的问题是,varpart()函数正在检测其中一个因子变量和数值变量之间的共线性。我相信这是因为数值变量被编码为离散值,而这些值之间的“跳跃”对应于不同因子级别之间的跳跃。

以下是有问题的两个变量的示例:

代码语言:javascript
复制
var1 <- unlist(lapply(1:5, function(x){rep(x, 20)}))
var1
# [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3
# [44] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5
# [87] 5 5 5 5 5 5 5 5 5 5 5 5 5 5

var2 <- as.factor(unlist(lapply(letters[1:5], FUN = function(x){rep(x, 20)})))
var2
# [1] a a a a a a a a a a a a a a a a a a a a b b b b b b b b b b b b b b b b b b b b c c c
# [44] c c c c c c c c c c c c c c c c c d d d d d d d d d d d d d d d d d d d d e e e e e e
# [87] e e e e e e e e e e e e e e
# Levels: a b c d e

上面,var1旨在捕获响应数据中预测梯度的变化,该梯度在每20个单位之后发生变化。例如,如上所述,这可以表示5个位置的线性排列,每个位置具有20个样本。相比之下,var2旨在捕获每个站点唯一的变化,因此它表示为5个站点中的每个站点具有不同级别的因子,每20个单位再次更改。

(我还有一个单独的变量,它在设计上与这两个变量都不相关:var3 <- as.factor(rep(c(rep("type1", 10), rep("type2", 10)), 5)))

以下是一些响应数据示例:

代码语言:javascript
复制
response <- sapply(1:100, function(x){x <- rbinom(100, 2, .5)})
> response[1:5, 1:5]
[,1] [,2] [,3] [,4] [,5]
[1,]    2    2    1    1    1
[2,]    1    1    2    1    2
[3,]    2    1    1    1    0
[4,]    1    0    2    1    1
[5,]    2    1    1    0    1

执行varpart(response, var1, var2, var3)时,我收到以下警告消息:

代码语言:javascript
复制
Warning messages:
1: collinearity detected in cbind(X1,X2): mm = 5, m = 4 
2: collinearity detected in cbind(X1,X2,X3): mm = 6, m = 5 
3: collinearity detected: redundant variable(s)  between tables X1, X2
results are probably incorrect: remove redundant variable(s) and repeat the analysis 
4: collinearity detected: redundant variable(s)  between tables X1, X2, X3
results are probably incorrect: remove redundant variable(s) and repeat the analysis

此外,var1对总变化的个体贡献恰好为零,这是意想不到的(尽管这些是模拟数据)。

为什么因子和数值变量之间会出现这种共线性?varpart不能处理这种设计吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-04 00:04:32

看看你能从中得到什么

代码语言:javascript
复制
table(var1, var2)

您的两个变量(var1var2是相同的)-只是编码方式不同(数字、字母)。varpart确实可以处理这种设计,它发现如果您想将变体分解为两个相同的部分,则什么也做不了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55931436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档