Я пытаюсь использовать функцию corr () для расчета взвешенных значений. Это работает так: первый аргумент должен быть матрицей с двумя столбцами, соответствующими двум переменным, корреляцию которых мы хотим вычислить, а второй - вектором весов, который будет применяться к каждой паре наблюдений.
Вот пример.
> head(d)
Shade_tolerance htot
1 4.56 25.0
2 2.73 23.5
3 2.73 21.5
4 3.97 17.0
5 4.00 25.5
6 4.00 23.5
> head(poids)
[1] 5.200440e-07 5.200440e-07 1.445016e-06 1.445016e-06 1.445016e-06 1.445016e-06
> corr(d,poids)
[1] 0.1357279
Итак, я получил это и могу использовать его в своей матрице, но я хотел бы вычислить различные корреляции в соответствии с уровнями фактора. Допустим, я использовал функцию tapply ().
> head(d2)
Shade_tolerance htot idp
1 4.56 25.0 19
2 2.73 23.5 19
3 2.73 21.5 19
4 3.97 17.0 18
5 4.00 25.5 18
6 4.00 23.5 18
Поэтому моей мечтой было бы сделать что-то вроде этого:
tapply(as.matrix(d2[,c(1,2)]), d2$idp, corr)
За исключением того, что, как вы знаете, в tapply () первым элементом должен быть вектор, а не матрица.
У кого-нибудь есть решение для меня?
Спасибо большое за вашу помощь.
РЕДАКТИРОВАТЬ: Я только что понял, что мне не хватает весов для взвешенной корреляции в той части кадра данных, которую я вам показал. Таким образом, у него будет несколько способов взять и матрицу, и веса в соответствии с уровнями фактора.
> head(df)
Shade_tolerance htot idp poids
1 4.56 25.0 19 5.200440e-07
2 2.73 23.5 19 5.200440e-07
3 2.73 21.5 19 1.445016e-06
4 3.97 17.0 19 1.445016e-06
5 4.00 25.5 19 1.445016e-06
6 4.00 23.5 19 1.445016e-06
Надеюсь, это понятно.