Ошибка R | Векторы вычислений возвращает неправильный размер матрицы | Несоответствующие массивы
Я пытаюсь рассчитать внутри и общую сумму квадратов и матриц кросс-произведения (W) в односторонней манове. У меня есть матрица лечения тм:
n x1 x2
1 6 7
1 5 9
1 8 6
...
2 3 3
2 1 6
2 2 3
...
3 2 3
3 2 3
3 5 1
...
У меня также есть каждое отдельное наблюдение в своих переменных, например:
x111 = x[1,1]
x112 = x[2,1]
...
которые также находятся в переменных, которые создают векторы:
# creating vectors
t11 = c(x111, x111_2) # 6,7
t12 = c(x112, x112_2) # 5,9
t13 = c(x113, x113_2) # 8,6
t14 = c(x114, x114_2) # 4,9
t15 = c(x115, x115_2) # 7,9
t21 = c(x211, x211_2) # 3,3
t22 = c(x212, x212_2) # 1,6
t23 = c(x213, x213_2) # 2,3
t31 = c(x311, x311_2) # 2,3
t32 = c(x312, x312_2) # 5,1
t33 = c(x313, x313_2) # 3,1
t34 = c(x314, x314_2) # 2,3
>dput(t11)
c(6,7)
Я пытаюсь вычислить W (внутри и общая сумма квадратов и матриц кросс-произведения).
Средства
> x1 # treatment 1
[1] 6 8
> x2 # treatment 2
[1] 2 4
> x3 # treatment 3
[1] 3 2
> x # overall mean
X1 X2
[1,] 4 5
Код у меня есть:
W = (t(t11)-t(x1))*(t11-x1)
+(t(t12)-t(x1))%*%(t12-x1)
+(t(t13)-t(x1))%*%(t13-x1)
+(t(t14)-t(x1))%*%(t14-x1)
+(t(t15)-t(x1))%*%(t15-x1)
+(t(t21)-t(x2))%*%(t21-x2)
+(t(t22)-t(x2))%*%(t22-x2)
+(t(t23)-t(x2))%*%(t23-x2)
+(t(t31)-t(x3))%*%(t31-x3)
+(t(t32)-t(x3))%*%(t32-x3)
+(t(t33)-t(x3))%*%(t33-x3)
+(t(t34)-t(x3))%*%(t34-x3)
Результат, который я получаю:
Error in (t(t11) - t(x1)) * (t11 - x1) + (t(t12) - t(x1)) %*% :
non-conformable arrays
Когда я выделил каждое утверждение, я получил это:
> (t(t11)-t(x1))%*%(t11-x1)
[,1]
[1,] 1
> (t(t12)-t(x1))%*%(t12-x1)
[,1]
[1,] 2
Почему эти утверждения оцениваются в матрицы 1x1? Когда я вычисляю операции 2x1 и 1x2 (вычитание и умножение) вручную, я получаю 2x2 для обоих. Вот онлайн калькулятор
1 ответ
Иногда это может сбивать с толку при работе с векторами в R, и вы хотите сделать умножение матриц. Вектор в R (скажем, x = c(1,2)
) печатается так, как будто это может быть вектор строки, но R рассматривает его как вектор столбца.
Имея это в виду, чтобы получить матрицу 2x2, которую вы хотите, сделайте
t11 = c(6, 7)
x1 = c(6, 8)
(t11 - x1) %*% t(t11 - x1)
Не нужно слишком много переносов.