A very efficient method of forecasting one variable is to find a related variable that leads it by one or more time intervals. We use cross correlation approach here. Second approach, is to use information about the sales of similar products in the past. Where we study the bass curve. A third strategy is to make extrapolations based on present trends continuing.

We study first two approaches in this chaper.

*Label: “Approvals” *Period: Mar 1996 to Sep 2006 *Data: values *Any Transformation in the Data: Mean *Type: Total Dwellings Approved *Unit: Number *Frequency: Quarterly *Start of Frequency: Mar- May *End of Frequency: Jul-Sep

*Label: “Activity” *Period: Mar 1996 to Sep 2006 *Data: values *Any Transformation in the Data: Mean *Type: Value of Work Done *Unit: Miilions of Australian Dollars *Frequency: Quarterly *Start of Frequency: Mar- May *End of Frequency: Jul-Sep

```
Build.dat <- read.table("ts/ApprovActiv.dat", header=T) ; attach(Build.dat)
App.ts <- ts(Approvals, start = c(1996,1), freq=4)
Act.ts <- ts(Activity, start = c(1996,1), freq=4)
ts.plot(App.ts, Act.ts, lty = c(1,3))
```

We can see that Acvity lags one quarter behind approvals. Or Approvals lead the building activity by one quarter.

The Cross Correlation function can be used to quantify this relationship.

We draw it as follows:

`acf(ts.union(App.ts,Act.ts))`

Here we see in the upper right graph between App.ts and Act.ts that the cross correlation is about 0.35.Lets see the cross correlation after removing trend and seasonality. The left bottom graph is between Act.ts and App.ts

```
app.ran <- decompose(App.ts)$random
app.ran.ts <- window (app.ran, start = c(1996, 3) )
act.ran <- decompose (Act.ts)$random
act.ran.ts <- window (act.ran, start = c(1996, 3) )
```

Now we plot acf of cross correlation. Remember to take the action about NA Values, it passes through missing values.

`acf(ts.union(app.ran.ts,act.ran.ts),na.action=na.pass)`

`ccf(app.ran.ts,act.ran.ts,na.action=na.pass)`

You can print the values using print()function

`print(ccf(app.ran.ts,act.ran.ts,na.action=na.pass))`

```
##
## Autocorrelations of series 'X', by lag
##
## -3.25 -3.00 -2.75 -2.50 -2.25 -2.00 -1.75 -1.50 -1.25 -1.00
## -0.147 0.271 0.272 -0.042 -0.087 -0.002 -0.050 -0.031 -0.124 -0.336
## -0.75 -0.50 -0.25 0.00 0.25 0.50 0.75 1.00 1.25 1.50
## -0.164 0.497 0.699 0.144 -0.380 -0.409 -0.247 0.084 0.346 0.056
## 1.75 2.00 2.25 2.50 2.75 3.00 3.25
## -0.187 0.060 0.142 -0.080 -0.225 -0.115 0.161
```

** Bass Model Please refere to the theory [here] (https://myanalyticsnotes.blogspot.com/2020/03/bass-model-for-forecasting.html) Let us say we are given the sales of VCR from 79 -89. We are to fit a bass curve between 80-89 ( we use 79 as t-1) (T79)

`T79 <- 1:10`

For plotting the curve we divide it every year in 10 parts by dividing by 10 ( Tdelt)

`Tdelt <- (1:100)/10`

Let sales be as follows:

`Sales <- c(840,1470,2110,4000,7590,10950,10530,9470,7790,5890)`

Now we calculate as follows: NLS- Non linear least square uses a relative-offset convergence criterion that compares the numerical imprecision at the current parameter estimates to the residual sum-of-squares ** NLS functions to obtain three parameters from one equation

```
Cusales <- cumsum(Sales)
Bass.nls <- nls(Sales ~ M * ( ((P+Q)^2 / P) * exp(-(P+Q) * T79) ) /(1+(Q/P)*exp(-(P+Q)*T79))^2, start = list(M=60630, P=0.03, Q=0.38))
summary(Bass.nls)
```

```
##
## Formula: Sales ~ M * (((P + Q)^2/P) * exp(-(P + Q) * T79))/(1 + (Q/P) *
## exp(-(P + Q) * T79))^2
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## M 6.798e+04 3.128e+03 21.74 1.10e-07 ***
## P 6.594e-03 1.430e-03 4.61 0.00245 **
## Q 6.381e-01 4.140e-02 15.41 1.17e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 727.2 on 7 degrees of freedom
##
## Number of iterations to convergence: 8
## Achieved convergence tolerance: 7.323e-06
```

Thus we have got the value of M, P and Q as M= 679800, p=0.006 and q = 0.64 respectively. Now we can plot the curve

```
Bcoef <- coef(Bass.nls)
m <- Bcoef[1]
p <- Bcoef[2]
q <- Bcoef[3]
ngete <- exp(-(p+q) * Tdelt)
Bpdf <- m * ( (p+q)^2 / p ) * ngete / (1 + (q/p) * ngete)^2
plot(Tdelt, Bpdf, xlab = "Year from 1979",
ylab = "Sales per year", type='l')
points(T79, Sales)
```

We can plot cumulative Sales as follows:

```
Bcdf <- m * (1 - ngete)/(1 + (q/p)*ngete)
plot(Tdelt, Bcdf, xlab = "Year from 1979",
ylab = "Cumulative sales", type='l')
points(T79, Cusales)
```

Similarly we can forecast using the method given [here] (https://myanalyticsnotes.blogspot.com/2020/03/bass-model-for-forecasting.html) and plot the curve using above method.