Using the above parameter estimates, the following formulas will be utilized in the market share model to predict short-term market criteria:
BA = 60/(1+e^–(-2.443+0.011(DAR*AF)) )
IP = 55/(1+e^–(-3.301+(0.026*BA)+(0.002*(DN*PK))+(-0.145*FB)+(0.028*CU)) )
RR = 1.149+(2.768*ln(IP))+(-0.0309*ln(PS))+(0.836*ln(PF))+(0.585*ln(RP))
MS = -11.364+(1.892*RR)
Long-Term Projections
In order to predict long-term criteria, the market predicted market share will be integrated into the following net-profit function and overall value functions:
Net Profit Function
NP = GM – AM – D – A
GM = S – CGS
CGS = SU * C
S = SU * P
SU = MS * I
D = TD/Y
TD = O – R
O = SV3 * CPU
R = ARV * O
Where:
NP = Net Profit
GM = Gross Margin
AM = Administration and Marketing Expenses
(Year 1 = $22,731,000, with a 3% annual increase)
D = Depreciation
A = Advertising in dollars
S = Sales in dollars (expected annual increase = 5%)
CGS = Cost per Goods Sold (expected annual increase = 5%)
SU = Sales in Units
C = Cost per case ($13.61)
P = Price ($28.30)
MS = Market Share
I = Industry Sales ($14,335,000)
TD = Total Depreciation
Y = Number of Years the Depreciation will be Spread Out Over (# = 3)
O = Original Value of the Plant
R = Residual Value of the Plant
SV3 = Sales Volume for Year 3 (i.e. highest expected amount of sales)
CPU = Cost per Unit to Remodel Plant ($2.50)
ARV = Assumed Residual Value (50% or 0.5)
Overall Value Functions
PV = NP1 * (1/0.08^1) + NP2 * (1/0.08^2) + NP3 * (1/0.08^3)
NPV = PV – R
NPC = NP1 + NP2 + NP3
Where:
PV = Present Value
NP1 = Net Profits for Year 1
NP2 = Net Profits for Year 2
NP3 = Net Profits for Year 3
NPV = Net Present Value
R = Residual Value of the Plant
NPC = Net Profit Cumulated over 3 Years
(Back to Table of Contents)
Prediction
The above market share model, net profit function and overall value functions have been integrated into the following Java applet:
Code for Java applet:
package multiple_criteria;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.text.*;
import java.lang.*;
import javax.swing.*;
import java.util.*;
/**
* <p>Title: Multiple Criteria Budgeting Model</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author J.D.Leckenby
* @version 1.0
*/
public class multiple_criteria extends Applet {
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.getDefault());
NumberFormat notcurrency = NumberFormat.getInstance(Locale.getDefault());
double ba,dar,af,ip,dn,pk,fb,cu,rr,ps,pf,rp,ms;
double salesvol,salesvol3,salesdol1,salesdol2,salesdol3,cgs1,cgs2,cgs3;
double gm1,gm2,gm3,x1,x2,x3,admin1,admin2,admin3;
double cplant,resid,totdep,dept,adv1,adv2,adv3,y1,y2,y3,np1,np2,np3,z1,z2,z3,pv,npv,np,dep,adv;
private boolean isStandalone = false;
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JTextField jTextFieldDar = new JTextField();
JTextField jTextFieldAf = new JTextField();
JTextField jTextFieldPk = new JTextField();
JTextField jTextFieldDn = new JTextField();
JTextField jTextFieldFb = new JTextField();
JTextField jTextFieldCu = new JTextField();
JTextField jTextFieldPs = new JTextField();
JTextField jTextFieldPf = new JTextField();
JTextField jTextFieldRp = new JTextField();
JTextField jTextFieldAdv = new JTextField();
JLabel jLabel3 = new JLabel();
JLabel jLabel4 = new JLabel();
JLabel jLabel5 = new JLabel();
JLabel jLabel6 = new JLabel();
JLabel jLabel7 = new JLabel();
JLabel jLabel8 = new JLabel();
JLabel jLabel9 = new JLabel();
JLabel jLabel10 = new JLabel();
JLabel jLabel11 = new JLabel();
JLabel jLabel12 = new JLabel();
JLabel jLabel13 = new JLabel();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextAreaResults = new JTextArea();
JButton jButtonGo = new JButton();
JLabel jLabel14 = new JLabel();
JTextField jTextFieldAdv2 = new JTextField();
JLabel jLabel15 = new JLabel();
JTextField jTextFieldAdv3 = new JTextField();
JLabel jLabel16 = new JLabel();
//Get a parameter value
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
//Construct the applet
public multiple_criteria() {
}
//Initialize the applet
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
jLabel1.setBackground(Color.gray);
jLabel1.setFont(new java.awt.Font("Dialog", 1, 24));
jLabel1.setBorder(BorderFactory.createLoweredBevelBorder());
jLabel1.setDebugGraphicsOptions(0);
jLabel1.setText("Multiple Criteria Budgeting Model");
jLabel1.setBounds(new Rectangle(220, 5, 392, 36));
this.setBackground(SystemColor.text);
this.setLayout(null);
jLabel2.setFont(new java.awt.Font("Dialog", 1, 16));
jLabel2.setText("Inputs:");
jLabel2.setBounds(new Rectangle(42, 75, 63, 29));
jTextFieldDar.setText("");
jTextFieldDar.setBounds(new Rectangle(108, 169, 70, 16));
jTextFieldAf.setText("");
jTextFieldAf.setBounds(new Rectangle(108, 194, 70, 16));
jTextFieldPk.setBounds(new Rectangle(108, 221, 70, 16));
jTextFieldPk.setText("7.0");
jTextFieldDn.setBounds(new Rectangle(108, 245, 70, 16));
jTextFieldDn.setText("50");
jTextFieldFb.setBounds(new Rectangle(108, 266, 70, 16));
jTextFieldFb.setText("1");
jTextFieldCu.setBounds(new Rectangle(108, 292, 70, 16));
jTextFieldCu.setText("77.4");
jTextFieldPs.setBounds(new Rectangle(108, 314, 70, 16));
jTextFieldPs.setText("55.1");
jTextFieldPf.setBounds(new Rectangle(108, 335, 70, 16));
jTextFieldPf.setText("2.1");
jTextFieldRp.setBounds(new Rectangle(108, 357, 70, 16));
jTextFieldRp.setText(".82");
jTextFieldAdv.setText("");
jTextFieldAdv.setBounds(new Rectangle(108, 148, 70, 16));
jLabel3.setText("DAR");
jLabel3.setBounds(new Rectangle(44, 171, 57, 15));
jLabel4.setText("PK");
jLabel4.setBounds(new Rectangle(45, 220, 57, 15));
jLabel5.setBounds(new Rectangle(45, 193, 57, 15));
jLabel5.setText("AF");
jLabel6.setBounds(new Rectangle(44, 245, 57, 15));
jLabel6.setText("DN");
jLabel7.setBounds(new Rectangle(44, 269, 57, 15));
jLabel7.setText("FB");
jLabel8.setBounds(new Rectangle(45, 295, 57, 15));
jLabel8.setText("CU");
jLabel9.setBounds(new Rectangle(44, 314, 57, 16));
jLabel9.setText("PS");
jLabel10.setBounds(new Rectangle(44, 338, 57, 15));
jLabel10.setText("PF");
jLabel11.setBounds(new Rectangle(44, 361, 57, 15));
jLabel11.setText("RP");
jLabel12.setBounds(new Rectangle(44, 148, 57, 15));
jLabel12.setText("ADV$ YR 1");
jLabel13.setBounds(new Rectangle(206, 74, 164, 29));
jLabel13.setText("Projected Results:");
jLabel13.setFont(new java.awt.Font("Dialog", 1, 16));
jScrollPane1.setBounds(new Rectangle(205, 118, 655, 435));
jTextAreaResults.setText("");
jButtonGo.setBounds(new Rectangle(53, 495, 134, 31));
jButtonGo.setText("Execute");
jButtonGo.addActionListener(new multiple_criteria_jButtonGo_actionAdapter(this));
jLabel14.setText("ADV YR 2");
jLabel14.setBounds(new Rectangle(45, 385, 57, 15));
jTextFieldAdv2.setText("");
jTextFieldAdv2.setBounds(new Rectangle(107, 384, 70, 16));
jLabel15.setText("ADV YR 3");
jLabel15.setBounds(new Rectangle(46, 409, 57, 15));
jTextFieldAdv3.setText("");
jTextFieldAdv3.setBounds(new Rectangle(108, 410, 70, 16));
jLabel16.setVerifyInputWhenFocusTarget(true);
jLabel16.setHorizontalAlignment(SwingConstants.LEADING);
jLabel16.setHorizontalTextPosition(SwingConstants.TRAILING);
jLabel16.setText("(Input ADV in millions)");
jLabel16.setVerticalAlignment(SwingConstants.CENTER);
jLabel16.setVerticalTextPosition(SwingConstants.CENTER);
jLabel16.setBounds(new Rectangle(43, 105, 134, 33));
this.add(jLabel1, null);
this.add(jLabel2, null);
this.add(jScrollPane1, null);
this.add(jButtonGo, null);
this.add(jLabel13, null);
this.add(jTextFieldFb, null);
this.add(jLabel12, null);
this.add(jTextFieldAdv3, null);
this.add(jTextFieldAdv2, null);
this.add(jLabel15, null);
this.add(jLabel14, null);
this.add(jLabel11, null);
this.add(jLabel10, null);
this.add(jLabel9, null);
this.add(jLabel8, null);
this.add(jLabel6, null);
this.add(jLabel7, null);
this.add(jLabel4, null);
this.add(jLabel5, null);
this.add(jLabel3, null);
this.add(jTextFieldAdv, null);
this.add(jTextFieldDar, null);
this.add(jTextFieldAf, null);
this.add(jTextFieldPk, null);
this.add(jTextFieldDn, null);
this.add(jTextFieldCu, null);
this.add(jTextFieldPs, null);
this.add(jTextFieldPf, null);
this.add(jTextFieldRp, null);
this.add(jLabel16, null);
jScrollPane1.getViewport().add(jTextAreaResults, null);
}
//Get Applet information
public String getAppletInfo() {
return "Applet Information";
}
//Get parameter info
public String[][] getParameterInfo() {
return null;
}
void jButtonGo_actionPerformed(ActionEvent e) {
//get the input values from the TextField(s)
dar = (Double.valueOf(jTextFieldDar.getText())).doubleValue();
af = (Double.valueOf(jTextFieldAf.getText())).doubleValue();
dn = (Double.valueOf(jTextFieldDn.getText())).doubleValue();
pk = (Double.valueOf(jTextFieldPk.getText())).doubleValue();
cu = (Double.valueOf(jTextFieldCu.getText())).doubleValue();
ps = (Double.valueOf(jTextFieldPs.getText())).doubleValue();
pf = (Double.valueOf(jTextFieldPf.getText())).doubleValue();
rp = (Double.valueOf(jTextFieldRp.getText())).doubleValue();
adv = (Double.valueOf(jTextFieldAdv.getText())).doubleValue();
adv2 = (Double.valueOf(jTextFieldAdv2.getText())).doubleValue();
adv3 = (Double.valueOf(jTextFieldAdv3.getText())).doubleValue();
//below are the three-short term functions
ba = 60/1+Math.exp-(-2.443+(0.011*(DAR*AF)))
ip = 55/1+Math.exp-(-.301+(0.026*BA)+(0.002*(DN*PK))+(0.145*FB)+(0.028*CU))
rr = 1.149+(2.768*Math.log(IP))+(-0.0309*Math.log(PS))+(0.836*Math.log(PF))+(0.585*Math.log(RP))
ms = -11.364+(1.892*RR)
//below are financial calculations
salesvol = 14335000 * ms/100.0;
salesdol1 = 28.30 * salesvol;
salesdol2 = salesdol1 * 1.05;
salesdol3 = salesdol2 * 1.05;
cgs1 = 13.61 * salesvol;
cgs2 = cgs1 * 1.05;
cgs3 = cgs2 * 1.05;
gm1 = salesdol1 - cgs1;
gm2 = salesdol2 - cgs2;
gm3 = salesdol3 - cgs3;
x1 = (gm1/salesdol1) * 100.0;
x2 = (gm2/salesdol2) * 100.0;
x3 = (gm3/salesdol3) * 100.0;
admin1 = 22731000;
admin2 = admin1 * 1.03;
admin3 = admin2 * 1.03;
salesvol3 = salesvol * 1.05 * 1.05;
cplant = salesvol3 * 2.5;
resid = .5 * cplant;
totdep = cplant - resid;
dep = totdep/3.0;
adv1 = adv;
//adv2 = adv1 * .68;
//adv3 = adv2 * .63;
y1 = (adv1/salesdol1) * 100.0;
y2 = (adv2/salesdol2) * 100.0;
y3 = (adv3/salesdol3) * 100.0;
np1 = gm1 - admin1 - dep - adv1;
np2 = gm2 - admin2 - dep - adv2;
np3 = gm3 - admin3 - dep - adv3;
z1 = (np1/salesdol1) * 100.0;
z2 = (np2/salesdol2) * 100.0;
z3 = (np3/salesdol3) * 100.0;
pv = np1 * (1.0/1.08) + np2 * (1.0/Math.pow(1.08,2)) + np3 * (1.0/Math.pow(1.08,3));
npv = pv - resid;
np = np1 + np2 + np3;
//ready to go to output
//short-term output first
jTextAreaResults.append("\n\n\n\n\nProjected Short-Term Results for Solo");
jTextAreaResults.append("\n\n\nBrand Awareness: " + notcurrency.format(ba) + "%");
jTextAreaResults.append("\nInitial Purchase Rate: " + notcurrency.format(ip) + "%");
jTextAreaResults.append("\nRepeat Purchase Rate: " + notcurrency.format(rr) + "%");
jTextAreaResults.append("\nMarket Share: " + notcurrency.format(ms) + "%");
//now, long-term output
jTextAreaResults.append("\n\n\n\nProjected Long-Term Financial Statement");
jTextAreaResults.append("\n\n\t 2005 2006 2007");
jTextAreaResults.append("\n\n===================================================================================");
jTextAreaResults.append("\n\nSales" + "\t\t" + nf.format(salesdol1) + "\t\t" + nf.format(salesdol2) + "\t\t" + nf.format(salesdol3));
jTextAreaResults.append("\nc.g.s." + "\t\t" + nf.format(cgs1) + "\t\t" + nf.format(cgs2) + "\t\t" + nf.format(cgs3));
jTextAreaResults.append("\n\t\t__________________\t__________________\t___________________");
jTextAreaResults.append("\nGM" + "\t\t" + nf.format(gm1) + "\t\t" + nf.format(gm2) + "\t\t" + nf.format(gm3));
jTextAreaResults.append("\nAdmin/Mktg" + "\t" + nf.format(admin1) + "\t\t" + nf.format(admin2) + "\t\t" + nf.format(admin3));
jTextAreaResults.append("\nDepreciation" + "\t" + nf.format(dep) + "\t\t" + nf.format(dep) + "\t\t" + nf.format(dep));
jTextAreaResults.append("\nADV" + "\t\t" + nf.format(adv1 * 1.0e6) + "\t\t" + nf.format(adv2 * 1.0e6) + "\t\t" + nf.format(adv3 * 1.0e6));
jTextAreaResults.append("\n\t\t__________________\t__________________\t___________________");
jTextAreaResults.append("\nNet Profit" + "\t" + nf.format(np1) + "\t\t" + nf.format(np2) + "\t\t" + nf.format(np3));
//now output the present value indicators
jTextAreaResults.append("\n\n\nPresent Value:\t" + nf.format(pv));
jTextAreaResults.append("\nNet Present Value:\t" + nf.format(npv));
jTextAreaResults.append("\nNet Profit 3 Years Cume:\t" + nf.format(np));
}
}
class multiple_criteria_jButtonGo_actionAdapter implements java.awt.event.ActionListener {
multiple_criteria adaptee;
multiple_criteria_jButtonGo_actionAdapter(multiple_criteria adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButtonGo_actionPerformed(e);
}
}