Я пытаюсь выполнить анализ разделения вариантов на некоторых данных ответа.У меня есть три ограничивающие переменные, одна числовая переменная и два фактора, которые являются фиктивными переменными, которые я кодирую, чтобы преднамеренно фиксировать вариации, связанные с предсказанными сигналами в данных ответа.У меня проблема в том, что функция 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
не справиться с этим дизайном?