Создание гистограммы со средними значениями биннинга

Я делаю две гистограммы, используя скользящие средние и биннинг. Я получил скользящее среднее из 18 тыс. точек данных, большинство из которых имеют 0 значений, используя Excel.

Это то, что я хотел сделать с помощью R

"Скользящая средняя"

Я хотел бы использовать R, чтобы создать скрипт, который будет создавать гистограмму того, сколько «отсчетов» получило устройство. Я пытался :

hist(y, 20)  
hist (y, ) 
plot (y, x) 

и вот, после трех дней обучения, вот что у меня получилось:

y <- AltWithAllCounts$Cts.p.ms
x <- AltWithAllCounts$Alt 
barwidth <- 100 
#how many bins
block <- rep(seq(1,length(x)/barwidth),each=barwidth)
#makes bins
a <- aggregate(y,by=list(block),sum) 
#creates sum of bins
altmean <- aggregate(x,by=list(block),mean)
#finds mean altitude of each bin
avgCount <- a$x/barwidth
#averages out each bin
plot(altmean$x,avgCount,xlab="Altitude",ylab="Counts") 
# creates scatterplot of mean bins
 avgBinCnt <- data.frame(altmean$x,a$x)
write.csv(avgBinCnt,file="avgBinCnt.csv",)

Идея состоит в том, что я хочу получить среднюю сумму 20 значений и построить ее во времени, то есть x

x       y
851304  0
851404  0
851503  0
851603  1
851703  0
851804  0
851904  0
852107  0
852203  0
852303  0
922503  0
922603  2
922703  0
922804  0
922904  0
923107  0
923203  0
923303  0
923404  0
923504  0
923604  0
923703  0
923803  0
923904  0
924108  0
924205  1
1441603 0
1441703 0
1441804 0
1441904 0
1442107 1
1442203 1
1442304 0
1442404 4
1442504 0
1442605 1
1442703 6
1442803 8
1442904 0 

person Dgales4130    schedule 09.08.2014    source источник


Ответы (1)


Гистограмма показывает частоты, а не количество вхождений в интервале. Чтобы получить последний, можно сделать что-то вроде этого:

# First create some test data
t <- seq(1,20000)
p <- 2000
s <- (sin(t*pi/p)+1)/2
d <- ifelse(runif(length(s))<s,1,0)
# Each element of d now contains a 1 or a 0, with a probability that varies
# according to the sign function
# Choose how many elements to count over
barwidth <- 100
# Create a vector of block numbers, with each numbered block having a length of 
# barwidth
block <- rep(seq(1,length(s)/barwidth),each=barwidth)
# Now we aggregate with the sum to find the number of 1s in each block
a <- aggregate(d,by=list(block),sum)
# And plot it to show that we have the expected result
barplot(a$x)

... который дает:

введите здесь описание изображения

Для точечной диаграммы частоты, а не гистограммы подсчетов, это дает желаемый результат:

midpoint <- aggregate(t,by=list(block),mean)
plot(midpoint$x,a$x,xlab="",ylab="frequency")

Или можно найти и построить симметричное скользящее среднее с помощью:

filt <- rep(1/barwidth,barwidth)
y_sym <- filter(d, filt, sides=2)
plot(t,y_sym,xlab="",ylab="frequency")
person Simon    schedule 10.08.2014
comment
Спасибо за быстрый ответ. Я изменил свои данные, чтобы отразить, что у меня действительно есть значения больше 1. - person Dgales4130; 10.08.2014
comment
Метод, который я показал, применим как к случаям, когда имеется более одного подсчета за период, так и к случаям, когда не более одного подсчета за период. Хотя я изобразил сумму подсчетов, а не средний подсчет, я могу получить средний подсчет, разделив, например, avgCount <- a$x/barwidth - person Simon; 11.08.2014
comment
Я обновил свой пост и добавил ссылку на точечную диаграмму, которую я хотел получить. - person Dgales4130; 11.08.2014
comment
Я все еще получаю печать функции sin(). Я пытаюсь понять, что нужно для написания кода для среднего и скользящего среднего в диаграмме, подобной ссылке, которую я разместил выше в гиперссылке «Скользящее среднее». - person Dgales4130; 12.08.2014
comment
Если вы замените мой вектор d своим вектором y, а мой вектор t своим вектором x в приведенном выше коде и используете код симметричного скользящего среднего, вы получите график, точно такой же, как вы опубликовали. - person Simon; 13.08.2014
comment
Думаю, я наконец понял. Спасибо, что остаетесь со мной в этом вопросе. Я студент-инженер, работаю волонтером в планетарии в крупном городе, и я очень благодарен, что вы мне в этом помогли. Есть ли место, где я могу опубликовать сценарий R, чтобы другие люди могли ссылаться на мои комментарии к этому разговору? - person Dgales4130; 13.08.2014
comment
Рад помочь. Вы можете отредактировать свой вопрос, чтобы показать полный ответ, добавленный в нижней части вашей проблемы. Пока вы это делаете, вы также можете включить свой пример графика и окончательный график, который вы получили в своем вопросе. Вы можете щелкнуть значок вставки изображения, чтобы сделать это во время редактирования. - person Simon; 14.08.2014