Я пытаюсь вручную вычислить дисперсию в матрицах в R, и у меня возникают некоторые проблемы, связанные с тем, что я получаю неправильное количество измерений.
У меня есть x, матрица 12x250, Temp.means, матрица 12x1, и я передаю ее функции с заглядыванием внутрь.
Мне в основном нужна дисперсия x, поэтому я использую функцию apply, чтобы попытаться применить мою функцию дисперсии к моему коду ... но что-то работает неправильно.
Вот мой код:
Variance.fun <- function(x,Temp.means) {
for (i in 1:250) {
vari <- (matrix(x[i,]-Temp.means)^2)/250
}
}
если вам просто нужна дисперсия каждой строки, почему бы не apply(my_matrix, 1, var)
?
Под дисперсией x обычно понимается матрица 12 на 12. Имеет ли функция var(x)
желаемый выход? Если нет, может быть, вы объясните, чем то, что вам нужно, отличается.
Если под "дисперсией" вы подразумеваете различия строк от "стандартной строки" (как предлагает ваш цикл for), то одним из способов получить это будет использование apply
.
res <- apply( x, 1, "-", Temp.means)
Это можно было бы превратить в функцию:
row.variation.from.std <- function (mat, std){
apply( mat, 1, "-", std) }
Я подозреваю, что ваше использование слова «дисперсия» вводит в заблуждение некоторых потенциальных респондентов, которые предположили, что вы имели в виду концепцию, как это слово определяется в статистической практике.
Пожалуйста, сделайте этот вопрос воспроизводимый. Сюда входят образцы данных (например,
dput(head(x))
), буквальный текст предупреждений / ошибок и ожидаемый результат. Ссылки: stackoverflow.com/questions/5963269, stackoverflow.com/help/mcve и stackoverflow.com/tags/r/info.