2010-06-24 5 views
0

У меня есть количество образцов на единицу и нужно рассчитать статистику с R.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

ответ

2

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

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

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

# same values and weights as above 
sqrt(sum(values^2*weights^2))/sum(weights) 

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

+0

хороший ответ, но не перебирать, используйте 'apply' – nico

0

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

# The 1 as 2nd parameter indicates to apply the function on the rows 
w.means <- apply(dataset, 1, weighted.mean, w=weights) 
1

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

w <- 1:ncol(X) 
w <- w/sum(w) #scale to have a sum of 1 
wmeans <- X %*% w