Our assignment is to analyze the case for Wilkins, A Zurn Company: Demand Forecasting and deliver a report.
THE PROBLEM: On Monday, January 10, 2005, as Bernie Barge, the newly promoted inventory manager at Wilkins plat in Paso robles, California, prepared for the forecasting meeting scheduled for the following day, he wondered whether he could find an easier and possibly more reliable means of forecasting the sales demand. Barnie is faced with the managerial issue of determining whether there is a statistical approach or a combination of approaches that could improve forecast accuracy and expediency.
KEY QUESTIONS: 1. What is the current forecasting method of demand used by the company? How accurate was the demand forecast for the first quarter of 2005 for overall PVB product family (not individual but total PVB product line)? (5 points) What are the consequences, if any, if the forecast is inaccurate?
Is the demand for PVB product family (total) and fire valve have any relationship with the unemployment rate, the bank prime loan rate and the number of housing starts? How does this relationship affect the PVB product family demand?
Create a demand forecast for the PVB product family (total) for the next three quarters of 2005. 3A. What type of trend and seasonal pattern of demand do you find in the data for PVB? 3B. Can you isolate the trend estimate with a linear regression model with Y = quarterly demand for PVB and X=quarters by year? What is the R-square? Is the model significant? What will you infer from the coefficient (Beta) estimate of the regression model? 3C. What do the ACF and PACF visuals indicate for the PVB product forecast? 3D. Compare the naiive demand forecast (5 points) with the moving average (2 quarter) (5 points), and an ARIMA model ? How does the ARIMA model compare with the estimate from the current forecasting method? Is it better to develop an overall time series forecast for the PVB product family or should you develop models for each individual product (e.g., PVB 12-720; PVB 34-720)
As Barnie Barge, what would you recommend to management and why? How should barge convince management to follow his recommendations?
library(readxl)
library(ggplot2)
library(dplyr)
library(forecast)
library(tseries)
#Load in data
sales_history_PVB = read_excel('WILKINS CASE DATA -PROJECT3.xls', sheet = 'sales_history_PVB')
#Add new column for type Date
sales_history_PVB$DATE <- as.Date(sales_history_PVB$Date, "%yyyy/%mm/%dd")
Warning: unknown timezone '%yyyy/%mm/%dd'
#### Exploratory Data Analysis
summary(sales_history_PVB)
Year Qtr Date
Min. :2001 Min. :1.000 Min. :2001-01-01 00:00:00.00
1st Qu.:2002 1st Qu.:1.000 1st Qu.:2002-01-01 00:00:00.00
Median :2003 Median :2.000 Median :2003-01-01 00:00:00.00
Mean :2003 Mean :2.412 Mean :2002-12-31 09:52:56.47
3rd Qu.:2004 3rd Qu.:3.000 3rd Qu.:2004-01-01 00:00:00.00
Max. :2005 Max. :4.000 Max. :2005-01-01 00:00:00.00
PVB\n12-720 PVB\n34-720 PVB\n1-720 PVB\n34-420
Min. :1788 Min. : 6716 Min. : 9824 Min. : 384
1st Qu.:2516 1st Qu.:11270 1st Qu.:13851 1st Qu.: 6968
Median :3666 Median :13310 Median :21848 Median : 7397
Mean :4291 Mean :15787 Mean :26437 Mean : 7509
3rd Qu.:5948 3rd Qu.:19535 3rd Qu.:31507 3rd Qu.: 9026
Max. :7823 Max. :28020 Max. :66644 Max. :11233
PVB\n1-420 Total DATE
Min. : 842 Min. : 27512 Min. :2001-01-01
1st Qu.:3050 1st Qu.: 43858 1st Qu.:2002-01-01
Median :4676 Median : 53198 Median :2003-01-01
Mean :5053 Mean : 59079 Mean :2002-12-31
3rd Qu.:6454 3rd Qu.: 75219 3rd Qu.:2004-01-01
Max. :9676 Max. :122868 Max. :2005-01-01
str(sales_history_PVB)
tibble [17 × 10] (S3: tbl_df/tbl/data.frame)
$ Year : num [1:17] 2001 2001 2001 2001 2002 ...
$ Qtr : num [1:17] 1 2 3 4 1 2 3 4 1 2 ...
$ Date : POSIXct[1:17], format: "2001-01-01" "2001-04-01" ...
$ PVB
12-720: num [1:17] 2108 2516 2954 2224 1788 ...
$ PVB
34-720: num [1:17] 6716 11510 18438 10456 9464 ...
$ PVB
1-720 : num [1:17] 10688 21688 40814 19510 9824 ...
$ PVB
34-420: num [1:17] 7158 7034 9026 7254 6968 ...
$ PVB
1-420 : num [1:17] 842 3050 5736 4414 2536 ...
$ Total : num [1:17] 27512 45798 76968 43858 30580 ...
$ DATE : Date[1:17], format: "2001-01-01" "2001-04-01" ...
sales_history_PVB = sales_history_PVB %>% select(c(DATE, Total))
sales_history_PVB$Total
[1] 27512 45798 76968 43858 30580 53198 88704 51590 35372 57840
[11] 93388 58906 39382 75219 122868 54996 48159
sales_history_PVB$DATE
[1] "2001-01-01" "2001-04-01" "2001-07-01" "2001-10-01" "2002-01-01"
[6] "2002-04-01" "2002-07-01" "2002-10-01" "2003-01-01" "2003-04-01"
[11] "2003-07-01" "2003-10-01" "2004-01-01" "2004-04-01" "2004-07-01"
[16] "2004-10-01" "2005-01-01"
#Create time series object
#Note: company's fiscal quarter begins in Sept or Oct?
PVB_ts = ts(sales_history_PVB$Total, start = c(2001,1), frequency=4)
start(PVB_ts) #Check start date
[1] 2001 1
end(PVB_ts) #Check end date
[1] 2005 1
class(PVB_ts) #Check class
[1] "ts"
# 3a: What type of trend and seasonal pattern of demand do you find in the data for PVB?
#Start with displaying all of the data; can see the data is multiplicative
plot(PVB_ts) #actual data; it is multiplicative - need to know this for decomposition
tsdisplay(PVB_ts)
#Now complete the decomposition
component.tsm = decompose(PVB_ts, type="multiplicative", filter=NULL)
plot(component.tsm)
#Test if time series is stationary using Augmented Dickey-Fuller Test
adf.test(PVB_ts) #Lag order = 2
Warning: p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: PVB_ts
Dickey-Fuller = -6.6546, Lag order = 2, p-value = 0.01
alternative hypothesis: stationary
#Since the p-value is 0.01, which is less than 0.05, we reject the null in
#favor of alternative that the series is stationary
#A stationary time series has conditions that the mean, variance and covariance are not functions of time
#In order to fit ARIMA models, the time series is required to be stationary.
#### CREATE LINEAR REGRESSION -- QUESTION 3B
# 3b: Can you isolate the trend estimate with a linear regression model
# with Y = quarterly demand for PVB and X=quarters by year?
# What is the R-square? Is the model significant?
# What will you infer from the coefficient (Beta) estimate of the regression model?
#Build linear regression
#Y=quarterly demand for PVB
#X=quarters by year
#If you are using multiplicative decomposition, need to use the log of the variable (from sample code)
reg_model = lm(log(PVB_ts) ~ time(PVB_ts))
summary(reg_model)
Call:
lm(formula = log(PVB_ts) ~ time(PVB_ts))
Residuals:
Min 1Q Median 3Q Max
-0.4547 -0.3770 -0.0187 0.1630 0.6224
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -240.4225 152.2228 -1.579 0.135
time(PVB_ts) 0.1255 0.0760 1.651 0.119
Residual standard error: 0.3838 on 15 degrees of freedom
Multiple R-squared: 0.1538, Adjusted R-squared: 0.09737
F-statistic: 2.726 on 1 and 15 DF, p-value: 0.1195
#### ACF and PACF
# 3c: What do the ACF and PACF visuals indicate for the PVB product forecast?
Acf(PVB_ts)
Pacf(PVB_ts)
forecast::tsdisplay(PVB_ts) #Same plot as above
#ACF plot tells us the order of an MA model; observe lags at 2 & 4; 4 is the cutoff -- MA(4)
#PACF plot tells us the order of an AR model; observe lag at 2 -- AR(2)
#The Ljung-Box test tests whether any of a group of autocorrelations of a time series are different from zero.
#In essence it tests the “overall randomness” based on a number of lags.
#If the result is a small p-value than it indicates the data is probably not white noise.
Box.test(PVB_ts, lag=2, fitdf=0, type="Lj") #this is the lag that came up in the adf test
Box-Ljung test
data: PVB_ts
X-squared = 7.1879, df = 2, p-value = 0.02749
Box.test(PVB_ts, lag=5, fitdf=0, type="Lj")
Box-Ljung test
data: PVB_ts
X-squared = 16.728, df = 5, p-value = 0.005046
Box.test(PVB_ts, lag=10, fitdf=0, type="Lj")
Box-Ljung test
data: PVB_ts
X-squared = 36.006, df = 10, p-value = 8.397e-05
Box.test(PVB_ts, lag=15, fitdf=0, type="Lj")
Box-Ljung test
data: PVB_ts
X-squared = 44.659, df = 15, p-value = 8.667e-05
#p-values are small, so we can reject the null -- our data is not white noise
#### BUILD MODELS
# 3d: Compare the naive demand forecast with the moving average (2 quarter) and an ARIMA model?
### NAIVE MODEL
#Naive Forecasting Method
naive_model <- naive(PVB_ts, 3) # 3 because we are forecasting for the next 3 quarters
summary(naive_model)
Forecast method: Naive method
Model Information:
Call: naive(y = PVB_ts, h = 3)
Residual sd: 33107.763
Error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 1290.438 33107.76 29844.81 -9.757737 50.54563 3.375934 -0.1215998
Forecasts:
autoplot(naive_model)
#Check for fitted values and residuals
checkresiduals(naive_model)
Ljung-Box test
data: Residuals from Naive method
Q* = 9.1956, df = 3, p-value = 0.0268
Model df: 0. Total lags used: 3
### MOVING AVERAGE (2 quarter)
autoplot(PVB_ts, series = "Data") +
autolayer(ma(PVB_ts, order = 2, centre = TRUE), series = "2x2-MA") +
labs(x = "Year", y = "Sales") +
ggtitle("2x2 moving average of PVB sales")
auto_ma <- ma(PVB_ts, 2)
auto_ma
Qtr1 Qtr2 Qtr3 Qtr4
2001 NA 49019.00 60898.00 48816.00
2002 39554.00 56420.00 70549.00 56814.00
2003 45043.50 61110.00 75880.50 62645.50
2004 53222.25 78172.00 93987.75 70254.75
2005 NA
#### ARIMA model
#Iteration 1 - AR(2)
fit1 <-arima(PVB_ts, order=c(2,0,0))
plot(residuals(fit1))
Acf(residuals(fit1))
Pacf(residuals(fit1))
summary(fit1)
Call:
arima(x = PVB_ts, order = c(2, 0, 0))
Coefficients:
ar1 ar2 intercept
0.0953 -0.5991 60440.419
s.e. 0.2005 0.1834 3232.553
sigma^2 estimated as 3.62e+08: log likelihood = -192.08, aic = 392.16
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -1023.536 19027.15 15040.92 -11.88619 29.02265 0.5039708 0.2038976
#Results: AIC = 392.16; RMSE = 19027.15
#Iteration 2 - MA(4)
fit2 <-arima(PVB_ts, order=c(0,0,4))
plot(residuals(fit2))
Acf(residuals(fit2))
Pacf(residuals(fit2))
summary(fit2)
Call:
arima(x = PVB_ts, order = c(0, 0, 4))
Coefficients:
ma1 ma2 ma3 ma4 intercept
0.3812 -0.3992 0.3812 0.9998 60657.353
s.e. 0.3890 0.2955 0.3997 0.4447 7220.112
sigma^2 estimated as 191299290: log likelihood = -189.67, aic = 391.34
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 767.5436 13831.1 11067.37 -6.678844 19.76051 0.3708305 -0.08084787
#Results: AIC = 391.34; RMSE = 13831.1
#Iteration 3 -
fit3 <-arima(PVB_ts, order=c(0,0,4), seasonal=list(order=c(0,0,1)))
plot(residuals(fit3))
Acf(residuals(fit3))
Pacf(residuals(fit3))
summary(fit3)
Call:
arima(x = PVB_ts, order = c(0, 0, 4), seasonal = list(order = c(0, 0, 1)))
Coefficients:
ma1 ma2 ma3 ma4 sma1 intercept
0.2555 -0.2536 0.5739 0.7538 0.7819 60632.833
s.e. 0.4429 0.3256 0.4680 0.4500 0.8415 9551.795
sigma^2 estimated as 123317852: log likelihood = -187.78, aic = 389.56
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 1165.409 11104.86 8338.942 -3.74658 14.35721 0.2794101 -0.1562031
#Results: AIC = 389.56; RMSE = 11104.86
#Iteration 4 -
fit4 <-arima(PVB_ts, order=c(0,0,4), seasonal=list(order=c(0,1,0)))
plot(residuals(fit4))
Acf(residuals(fit4))
Pacf(residuals(fit4))
summary(fit4)
Call:
arima(x = PVB_ts, order = c(0, 0, 4), seasonal = list(order = c(0, 1, 0)))
Coefficients:
ma1 ma2 ma3 ma4
0.4968 0.2036 0.8455 0.1400
s.e. 0.8744 0.5989 0.8464 0.4531
sigma^2 estimated as 63923621: log likelihood = -136.95, aic = 283.89
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 2345.542 6991.666 4400.854 2.676091 6.546246 0.1474579 -0.1111456
#Results: AIC = 283.89; RMSE = 6991.666
#Iteration 5 -
fit5 <-arima(PVB_ts, order=c(2,0,0), seasonal=list(order=c(0,1,0)))
plot(residuals(fit5))
Acf(residuals(fit5))
Pacf(residuals(fit5))
summary(fit5)
Call:
arima(x = PVB_ts, order = c(2, 0, 0), seasonal = list(order = c(0, 1, 0)))
Coefficients:
ar1 ar2
0.3326 0.2387
s.e. 0.2638 0.2647
sigma^2 estimated as 92051434: log likelihood = -137.81, aic = 281.61
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 2900.554 8390.048 5070.453 3.343487 7.357987 0.1698939 -0.1667136
#Results: AIC = 281.61; RMSE = 8390.048
#Iteration 6 -
fit6 <-arima(PVB_ts, order=c(2,0,4), seasonal=list(order=c(0,1,0)))
plot(residuals(fit6))
Acf(residuals(fit6))
Pacf(residuals(fit6))
summary(fit6)
Call:
arima(x = PVB_ts, order = c(2, 0, 4), seasonal = list(order = c(0, 1, 0)))
Coefficients:
ar1 ar2 ma1 ma2 ma3 ma4
-0.7031 -0.2956 1.2965 0.8210 1.2969 0.9980
s.e. 0.3518 0.5331 3.3695 1.5585 1.4193 3.5329
sigma^2 estimated as 46879758: log likelihood = -136.59, aic = 287.17
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 2458.848 5987.475 3943.108 3.153641 5.888834 0.1321204 -0.136925
#Results: AIC = 287.17; RMSE = 5987.475
#Build an ARIMA MODEL using auto.arima() function
arima_auto <-auto.arima(PVB_ts, seasonal = TRUE)
summary(arima_auto)
Series: PVB_ts
ARIMA(0,0,0)(0,1,0)[4] with drift
Coefficients:
drift
2059.7308
s.e. 536.6513
sigma^2 = 64894985: log likelihood = -134.85
AIC=273.7 AICc=274.9 BIC=274.83
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 10.20815 6768.177 4059.186 -2.281138 6.381775 0.4591599 -0.0969862
Acf(residuals(arima_auto))
Pacf(residuals(arima_auto))
#ARIMA(0,0,0)(0,1,0)[4] with drift
#Results: AIC = 273.7; BIC = 274.83; RMSE = 6768.177
plot.ts(arima_auto$residuals)
#### FORECASTING
# Create a demand forecast for the PVB product family (total) for the next three quarters of 2005.
#Plot the forecast of the time series using the forecast function, with a 95% confidence interval
#where h is the forecast horizon in months (you can write h=5*12 or 60)
arima_forecast<-forecast(arima_auto, level=c(95), h=12)
autoplot(arima_forecast)+labs(x="Time", y="Sales")
NA
NA
NA
# Read the external factors data
unemployment_rate <- read_excel("WILKINS CASE DATA -PROJECT3.xls", sheet = "quarterly_unemply")
bank_prime_loan_rate <- read_excel("WILKINS CASE DATA -PROJECT3.xls", sheet = "quarterly_bankloan")
housing_starts <- read_excel("WILKINS CASE DATA -PROJECT3.xls", sheet = "housing")
# Read the sales history for fire valves
sales_history_firevalve <- read_excel("WILKINS CASE DATA -PROJECT3.xls", sheet = "sales_history_firevalve")
# Merge the sales history for PVB and fire valves
merged_sales <- merge(sales_history_PVB, sales_history_firevalve, by = c("Year", "Qtr"))
summary(merged_sales)
Year Qtr Date P12720
Min. :2001 Min. :1.000 Min. :2001-01-01 00:00:00.00 Min. :1788
1st Qu.:2002 1st Qu.:1.000 1st Qu.:2002-01-01 00:00:00.00 1st Qu.:2516
Median :2003 Median :2.000 Median :2003-01-01 00:00:00.00 Median :3666
Mean :2003 Mean :2.412 Mean :2002-12-31 09:52:56.47 Mean :4291
3rd Qu.:2004 3rd Qu.:3.000 3rd Qu.:2004-01-01 00:00:00.00 3rd Qu.:5948
Max. :2005 Max. :4.000 Max. :2005-01-01 00:00:00.00 Max. :7823
P34710 P1720 P34420 P1420 total
Min. : 6716 Min. : 9824 Min. : 384 Min. : 842 Min. : 27512
1st Qu.:11270 1st Qu.:13851 1st Qu.: 6968 1st Qu.:3050 1st Qu.: 43858
Median :13310 Median :21848 Median : 7397 Median :4676 Median : 53198
Mean :15787 Mean :26437 Mean : 7509 Mean :5053 Mean : 59079
3rd Qu.:19535 3rd Qu.:31507 3rd Qu.: 9026 3rd Qu.:6454 3rd Qu.: 75219
Max. :28020 Max. :66644 Max. :11233 Max. :9676 Max. :122868
DATE FVZ2 FVZ3 FVZ3L
Min. :2001-01-01 Min. : 18.00 Min. : 57.0 Min. :-35.00
1st Qu.:2002-01-01 1st Qu.: 54.00 1st Qu.:108.0 1st Qu.: 1.00
Median :2003-01-01 Median : 79.00 Median :150.0 Median : 3.00
Mean :2002-12-31 Mean : 95.35 Mean :161.8 Mean : 28.76
3rd Qu.:2004-01-01 3rd Qu.:124.00 3rd Qu.:213.0 3rd Qu.: 49.00
Max. :2005-01-01 Max. :224.00 Max. :301.0 Max. :140.00
FVZ34 FVZ34L Total
Min. : 15.00 Min. : 22.00 Min. :137.0
1st Qu.: 25.00 1st Qu.: 42.00 1st Qu.:331.0
Median : 35.00 Median : 67.00 Median :370.0
Mean : 43.47 Mean : 71.53 Mean :400.4
3rd Qu.: 50.00 3rd Qu.: 90.00 3rd Qu.:497.0
Max. :144.00 Max. :170.00 Max. :590.0
# Calculate correlations between demand and external factors for PVB
correlation_PVB <- lapply(merged_sales[, c("P12720", "P34710", "P1720", "P34420", "P1420")], function(demand_var) {
cor.test(demand_var, unemployment_rate$Rate)$estimate
})
# Calculate correlations between demand and external factors for fire valves
correlation_firevalve <- lapply(merged_sales[, c("FVZ2", "FVZ3", "FVZ3L", "FVZ34", "FVZ34L")], function(demand_var) {
cor.test(demand_var, unemployment_rate$Rate)$estimate
})
# Print the correlations for PVB
print(correlation_PVB)
$P12720
cor
0.4804573
$P34710
cor
0.2711253
$P1720
cor
0.1987313
$P34420
cor
0.08231514
$P1420
cor
0.491884
# Print the correlations for fire valves
print(correlation_firevalve)
$FVZ2
cor
-0.09018576
$FVZ3
cor
-0.165385
$FVZ3L
cor
0.2181199
$FVZ34
cor
-0.4012538
$FVZ34L
cor
0.1858662
#PLOTS
# Create a data frame for PVB correlations
correlation_data_PVB <- data.frame(Factor = names(correlation_PVB), Correlation = unlist(correlation_PVB))
# Plot correlations for PVB
ggplot(correlation_data_PVB, aes(x = Factor, y = Correlation)) +
geom_bar(stat = "identity", fill = "blue") +
labs(x = "Factor", y = "Correlation", title = "Correlations between PVB Demand and Unemployment Rate")
# Create a data frame for fire valve correlations
correlation_data_firevalve <- data.frame(Factor = names(correlation_firevalve), Correlation = unlist(correlation_firevalve))
# Plot correlations for fire valves
ggplot(correlation_data_firevalve, aes(x = Factor, y = Correlation)) +
geom_bar(stat = "identity", fill = "red") +
labs(x = "Factor", y = "Correlation", title = "Correlations between Fire Valve Demand and Unemployment Rate")
NA
NA
The correlation results indicate the strength and direction of the relationships between the demand for PVB products and fire valves and the selected external factors (unemployment rate, bank prime loan rate, and housing starts). Insights gained:
For PVB products:
P12720 (PVB 12-720): There is a moderate positive correlation (0.480) between the demand for PVB 12-720 products and the selected external factors. This suggests that as the external factors increase, the demand for PVB 12-720 products tends to increase. An intuition Barge mentioned.
P34710 (PVB 34-720): There is a weak positive correlation (0.271) between the demand for PVB 34-720 products and the external factors. The relationship is not as strong as with PVB 12-720 products.
P1720 (PVB 1-720): There is a weak positive correlation (0.199) between the demand for PVB 1-720 products and the selected external factors. The relationship is weaker compared to PVB 12-720 products.
P34420 (PVB 34-420): There is a very weak positive correlation (0.082) between the demand for PVB 34-420 products and the selected external factors.
P1420 (PVB 1-420): There is a moderate positive correlation (0.492) between the demand for PVB 1-420 products and the selected external factors. This indicates that as the external factors increase, the demand for PVB 1-420 products tends to increase.
For Fire Valves:
FVZ2 (Fire Valve Z2105): There is a weak negative correlation (-0.090) between the demand for Fire Valve Z2105 and the selected external factors. This suggests that as the external factors increase, the demand for Fire Valve Z2105 tends to decrease slightly.
FVZ3 (Fire Valve Z3000): There is a weak negative correlation (-0.165) between the demand for Fire Valve Z3000 and the selected external factors.
FVZ3L (Fire Valve Z3000IL): There is a weak positive correlation (0.218) between the demand for Fire Valve Z3000IL and the selected external factors. This indicates that as the external factors increase, the demand for Fire Valve Z3000IL also tends to increase slightly.
FVZ34 (Fire Valve Z3004): There is a moderate negative correlation (-0.401) between the demand for Fire Valve Z3004 and the selected external factors. This suggests that as the external factors increase, the demand for Fire Valve Z3004 products tends to decrease.
FVZ34L (Fire Valve Z3004IL): There is a weak positive correlation (0.186) between the demand for Fire Valve Z3004IL and the selected external factors. The relationship is weaker compared to other fire valve products.
Overall, these correlation coefficients provide insights into the relationships between the demand for different products and the external factors. However, it’s important to note that correlation does not imply causation. Further analysis and consideration of other factors are needed to fully understand the dynamics and make accurate predictions or decisions.
The regression analysis provides insights into the relationships between the demand for each product (PVB and fire valves) and the selected external factors (unemployment rate, bank prime loan rate, and housing starts).
For the PVB product family:
P12720: The coefficient estimates suggest that the unemployment rate and bank prime loan rate have a negative impact on the demand for P12720, while housing starts have a positive impact. However, none of the coefficients are statistically significant. The adjusted R-squared value indicates that the external factors explain about 55.08% of the variation in the demand for P12720, which is no better than chance.
P34710: Similar to P12720, the coefficients for the unemployment rate, bank prime loan rate, and housing starts are not statistically significant. The adjusted R-squared value indicates that the external factors explain about 34.33% of the variation in the demand for P34710.
P1720: Once again, the coefficients for the external factors are not statistically significant. The adjusted R-squared value indicates that the external factors explain about 14.06% of the variation in the demand for P1720.
P34420: The coefficients for the external factors are not statistically significant, indicating that these factors may not have a significant impact on the demand for P34420. The adjusted R-squared value is negative, suggesting that the model does not provide a good fit for explaining the variation in the demand for P34420.
P1420: The coefficients for the external factors are not statistically significant. The adjusted R-squared value indicates that the external factors explain about 17.7% of the variation in the demand for P1420.
For the fire valves:
FVZ2, FVZ3, FVZ3L, FVZ34, and FVZ34L: Similar to the PVB products, the coefficients for the external factors are not statistically significant for any of the fire valve products. The adjusted R-squared values indicate that the external factors explain only a small portion of the variation in the demand for fire valves. Overall, the results suggest that the selected external factors may not have a significant impact on the demand for the PVB product family and fire valves. The coefficients are not statistically significant for most of the response variables, indicating that other factors or variables not included in the analysis may play a more significant role in determining the demand for these products.
The analysis found correlations between certain products in the PVB family and fire valves with the external factors. Specifically, the demand for PVB 12-720 and PVB 1-420 products tends to increase as these factors increase. However, the connections for other PVB products and fire valves are generally weak or not important.
On the other hand, the analysis shows that the external factors do not have a big impact on the demand for the PVB family and fire valves. The numbers used to measure this impact are not significant, meaning that these factors may not strongly affect the demand. The analysis also suggests that the external factors explain only a small part of the changes in demand for these products.
Overall, these findings suggest that while some products show some correlations with the external factors, these connections are not strong enough to have a big impact on the demand for the PVB family and fire valves. Other factors that were not considered in this analysis may have a more significant role in determining the demand for these products.