Python 到 R:删除趋势

Python to R: Removing Trends

我正在尝试将此 Python 代码“翻译”为 R:

# create a differenced series
def difference(dataset, interval=1):
    diff = list()
    for i in range(interval, len(dataset)):
        value = dataset[i] - dataset[i - interval]
        diff.append(value)
    return diff
 
# invert differenced forecast
def inverse_difference(last_ob, value):
    return value + last_ob
 
# define a dataset with a linear trend
data = [i+1 for i in range(20)]
print(data)
# difference the dataset
diff = difference(data)
print(diff)
# invert the difference
inverted = [inverse_difference(data[i], diff[i]) for i in range(len(diff))]
print(inverted)

这应该导致输出:

1 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
2 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
3 [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

这是我尝试过的方法,但我在以下方面非常失败:

# Create a differenced series
difference <- function(dataset, interval=1) {
  my_diff <- list()
  
  for (i in seq(interval, length(dataset))) {
    value <- dataset[i] - dataset[i-interval]
    c(my_diff, value)
  }
  
  return(my_diff)
}

# Invert differences forecast
inverse_difference <- function(last_ob, value) {
  return(value + last_ob)
}

# Defining a dataset with a linear trend
my_data <- seq(1,20)
my_data

# Difference the dataset
my_diff <- difference(my_data)
my_diff

# Invert the difference
inverted <- inverse_difference(my_data[i], my_diff[i])

正确的做法是什么?

原始 Python 代码可在以下位置找到:https://machinelearningmastery.com/remove-trends-seasonality-difference-transform-python/

我相信你在寻找下面的代码

# Create a differenced series
difference <- function(dataset, interval=1) {
  my_diff <- NULL
  
  for (i in seq(interval, length(dataset))) {
    value <- dataset[i] - dataset[i-interval]
    my_diff <- c(my_diff, value)
  }
  
  return(my_diff)
}

# Invert differences forecast
inverse_difference <- function(last_ob, value) {
  return(cumsum(value) + last_ob)
}

# Defining a dataset with a linear trend
my_data <- seq(1,20)
my_data

# Difference the dataset
my_diff <- difference(my_data)
my_diff

# Invert the difference
inverted <- inverse_difference(my_data[1], my_diff)

 
my_data
# [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
my_diff
# [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
inverted
# [1]  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20