Hello,

I do have time series data for 20 quarters and need to calculate forecast by using the exponential smoothing backcasting method. Based on the criteria, I do need to use last 13 dataset out of 20. I wrote a function to calculate forecast. However, the function is still getting all 20 historical observation instead of 13 (fence value).

test data.pdf (13.5 KB)

#Exponential smoothing with backcasting with a fence

ESBC_with_fence_2 <- function(x, alpha = 0.2, fence = 20){

#TODO: Check that x is a vector

#TODO: check for if the fence is longer than the data and what to do with that situation

print("fence:")

print(fence)

print("length(x):")

print(length(x))

print("(length(x) - fence + 1):")

print(length(x) - fence + 1)

#seed the forecast with the most recent element

forecast = x[length(x)]

#special case

if (fence == 1){

return(forecast)

}

#backcast

for (i in (length(x) - 1): (length(x) - fence + 1)){

forecast = forecast * (1 - alpha) + x[i] * alpha

# print("backcast")

# print("x[i]")

# print(x[i])

}

#forecast

for (i in (length(x) - fence + 1):length(x)){

forecast = forecast * (1 - alpha) + x[i] * alpha

# print("forecast")

# print("x[i]")

# print(x[i])

}

return(forecast)

}

#use function to calculate forecast with fence

forecasts_fence_alpha_0.2 <- test_data %>%

group_by(MATERIAL) %>%

do(fcst_list = ESBC_with_fence_2(.$demand))