2014-11-04 9 views
1

У меня есть эксперимент, где я измерил бит менее 200 переменных в трех экземплярах. Другими словами, у меня есть три вектора из ~ 200 значений.Среднее и стандартное отклонение трехзначных векторных данных

Мне нужен быстрый способ определить, следует ли использовать средние или медианные для моих расчетов. Я могу легко сделать это ((v1 + v2 + v3)/3), но как я могу рассчитать SD, чтобы иметь его в векторе ~ 200 SD? А как насчет медианы? После этих значений мне нужно выполнить кривые роста (измерения проводились в течение определенного периода времени).

+0

Вы хотите сказать, что 3 измерения были сделаны в time1, time2, time3, и теперь вы хотите проанализировать изменение в 200 различных переменных за эти 3 периода времени? Почему тогда вы хотите иметь среднюю или среднюю? Или вы взяли 3 измерения (для точности) в каждом из 200 периодов времени (time1, time2 .... time200)? – rnso

+0

Нет, эксперимент проводился в трех экземплярах (600 образцов, по 3 каждого). Мне нужно либо усреднить их (если стандартное отклонение не велико), либо просто взять медианную. Это связано с тем, что иногда в биологических экспериментах с живыми организмами существует большая вариация сама по себе (ошибки, которые имеют тенденцию сжиматься вместе, поэтому неравномерно распределены, пограничные эффекты в многолуночных пластинах, где происходит некоторое испарение и т. Д.). Для одного набора нам пришлось повторить весь эксперимент (у нас есть 4 набора этого анализа, то есть мы имеем дело с 3 (триплетными) x 200 (переменными) x 4 видами. – Turtle23

+0

Таким образом, рост (который вы упомянули в своем вопросе) более 200 периодов времени. – rnso

ответ

0

Вот dplyr решение:

require(dplyr) 

d <- data.frame(
    x1 = rnorm(10), 
    x2 = rnorm(10), 
    x3 = rnorm(10) 
) 

d %>% 
    rowwise() %>% 
    mutate(
    mean = mean(c(x1, x2, x3)), 
    median = median(c(x1, x2, x3)), 
    sd = sd(c(x1, x2, x3)) 
    ) 

Похоже, у вас также есть вопрос по существу о продольных данных. Если это так, то перекрестная проверка будет хорошей платформой для этого вопроса.

+0

Спасибо! он работал (после того, как я установил dplyr) – Turtle23

0

apply - это то, что вы делаете. Пусть ваш вектор в матрице, например.

mydat <- matrix(rnorm(600), ncol = 3) 
means <- apply(mydat, MARGIN = 1, mean) # MARGIN = 1 is rows, MARGIN = 2 would be columns... 
sds <- apply(mydat, MARGIN = 1, sd) 
medians <- apply(mydat, MARGIN = 1, median) 

Хотя я должен сказать, что по 3 значения каждый, используя медианные звуки довольно сомнительно.

0

Традиционный «для» петли также могут быть использованы, хотя это не является предпочтительным:

for(i in 1:nrow(d)) d[i,4]=mean(unlist(d[i,1:3])) 
for(i in 1:nrow(d)) d[i,5]=sd(unlist(d[i,1:3])) 
for(i in 1:nrow(d)) d[i,6]=median(unlist(d[i,1:3])) 

names(d)[4:6]=c('meanval', 'sdval', 'medianval') 

d 
      x1   x2   x3  meanval  sdval medianval 
1 -1.3230176 0.6956100 -0.7210798 -0.44949580 1.0363556 -0.7210798 
2 -1.8931166 0.9047873 -1.0378874 -0.67540558 1.4337404 -1.0378874 
3 -0.2137543 0.1846733 0.6410478 0.20398893 0.4277283 0.1846733 
4 0.1371915 -1.0345325 -0.2260038 -0.37444827 0.5998009 -0.2260038 
5 -0.8662465 -0.8229465 -0.2230030 -0.63739866 0.3595296 -0.8229465 
6 -0.2918697 -1.3543493 1.3025262 -0.11456426 1.3372826 -0.2918697 
7 -0.4931936 1.7186173 1.3757156 0.86704643 1.1904138 1.3757156 
8 0.3982403 -0.3394208 1.9316059 0.66347514 1.1585131 0.3982403 
9 -1.0332427 -0.3045905 1.1513260 -0.06216908 1.1122775 -0.3045905 
10 -1.5603811 -0.1709146 -0.5409815 -0.75742575 0.7195765 -0.5409815 

Использование д от @ ответ DMC в.