【问题标题】:Wrong values collected from custom CCF function in R从 R 中的自定义 CCF 函数收集的错误值
【发布时间】:2021-12-20 23:01:35
【问题描述】:

这是对此处提出的问题的后续问题... Quadrant plot based on ccf value outputs in R

原来的问题和这个问题使用相同的数据...

df <- structure(list(Date = structure(c(16222, 16617, 14518, 15156, 
15918, 17075, 15522, 16679, 16010, 15187, 15461, 16283, 17379, 
15553, 17410, 15553, 16191, 16314, 14549, 15979), class = "Date"), 
    Commonname = c("Black Sea Bass", "Pinfish", "Pigfish", "Pinfish", 
    "Silver Perch", "Black Sea Bass", "Pigfish", "Pinfish", "Pigfish", 
    "Silver Perch", "Silver Perch", "Black Sea Bass", "Pinfish", 
    "Pinfish", "Silver Perch", "Pigfish", "Black Sea Bass", "Silver Perch", 
    "Silver Perch", "Black Sea Bass"), CPUE = c(1.25513090974505, 
    9.41478783154444, 1.63667465565289, 3.13779141143018, 4.26313144106683, 
    2.32564938844104, 2.70394855189782, 8.49969670589948, 1.7329255861366, 
    2.0845409179642, 0.269832703723692, 1.21288437532366, 11.8739506505966, 
    8.55504246458105, 2.21256794002004, 4.51336797979511, 1.47695928524315, 
    1.10425042966867, 0.632732705722451, 1.59167844861806), Discharge = c(14.8521616, 
    5.23042759111111, 1.42663083211115, 0.184551018105263, 48.9156538971429, 
    2.29765846588235, 33.25524992, 4.06629248, 1.610659584, 0.21166808, 
    0.0607489749333333, 2.22029454545455, 12.90821328, 31.9696672, 
    8.05754544, 32.7267690105263, 43.493472128, 6.77337856, 1.10646621744, 
    4.37803470545454)), row.names = c(NA, -20L), class = c("tbl_df", 
"tbl", "data.frame"))

现在使用以下代码并仅过滤正滞后...


library(tidyverse)

fccf = function(data) ccf(data$CPUE,data$Discharge, lag.max = 5, plot = FALSE)
facf = function(acf) tibble(aacf = acf$acf[,,1], lag = acf$lag[,,1])

test.df <- df %>% group_by(Commonname) %>%
  nest() %>%  #Step 1
  mutate(ccf = map(data, ~fccf(.x))) %>% #Step 2
  mutate(acf = map(ccf, ~facf(.x))) %>%  #Step 3
  unnest(acf)

#removes the nested columns
test.df <- test.df[,c("Commonname", "aacf", "lag")]

#removes negative lags
test.df <- subset(test.df, lag > 0)
test.df

我从每个人的 ccf 显示的内容中得到不同的结果。

例如,Black Sea Bass 的绘图与这些自定义函数提取的值完全不同......

df <- df %>% 
  filter(Commonname == "Black Sea Bass")
ccf(df$Discharge, df$CPUE, lag.max = 5)

ccf 图在第二个正滞后步长处显示的值几乎为 1.0,但自定义函数拉取的值约为 0.01

如果有人可以帮助我找出导致差异的原因,或者如何让这些自定义函数拉动图中看到的相关性,我将不胜感激。谢谢。

【问题讨论】:

    标签: r lag cross-correlation


    【解决方案1】:

    哦,一切都很好!但是,不同之处在于,在 first queryccf 函数中,您输入了 data$CPUE 作为 xdata$Discharge 作为 y。所以我也做了fccf 函数。然而,现在你已经交换了论点!请注意,您正在调用ccf(df$Discharge, df$CPUE, lag.max = 5)。因此有区别。

    fccf = function(data) ccf(data$Discharge, data$CPUE, lag.max = 5, plot = FALSE)
    facf = function(acf) tibble(lag = acf$lag[,,1], acf = acf$acf[,,1])
    
    df %>% nest_by(Commonname) %>% 
      mutate(ccf = list(fccf(data)),
             acf = list(facf(ccf))) %>% 
      select(c(-ccf, -data)) %>% 
      unnest(acf) %>% 
      ggplot(aes(lag, acf)) +
      geom_segment(aes(x=lag, xend=lag, y=0, yend=acf)) +
      geom_point(size=2, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)+
      facet_wrap(vars(Commonname), 2, 2)
    

    将上面的图表(黑海鲈的侧面)与您得到的结果进行比较。

    df2 = df %>% filter(Commonname == "Black Sea Bass") 
    acc1 = ccf(df2$Discharge, df2$CPUE, lag.max = 5)
    

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 1970-01-01
      • 2016-07-09
      • 2022-10-04
      • 2017-08-31
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多