我正在尝试对某些响应数据进行变异分区分析。我有三个约束变量,一个数字变量和两个因子,它们是我正在编码的虚拟变量,目的是有意捕获与响应数据中的预测信号相关的变化。我遇到的问题是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
无法处理此设计吗?
答案 0 :(得分:0)
看看你从中得到什么
table(var1, var2)
您的两个变量(var1
和var2
是相同的)–仅以不同的方式(数字,字母)编码。 varpart
确实可以处理此设计,并且发现如果要将变体分解为两个相同的部分,将无能为力。