如何用R语言编写等价于ACF的函数?

补充:编写这个函数的原因是因为老师让我们基于R语言做ARMA模型仿真模拟,但是不允许调用现有函数…已跪…谢谢各位大大们TAT [图片] 求大大们帮忙看…
关注者
7
被浏览
2,415

4 个回答

错误在于“:”的优先级高于“-”:

> 1:10-5

[1] -4 -3 -2 -1 0 1 2 3 4 5

而不是1 2 3 4 5

为啥不用现成library里的acf函数呢?

补充:

我试着撸了一个粗糙版的,但貌似跟forecast包ACF出来的结果有点出入,可能是分母的sd方法计算不对?

你可以参考下:

rm(list = ls());
set.seed(1);
tmp <- sample(c(1:100), 50, replace = T);
thisGetAcf <- function(x, lag.max = 10){
  sampleT <- length(x);
  lag.max <- min(lag.max, sampleT - 1L);
  if(lag.max < 0){
    stop("lag.mx must be non-negative...");
  lagList <- 0:lag.max;
  muX <- mean(x);
  sigmaX <- sd(x);
  smpAcfCalc <- function(lagNum){
    smp1 <- x[1: (sampleT - lagNum)];
    smp2 <- x[(lagNum + 1) : sampleT];
    curNumerator <- sum((smp1 - muX) * (smp2 -muX)) / (sampleT - lagNum)
    curdivisor <- (sd(smp1) * sd(smp2)) * (sampleT - lagNum -1) / (sampleT - lagNum);
    curAcf <- curNumerator / curdivisor;
    return(curAcf)