我正在尝试对一些响应数据运行变量分区分析。我有三个约束变量,一个数字变量和两个因子,它们是我编码的虚拟变量,目的是捕捉与响应数据中的预测信号相关的变化。我遇到的问题是,varpart()函数正在检测其中一个因子变量和数值变量之间的共线性。我相信这是因为数值变量被编码为离散值,而这些值之间的“跳跃”对应于不同因子级别之间的跳跃。
以下是有问题的两个变量的示例:
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)))
以下是一些响应数据示例:
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)时,我收到以下警告消息:
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不能处理这种设计吗?
发布于 2019-05-04 00:04:32
看看你能从中得到什么
table(var1, var2)您的两个变量(var1和var2是相同的)-只是编码方式不同(数字、字母)。varpart确实可以处理这种设计,它发现如果您想将变体分解为两个相同的部分,则什么也做不了。
https://stackoverflow.com/questions/55931436
复制相似问题