【问题标题】:Python to R: Removing TrendsPython 到 R:消除趋势
【发布时间】:2021-03-17 16:34:45
【问题描述】:

我正在尝试将此 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/

【问题讨论】:

    标签: python r time-series trend


    【解决方案1】:

    我相信你在下面的代码之后

    # 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
    

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2019-08-07
      相关资源
      最近更新 更多