Функция стандартного отклонения в ddplyr не возвращает значение в расплавленном кадре данных

У меня есть набор данных, состоящий из 3 значений положения (XYZ) и 3 значений вращения (Омега, Фи, Каппа).

голова (pos.df) выглядит так

  Batch  PhotoID         X          Y        Z       Omega         Phi      Kappa
1     1 DSC_7120 -269.6995 -359.33126 2390.522 -2.78643779  0.03288689   49.42041
2     1 DSC_7121 -323.5350 -311.80727 2388.374 -1.43015984 -0.61313717   49.08223
3     1 DSC_7122 -381.0833 -259.52629 2386.173 -0.08466679 -2.05867638   48.67501
4     1 DSC_7123 -434.4999 -212.15629 2384.075 -0.23728698 -1.97925763   49.09743
5     1 DSC_7707 -297.2458  -12.70537 2352.626 -1.17187585  0.70767493 -130.93919
6     1 DSC_7708 -238.0820  -61.07186 2353.831 -1.12715649  0.55772261 -131.25967

Затем я плавлю данные

dfl <- melt(pos.df, id.vars = c("Batch", "PhotoID"))

такой, что голова (dfl)

Batch  PhotoID variable     value
1     1 DSC_7120        X -269.6995
2     1 DSC_7121        X -323.5350
3     1 DSC_7122        X -381.0833
4     1 DSC_7123        X -434.4999
5     1 DSC_7707        X -297.2458
6     1 DSC_7708        X -238.0820

и хвост(dfl)

Batch  PhotoID variable      value
385     5 DSC_7710    Kappa -131.57589
386     5 DSC_7711    Kappa -131.54491
387     5 DSC_7794    Kappa   51.35246
388     5 DSC_7795    Kappa   51.58456
389     5 DSC_7796    Kappa   51.82275
390     5 DSC_7797    Kappa   51.48262

теперь я хотел бы взглянуть на некоторую сводную статистику...

smry <- ddply(dfl, c("Batch", "PhotoID", "variable"), 
              summarise, 
              mean = mean(value), 
              sd = sd(value),
              se = sd(value)/sqrt(length(value)))

но по какой-то причине значения SD и SE возвращают NA.

голова (смри)

Batch  PhotoID variable          mean sd se
1      1 DSC_7120        X -269.69945440 NA NA
2      1 DSC_7120        Y -359.33125720 NA NA
3      1 DSC_7120        Z 2390.52165300 NA NA
4      1 DSC_7120    Omega   -2.78643779 NA NA
5      1 DSC_7120      Phi    0.03288689 NA NA
6      1 DSC_7120    Kappa   49.42040741 NA NA
7      1 DSC_7121        X -323.53499700 NA NA
8      1 DSC_7121        Y -311.80726930 NA NA
9      1 DSC_7121        Z 2388.37389700 NA NA
10     1 DSC_7121    Omega   -1.43015984 NA NA

Я проверил тип данных...

ул(pos.df)

'data.frame':   65 obs. of  8 variables:
 $ Batch  : int  1 1 1 1 1 1 1 1 1 1 ...
 $ PhotoID: Factor w/ 13 levels "DSC_7120","DSC_7121",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ X      : num  -270 -324 -381 -434 -297 ...
 $ Y      : num  -359.3 -311.8 -259.5 -212.2 -12.7 ...
 $ Z      : num  2391 2388 2386 2384 2353 ...
 $ Omega  : num  -2.7864 -1.4302 -0.0847 -0.2373 -1.1719 ...
 $ Phi    : num  0.0329 -0.6131 -2.0587 -1.9793 0.7077 ...
 $ Kappa  : num  49.4 49.1 48.7 49.1 -130.9 ...

Может ли кто-нибудь сказать мне, почему мои функции sd() и se не возвращают значения?

в качестве примера я вычислил эти цифры для одной фотографии в excel,

 stat, X, Y, Z, Omega, Phi, Kappa
Variance, 0.02273259300, 0.13331103000, 0.00000342846, 0.00000214810, 0.00000364895, 0.00000310653
SD, 0.13485575300, 0.32657131600, 0.00165613000, 0.00131090800, 0.00170855500, 0.00157646000

так что технически они существуют...

Спасибо за ваше время.


person c0ba1t    schedule 14.07.2017    source источник
comment
Когда вы melt, у вас есть уникальные группы PhotoID & variable и только одно значение в этой группе. Обратите внимание, что ваше mean() имеет то же значение, что и в расплавленных данных. -269.69945440 для PhotoID==DSC_7120 и variable==X. sd() одного значения равно NA. Я думаю, вам следует отказаться от PhotoID и использовать следующий код: smry <- df1 %>% group_by(variable) %>% summarise(mean=mean(value), sd=sd(value), se=sd(value)/sqrt(length(value)))   -  person CPak    schedule 14.07.2017
comment
@ChiPak, спасибо, но я думаю, может быть, это не так? Я обновил вопрос, чтобы показать, что PhotoID не уникален, есть 5 наборов из 6 переменных для каждого PhotoID, это наборы, для которых я хочу получить сводную статистику для... например, дисперсия в позиции X этой фотографии после каждая из 5 реконструкций (положения)   -  person c0ba1t    schedule 14.07.2017
comment
Не могли бы вы указать на пару PhotoID и variable, в которой больше 1 value? Я вижу только уникальные пары   -  person CPak    schedule 14.07.2017
comment
Photo Id точно не уникален, но комбинация групповой переменной c("Batch", "PhotoID", "variable") уникальна, что не даст вам std, std требует более одного значения, если нет, вернет NA   -  person BENY    schedule 14.07.2017
comment
вы правы.. Партию нужно отбросить... позвольте мне попробовать это. Спасибо вам обоим   -  person c0ba1t    schedule 14.07.2017


Ответы (1)


Благодаря @ChiPak и @Wen

Я чрезмерно ограничивал свою функцию суммирования...

"Пакет" нужно было убрать из звонка... вот так

smry <- ddply(dfl, c("PhotoID", "variable"), 
              summarise, 
              mean = mean(value), 
              sd = sd(value),
              se = sd(value)/sqrt(length(value))) 

в настоящее время,

head(smry)

PhotoID variable          mean           sd           se
1  DSC_7120        X -269.69730716 0.1507733086 0.0674278735
2  DSC_7120        Y -359.60802888 0.3651178278 0.1632856566
3  DSC_7120        Z 2390.51990620 0.0018517456 0.0008281258
4  DSC_7120    Omega   -2.78508610 0.0014656399 0.0006554541
5  DSC_7120      Phi    0.03468442 0.0019102228 0.0008542776
6  DSC_7120    Kappa   49.42263779 0.0017625356 0.0007882299
7  DSC_7121        X -323.53707466 0.1508844825 0.0674775919
8  DSC_7121        Y -312.08052414 0.3633875558 0.1625118554
9  DSC_7121        Z 2388.37413460 0.0005815413 0.0002600732
10 DSC_7121    Omega   -1.42917428 0.0016912203 0.0007563367

Спасибо вам обоим.

person c0ba1t    schedule 14.07.2017