R: Статистика распространения - PullRequest
0 голосов
/ 24 июня 2010

У меня есть количество выборок на единицу, и мне нужно рассчитать статистику с помощью R.

Таблица выглядит следующим образом (все строки и столбцы на самом деле заполнены значениями, я только напишу здесь несколько для облегчения видимости, и есть еще много столбцов):

Hour     1    2    3    4

H1       72  11   98   65

H2       19  27

H3

H4

H5

:

H200000

т.е. первый час (H1): 72 выборки значения 1, 11 выборок значения 2 и т. д. Второй час (H2) - 19 выборок значения 1, 27 выборок значения 2 и т. д.

Мне нужно рассчитать среднее и стандартное отклонение в час (т.е. на строку). Поскольку строк много, мне нужен быстрый метод.

Пример: ручной расчет среднего значения для часа 1 (H1) будет:

(72x1 + 11x2 + 98x3 + 65x4)/(72+11+98+65) = 2.6

Полагаю, существуют R-методы или пакеты, которые могут это сделать, но я не могу найти где. Ваша поддержка высоко ценится.

Спасибо, Chris

Ответы [ 3 ]

2 голосов
/ 24 июня 2010

Вы хотите вычислить взвешенное среднее, поэтому вам нужно weighted.mean.Для первой строки:

values  <- c(1, 2, 3, 4)
weights <- c(72, 11, 98, 65)
weighted.mean(values, weights)

Взвешенное стандартное отклонение не является четко определенным.Вы могли бы использовать взвешенную среднеквадратическую среднеквадратичную величину в качестве оценки (но это предполагает, что ваша входная выборка действительно из единственного гауссова значения, т.е. нет выбросов - не уверен, так ли это для вашего примера).*

Вы должны прочитать свои данные в таблицу и выполнить итерации по каждой строке.Кроме того, «много тысяч строк» ​​не обязательно большое число для такого простого вычисления.Это очень простой материал, может быть, полезно изучить учебник.

1 голос
/ 24 июня 2010

Вам гораздо лучше (т.е. быстрее вычислять), используя матричные операции вместо применения чего-либо по строке.Например, предполагая, что X - это матрица , содержащая ваши данные, вы можете получить взвешенное значение следующим образом:

w <- 1:ncol(X)
w <- w/sum(w)  #scale to have a sum of 1
wmeans <- X %*% w
0 голосов
/ 24 июня 2010

Предполагая, что ваша таблица представляет собой матрицу с именем dataset из n * 20000, и у вас есть веса в массиве weights, которые вам просто нужно сделать:

# The 1 as 2nd parameter indicates to apply the function on the rows
w.means <- apply(dataset, 1, weighted.mean, w=weights)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...