R中vegan包的varpart函数检测因子和数值变量之间的意外共线
我正在尝试对一些响应数据运行变体分区分析。我有三个约束变量,一个数值变量和两个因子,它们是虚拟变量,我对它们进行编码是为了有意捕获响应数据中与预测信号相关的变化。我遇到的问题是R中vegan包的varpart函数检测因子和数值变量之间的意外共线,r,vegan,R,Vegan,我正在尝试对一些响应数据运行变体分区分析。我有三个约束变量,一个数值变量和两个因子,它们是虚拟变量,我对它们进行编码是为了有意捕获响应数据中与预测信号相关的变化。我遇到的问题是varpart()函数正在检测一个因子变量和数值变量之间的共线性。我认为这是因为数字变量被编码为离散值,这些值之间的“跳跃”对应于不同因子水平之间的跳跃 以下是两个变量的示例: > var1 <- unlist(lapply(1:5, function(x){rep(x, 20)})) >
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
执行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
不能处理这种设计吗?看看你从中得到了什么
table(var1, var2)
您的两个变量(var1
和var2
是相同的)–仅以不同的方式编码(数字、字母)varpart
确实可以处理这种设计,并且它发现如果您想将变体分解为两个相同的部分,则什么也做不了
table(var1, var2)