У меня есть 30 случайных выборок, взятых из набора данных. Мне нужно вычислить среднее значение выборки и дисперсию выборки для каждой выборки и расположить их в таблице с 3 столбцами, озаглавленными «выборка», «среднее значение» и «дисперсия».
Мой набор данных:
lab6data <- c(2,5,4,6,7,8,4,5,9,7,3,4,7,12,4,10,9,7,8,11,8,
6,13,9,6,7,4,5,2,3,10,13,4,12,9,6,7,3,4,2)
Я сделал такие образцы, как:
observations <- matrix(lab6data, 30, 5)
и средства для каждого образца в отдельности:
means <- rowMeans(observations)
Не могли бы вы помочь мне найти дисперсию для каждой выборки отдельно?
Вы можете рассчитать дисперсию для каждой строки с помощью apply
:
apply(observations, 1, var)
Или используйте rowVars
из пакета matrixStats
.
Обратите внимание, что matrixStats::rowVars
будет на немногомного быстрее (см. Комментарий @ HenrikB ниже), чем apply(..., 1, var)
, точно так же, как rowMeans
быстрее, чем apply(..., 1, mean)
.
Большое спасибо за ваш быстрый ответ. Есть ли способ получить дисперсию сразу всех выборок и добавить их в таблицу
@SadieKelsey «Есть ли способ получить дисперсию сразу всех выборок и добавить их в таблицу» Я не уверен, что понимаю. apply(observations, 1, var)
вернет вектор той же длины, что и nrow(observations)
. Вы можете сохранить этот вектор как новый столбец (например, observations$rowVar = apply(observations, 1, var)
), но, на мой взгляд, лучше хранить данные и сводную статистику в отдельных объектах / таблицах.
Я пробовал использовать Variance <- rowVars (наблюдения), но он говорит Ошибка в rowVars (наблюдения): не удалось найти функцию "rowVars"
@SadieKelsey Сначала вам нужно установить пакет matrixStats
; например сделать install.packages("matrixStats")
.
Я установил, как вы сказали. Он был успешно установлен, но все же говорит, что у них нет функции rowVars. в раскрывающемся списке, который появляется, когда я печатаю, также не имея rowVars в качестве предложения.
Вы нагрузка библиотеку? library(matrixStats)
?
Сработало после загрузки библиотеки .. также сработало и по-другому. спасибо за большую помощь.
Добро пожаловать, @SadieKelsey; Пожалуйста, подумайте о том, чтобы закрыть вопрос, установив галочку рядом с ответом.
«Я предполагаю, что matrixStats :: rowVars будет немного быстрее, чем apply (..., 1, var)»: на самом деле много быстрее, ср. github.com/HenrikBengtsson/matrixStats/wiki/colRowVars. То же самое для rowMeans()
, .rowMeans()
, matrixStats::rowMeans2()
, см. github.com/HenrikBengtsson/matrixStats/wiki/colRowMeans2
Большое спасибо @HenrikB, я внес правку в свой пост, чтобы уточнить!
Мы можем использовать pmap
, чтобы применить функцию к каждой строке data.frame
.
library(purrr)
varS <- pmap_dbl(as.data.frame(observations), ~ var(c(...)))
cbind(observations, varS)
observations <- matrix(lab6data, 10, 4)
Я тоже попробую поработать над этим, спасибо за помощь. Это было очень полезно.
Возможный дубликат Я хочу рассчитать отклонение выборки каждого столбца в данных