Respondents can overstate behavior changes in an anticipated future share distribution when one or more new products offered. In this tutorial we demonstrate how a scale question can be used to adjust overstated market share distributions in an exercise called “tempering”.

In this example, we use a data process to calculate a tempered share by reducing the new product shares, and redistributing the reduced shares back into the products that respondents currently use.

## Example questionnaire

A survey asks for current prescribing behavior in **Q100**. Then in **Q200** the survey asks for a new distribution assuming that Product X and Y are available for prescribing. If Product X and Y receive larger market shares than expected, you can use a scale question such as **Q210 **to temper down the stated shares.

**Q100.** Approximate what percentage of the following products do you currently prescribe:

Q100_1 Product A ** %** %

Q100_2 Product B

Q100_3 Product C

**%****Q200.** Should Product X and Product Y be available, what will your future prescribing distribution be:

** Q200_1 Product A ** %

Q200_2 Product B

**%**

**%**

Q200_3 Product CQ200_3 Product C

Q200_4 Product X

**%**

**%**

Q200_5 Product YQ200_5 Product Y

**Q210.** What is your overall likelihood of using Product X and Y

**Q210_1** Product X:

1: Not at all likely

2: Somewhat likely

3: Fairly likely

4: Very likely

**Q210_2** Product Y:

1: Not at all likely

2: Somewhat likely

3: Fairly likely

4: Very likely

## Choose a factor to weight stated shares by

Determine a likelihood factor (%) for each value in **Q210**. For example, if **Q210_1** (Product X) had an average value of “2: Somewhat likely”, then we will temper using a likelihood factor of 25%. We are essentially weighting stated future shares for Product X and Y by their likelihood to prescribe in **Q210**.

__Assumptions__:

1. This is the scale for tempering the shares in **Q200_4** and **Q200_5** based on **Q210_1**, and **Q210_2**:

1 (Not at all likely): 0%

2 (Somewhat likely): 25%

3 (Fairly likely): 50%

4 (Very likely): 75%

2. Tempered shares for Products X and Y are calculated by subtracting tempered future shares (column N) from the stated future shares (column E). The stated current shares (**Q100**) are used to distribute the tempered shares.

(Note - *array* used to distribute shares need to be greater than or equal to zero individually, and sum to a positive number if any shares are to be distributed)

__Calculated Example__:

An example of calculation for one respondent would be:

Below is a sample code for the data process:

## Data process code:

/@method data processTempering calculationsTempering - please find the scale attached belowQ100 - Current distribution (baseline) - use for distributionQ200 - Product X and Y, future distributionQ210 - Likelihood of Product 1 */ // Bring in data var rows = data[‘main’] /@method temper@param PREFIX - to add in front of the redistribution_array and temper_array@param tempering - specifies tempering factor for each possible response in scale_array@param distribution_array - array of column names corresponding to percent of patients on each (current) therapy; used as reference for proportionally redistributing tempered shares..@param redistribution_array - array of column names corresponding to percent of patients on each (current) therapy in a future scenario; these shares will be increased as a result of tempering@param temper_array - array of column names of potential new future therapy; these are the values to be reduce via tempering;@param scale_array - array of column names of physicians’ estimate of likelihood to prescribe new product at allAlgorithm1. calculate the tempering factor for each item in the temper_array using the scale_array and the tempering factor object.The tempering factor object should have attributes for each valid response in the scale array. (e.g. scale array answer ranges from 0 to 10, and the tempering object has the tempering values for each of 0 to 10.)2. Take the items in the temper_array, and reduce them by the tempering factor calculated by 1.3. Calculate the redistribution_total by summing up the reductions in the temper_array due to tempering.4. Distribute the 3. into the redistribution_array based on distribution_array.

Constraint 1: distribution_array and redistribution_array should be the same length,Constraint 2: temper_array and scale_array should be the same lengthConstraint 3: distribution_array should have a non-zero sum

@examplevar prefix = “t_”

var tempering = tempering[‘initial’] // this is an object to interpret the scale arrayvar tempering = {initial: {“1”: 0.00,“2”: 0.25,“3”: 0.50,“4”: 0.75}};var d_array = [“q100_1”,”q100_2”,”q100_3”];var r_array = [“q200_1”,”q200_2”,”q202_3”];var t_array = [“q200_4”,”q204_5”];var s_array = [“q210_1”,”q210_2”];/ function temper(row, PREFIX, tempering, distribution_array, redistribution_array, temper_array, scale_array) { var distribution_length = distribution_array.length var temper_length = temper_array.length var redistribution_total = 0; var distribution_total = 0 // calculate total for the distribution total. Need to make sure that The amount is non-zero, or else tempering amount should be left as NAs. for (d=0;d<distribution_length;d++){ distribution_total = distribution_total + (+row[distribution_array[d]] || 0) } if (distribution_total >0) { for (t=0; t<temper_length; t++ ){ var tempering_factor = tempering[row[scale_array[t]]] if (typeof tempering_factor == ‘undefined’) console.log(“blank tempering factor”, t, scale_array[t],temper_array[t], row[scale_array[t]], row[temper_array[t]],row.respid); row[PREFIX + temper_array[t]] = (+row[temper_array[t]]tempering_factor) || 0; if (typeof row[PREFIX + temper_array[t]] == ‘undefined’) console.log(“tempered undefined”, PREFIX + temper_array[t], row[temper_array[t]],tempering_factor) redistribution_total += +row[temper_array[t]] - (+row[PREFIX + temper_array[t]]); } for (d=0;d<distribution_length;d++){ row[PREFIX + redistribution_array[d]] = +row[redistribution_array[d]] + (row[distribution_array[d]]||0)/distribution_totalredistribution_total; if (typeof row[PREFIX + redistribution_array[d]] == ‘undefined’) console.log(“redistribution undefined”, PREFIX + redistribution_array[d], row[redistribution_array[d]],(row[distribution_array[d]]||0)/distribution_total,redistribution_total) } }

} var tempering = { initial: { “1”: 0.00, “2”: 0.25, “3”: 0.50, “4”: 0.75 } }; rows.forEach(function(row){ // Setup tempering arrays. Could create multiple sets:

var Q200_d_array = [“q100_1”,”q100_2”,”q100_3”]; var Q200_r_array = [“q200_1”,”q200_2”,”q200_3”]; var Q200_t_array = [“q200_4”,”q200_5”]; var Q200_s_array = [“q210_1”,”q210_2”]; // Run temper calculation to create t_Q200 temper(row, ‘t_’, tempering[‘initial’], Q200_d_array, Q200_r_array, Q200_t_array, Q200_s_array) }) return rows;