Равномерный интервал 1 / частота для функции R spec.pgram ()

Цель состоит в том, чтобы построить график согласованности между двумя временными рядами (то есть коэффициента корреляции по отношению к частотам). Как я могу добиться, чтобы 1 / частота (то есть период) по оси x были равномерно распределены?

t <- 0:99
ts1 <- ts(2*cos((2*pi)/24*t))
ts2 <- ts(2*cos((2*pi)/48*t))
ts12 <- ts.intersect(ts1, ts2)

Coh <- spec.pgram(ts12, spans=3)
plot(Coh$freq, Coh$coh, type='l')
plot(1/Coh$freq, Coh$coh, type='l')  # how to get 1/freq to be evenly-space?

Я попытался изменить функцию spec.pgram (), но безуспешно. Точнее заменяю строчку:

freq <- seq.int(from = xfreq/N, by = xfreq/N, length.out = Nspec)

с участием:

freq.tmp <- seq.int(from = xfreq/N, by = xfreq/N, length.out = Nspec)
freq <- rev(1/seq(from=1/max(freq.tmp), to=1/min(freq.tmp), length.out=Nspec))  

Кому-нибудь еще повезло больше? Спасибо


person T_D    schedule 19.01.2016    source источник


Ответы (1)


Вы имеете в виду, что хотите просто пометить ось X периодами, а не частотами? Это позволит сохранить интервал между значениями по оси x за счет нелинейного масштабирования для значений x. Например (используя ggplot2):

library(ggplot2)

dat = as.data.frame(Coh[c("freq","spec","coh","phase")])

ggplot(dat, aes(freq, coh)) + 
  geom_line() +
  geom_point() +
  scale_x_continuous(breaks=dat$freq[seq(1,nrow(dat),3)], 
                     minor_breaks=dat$freq,
                     labels=round(1/dat$freq[seq(1,nrow(dat),3)],1)) +
  labs(x="Period")

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

Вы также можете установить метки значений x так, чтобы они приходились на целые периоды:

breaks = c(1:10,15,25,50,100)

ggplot(dat, aes(freq, coh)) + 
  geom_line() +
  geom_point() +
  scale_x_continuous(breaks=1/breaks,
                     minor_breaks = 1/(breaks[-1] - 0.5 * diff(breaks)),
                     labels=breaks) +
  labs(x="Period")

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

person eipi10    schedule 19.01.2016
comment
молодец eipi10, думаю это правильное решение! Ваше здоровье - person T_D; 20.01.2016
comment
Хотя было бы лучше иметь линейное масштабирование или функцию «равномерно распределенных» - person T_D; 20.01.2016
comment
Ну, линейное масштабирование - это то, что вы получаете, когда напрямую строите график 1 / частота. Но этого вы пытались избежать. - person eipi10; 20.01.2016
comment
Модификация, которую я сделал, возвращает периоды с равным интервалом (путем указания неравномерно распределенных частот), но результат (когерентность как функция периодов) не выглядит правильным (это не похоже на растягивающую версию ваших графиков) . Я подозреваю, что в спектральной теории чего-то не хватало - person T_D; 20.01.2016