Description Usage Arguments Details Value References See Also Examples
View source: R/psm_functions.R
psm_analysis()
performs an analysis of consumer price
preferences and price sensitivity known as van
Westendorp Price Sensitivity Meter (PSM). It takes respondent's
price preferences (from survey data) as an input and estimates
acceptable price ranges and price points. For a description of
the method see the Details section.
1 2 3 4 5 6 7 8 9 10 
toocheap, cheap, expensive, tooexpensive 
If a
data.frame/matrix/tibble is provided in the If no data.frame/matrix/tibble is provided in the If the 
data 
data.frame, matrix or tibble that contains the
function's input data. 
validate 
logical. should only respondents with consistent price preferences (too cheap < cheap < expensive < too expensive) be considered in the analysis? 
interpolate 
logical. should interpolation of the price curves be applied between the actual prices given by the respondents? If interpolation is enabled, the output appears less bumpy in regions with sparse price information. If the sample size is sufficiently large, interpolation should not be necessary. 
interpolation_steps 
numeric. if 
intersection_method 
"min" (default), "max", "mean" or "median". defines the method how to determine the price points (range, indifference price, optimal price) if there are multiple possible intersections of the price curves. "min" uses the lowest possible prices, "max" uses the highest possible prices, "mean" calculates the mean among all intersections and "median" uses the median of all possible intersections 
pi_cheap, pi_expensive 
Only required for the Newton
Miller Smith extension. If 
pi_scale 
Only required for the Newton Miller Smith extension. Scale of the purchase intent variables pi_cheap and pi_expensive. By default assuming a fivepoint scale with 5 indicating the highest purchase intent. 
pi_calibrated 
Only required for the Newton Miller Smith extension. Calibrated purchase probabilities that are assumed for each value of the purchase intent scale. Must be the same order as the pi_scale variable so that the first value of pi_calibrated corresponds to the first value in the pi_scale variable. Default values are taken from the Sawtooth Software PSM implementation in Excel: 70% for the best value of the purchase intent scale, 50% for the second best value, 30% for the third best value (middle of the scale), 10% for the fourth best value and 0% for the worst value. 
The Price Sensitivity Meter method for the analysis of consumer price preferences was proposed by the Dutch economist Peter van Westendorp in 1976 at the ESOMAR conference. It is a surveybased approach that has become one of the standard price acceptance measurement techniques in the market research industry and is still widely used for during earlystage product development.
Price acceptance and price sensitivity are measured in van Westendorp's approach by four openended survey questions:
At which price on this scale are you beginning to experience ... (testproduct) as cheap?
At which price on this scale are you beginning to experience ... (testproduct) as expensive?
At which price on this scale you are beginning to experience ... (testproduct) as too expensive – so that you would never consider buying it yourself?
At which price on this scale you are beginning to experience ... (testproduct) as too cheap – so that you say "at this price the quality cannot be good"?
Respondents with inconsistent price preferences (e.g. "cheap" price larger than "expensive" price) are usually removed from the data set. This function has builtin checks to detect invalid preference structures and removes those respondents from the analysis by default.
To analyze price preferences and price sensitivity, the method
uses cumulative distribution functions for each of the
aforementioned price steps (e.g. "how many respondents think
that a price of x
or more is expensive?"). By
convention, the distributions for the "too cheap" and the
"cheap" price are inverted. This leads to the interpretation
"how many respondents think that a price of up to
x
is (too) cheap?".
The interpretation is built on the analysis of the intersections of the four cumulative distribution functions for the different prices (usually via graphical inspection). The original paper describes the four intersections as follows:
Point of Marginal Cheapness (MGP): Below this price point, there are more respondents that consider the price as "too cheap" than respondents who consider it as "not cheap" (intersection of "too cheap" and "not cheap"). This is interpreted as the lower limit of the range of acceptable prices.
Point of Marginal Expensiveness (MEP). Above this price point, there are more respondent that consider the price as "too expensive" than there are respondents who consider it as "not expensive" (intersection of "not expensive" and "too expensive"). This is interpreted as the upper limit of the range of acceptable prices.
Indifference Price Point (IDP): The same number of respondents perceives the price as "cheap" and "expensive" (intersection of "cheap" and "expensive"). In van Westendorp's interpretation, this is either the median price paid in the market or the price of an important marketleader.
Optimal Price Point (OPP): The same number of respondents perceives the product as "too cheap" and "too expensive" (intersection of "too cheap" and "too expensive"). van Westendorp argues that this is the value for which the respondents' resistance against the price is particularly low.
Besides those four intersections, van Westendorp's article advises to analyze the cumulative distribution functions for steep areas which indicate price steps.
To analyze trial rates and estimate revenue forecasts,
Newton/Miller/Smith have extended van Westendorp's original
model by adding two purchase intent questions that are asked for
the respondent's "cheap" and "expensive" price. The purchase
probability at the respondent's "too cheap" and "too expensive"
price are defined as 0
. The main logic is that the "too
expensive" price point is prohibitively expensive for the
respondent and a price at the "too cheap" price level raises
doubts about the product quality.
By combining the standard van Westendorp questions with those two additional purchase intent questions, it becomes possible to summarize the purchase probabilities across respondents (using linear interpolation for the purchase probabilities between each respondent's cornerstone prices). The maximum of this curve is then defined as the price point with the highest expected trial rate. Moreover, by multiplying the trial rate with the price, it also becomes possible to estimate a price with the highest expected revenue.
It has to be noted that the van Westendorp Price Sensitivity Meter is useful in some cases, but does not answer every pricingrelated question. It may be a good tool to assess very broadly if the consumers' price perceptions exceed the actual production costs. For more complex analyses (e.g. defining specific prices for different products to avoid cannibalization and drive at the same time incremental growth), other methodological approaches are needed.
The function output consists of the following elements:






























Van Westendorp, P (1976) "NSSPrice Sensitivity Meter (PSM) – A new approach to study consumer perception of price" Proceedings of the ESOMAR 29th Congress, 139–167. Online available at https://www.researchworld.com/anewapproachtostudyconsumerperceptionofprice/.
Newton, D, Miller, J, Smith, P, (1993) "A market acceptance extension to traditional price sensitivity measurement" Proceedings of the American Marketing Association Advanced Research Techniques Forum.
Sawtooth Software (2016) "Templates for van Westendorp PSM for Lighthouse Studio and Excel". Online available at https://sawtoothsoftware.com/resources/softwaredownloads/tools/vanwestendorppricesensitivitymeter
The function psm_analysis_weighted()
performs the same
analyses for weighted data.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35  set.seed(42)
# standard van Westendorp Price Sensitivity Meter Analysis
# input directly via vectors
tch < round(rnorm(n = 250, mean = 5, sd = 0.5), digits = 2)
ch < round(rnorm(n = 250, mean = 8.5, sd = 0.5), digits = 2)
ex < round(rnorm(n = 250, mean = 13, sd = 0.75), digits = 2)
tex < round(rnorm(n = 250, mean = 17, sd = 1), digits = 2)
output_psm_demo1 < psm_analysis(toocheap = tch,
cheap = ch,
expensive = ex,
tooexpensive = tex)
# additional analysis with Newton Miller Smith Extension
# input via data.frame
pint_ch < sample(x = c(1:5), size = length(tex),
replace = TRUE, prob = c(0.1, 0.1, 0.2, 0.3, 0.3))
pint_ex < sample(x = c(1:5), size = length(tex),
replace = TRUE, prob = c(0.3, 0.3, 0.2, 0.1, 0.1))
data_psm_demo < data.frame(tch, ch, ex, tex, pint_ch, pint_ex)
output_psm_demo2 < psm_analysis(toocheap = "tch",
cheap = "ch",
expensive = "ex",
tooexpensive = "tex",
pi_cheap = "pint_ch",
pi_expensive = "pint_ex",
data = data_psm_demo)
summary(output_psm_demo2)

Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.