CRAN_Status_Badge CRAN_Download_Badge R-CMD-check codecov


pricesensitivitymeter is an implementation of the van Westendorp Price Sensitivity Meter (PSM) in R, which is a popular method in market research to analyze consumer price preferences and price sensitivity. It also covers the so-called Newton Miller Smith Extension which allows to estimate prices that maximize the reach (trial rate) and the revenue.


As of version 0.2.1, this package is available on CRAN.

# install the stable release from CRAN

# install the development version from Github


The main function of the package is psm_analysis() which performs all necessary analyses.

## creating example data

tch <- round(rnorm(n = 250, mean = 8.5, sd = 1), digits = 2)
ch <- round(rnorm(n = 250, mean = 10, sd = 1), digits = 2)
ex <- round(rnorm(n = 250, mean = 12, sd = 0.75), digits = 2)
tex <- round(rnorm(n = 250, mean = 13, sd = 1), digits = 2)

data_psm_demo <- data.frame(tch, ch, ex, tex)


## running the analysis
output_psm_demo <- psm_analysis(
  toocheap = "tch",
  cheap = "ch",
  expensive = "ex",
  tooexpensive = "tex",
  data = data_psm_demo

#> Van Westendorp Price Sensitivity Meter Analysis
#> Accepted Price Range: 9.28 - 12.5 
#> Indifference Price Point: 11.1 
#> Optimal Price Point: 10.62 
#> ---
#> 150 cases with individual price preferences were analyzed (unweighted data).
#> Total data set consists of 250 cases. Analysis was limited to cases with transitive price preferences.
#> (Removed: n = 100 / 40% of data)

The package also has a function psm_analysis_weighted() that deals with weighted survey data where the survey design for the weighting is coming from the survey package. (Please see the documentation and the vignette for more details.) Moreover, there is a convenience function psm_plot() that creates the layout for the standard Price Sensitivity Meter plot via ggplot2. Below is a simple example, using the analysis result created above.


psm_plot(output_psm_demo) +
    x = "Price",
    y = "Share of Respondents (0-1)",
    title = "Example Price Sensitivity Meter Plot",
    caption = "Shaded area: range of acceptable prices\nData: Randomly generated") + 

Additional Information


Van Westendorp, P (1976) “NSS-Price Sensitivity Meter (PSM) – A new approach to study consumer perception of price” Proceedings of the ESOMAR Congress, 139–167. Online available at the ESOMAR website.

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.