# inst/doc/interpolation-in-small-samples.R In pricesensitivitymeter: Van Westendorp Price Sensitivity Meter Analysis

```## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk\$set(
collapse = TRUE,
comment = "#>"
)

## -----------------------------------------------------------------------------
set.seed(1976)

# create random variables
toocheap <- sort(round(rnorm(n = 50, mean = 8, sd = 1.5), digits = 2))
tooexpensive <- sort(round(rnorm(n = 50, mean = 20, sd = 1), digits = 2))
cheap <- sort(round(rnorm(n = 50, mean = 15, sd = 3), digits = 2))
expensive <- sort(round(rnorm(n = 50, mean = 16, sd = 3), digits = 2))

# setting up alternative "cheap"/"expensive" variables with a price step
pricestep_cheap <- which(cheap > 14.25 & cheap < 17.5)
cheap_alt <- cheap
cheap_alt[pricestep_cheap] <- round(mean(cheap_alt[pricestep_cheap]), digits = 2)

pricestep_expensive <- which(expensive > 14 & expensive < 16)
expensive_alt <- expensive
expensive_alt[pricestep_expensive] <- round(mean(expensive_alt[pricestep_expensive]), digits = 2)

## ---- fig.width = 7, fig.height = 4.5-----------------------------------------
library(pricesensitivitymeter)

# Running the analysis with price steps and without interpolation
psm_steps <- psm_analysis(toocheap = toocheap,
cheap = cheap_alt,
expensive = expensive_alt,
tooexpensive = tooexpensive,
validate = TRUE,
interpolate = FALSE)

library(ggplot2)

# Plot with price steps
psmplot_steps <-  ggplot(data = psm_steps\$data_vanwestendorp, aes(x = price)) +
geom_line(aes(y = ecdf_not_cheap, # line: not cheap
colour = "not cheap"),
size = 1) +
geom_line(aes(y = ecdf_not_expensive, # line: not expensive
colour = "not expensive"),
size = 1) +
geom_rug() +
annotate(geom = "point", # Indifference Price Point (intersection of "not cheap" and "not expensive")
x = psm_steps\$idp,
y = psm_steps\$data_vanwestendorp\$ecdf_not_expensive[psm_steps\$data_vanwestendorp\$price == psm_steps\$idp],
size = 5,
shape = 18,
colour = "#D55E00")

psmplot_steps +
labs(x = "Price",
y = "Share of Respondents (0-1)",
title = "Price Sensitivity Meter Plot (without interpolation)")  +
scale_colour_manual(name = "Legend",
values = c("not cheap" = "#009E73",
"not expensive" = "#D55E00")) +
annotate(geom = "text", # Label of Indifference Price Point
x = psm_steps\$idp + 1,
y = psm_steps\$data_vanwestendorp\$ecdf_not_expensive[psm_steps\$data_vanwestendorp\$price == psm_steps\$idp] - 0.05,
label = paste("IDP: ", psm_steps\$idp)) +
coord_cartesian(xlim = c(10, 20)) +
theme_minimal()

## ---- fig.width=7, fig.height=4.5---------------------------------------------
# Running the analysis with interpolation
psm_interpolated <- psm_analysis(toocheap = toocheap,
cheap = cheap_alt,
expensive = expensive_alt,
tooexpensive = tooexpensive,
validate = TRUE,
interpolate = TRUE)

# Plot with interpolated price steps

psmplot_interpolated <-  ggplot(data = psm_interpolated\$data_vanwestendorp, aes(x = price)) +
geom_line(aes(y = ecdf_not_cheap, # line: not cheap
colour = "not cheap"),
size = 1) +
geom_line(aes(y = ecdf_not_expensive, # line: not expensive
colour = "not expensive"),
size = 1) +
geom_rug() +
annotate(geom = "point", # Indifference Price Point (intersection of "cheap" and "expensive")
x = psm_interpolated\$idp,
y = psm_interpolated\$data_vanwestendorp\$ecdf_not_expensive[psm_interpolated\$data_vanwestendorp\$price == psm_interpolated\$idp],
size = 5,
shape = 18,
colour = "#D55E00")

psmplot_interpolated +
labs(x = "Price",
y = "Share of Respondents (0-1)",
title = "Price Sensitivity Meter Plot (with interpolation)")  +
scale_colour_manual(name = "Legend",
values = c("not cheap" = "#009E73",
"not expensive" = "#D55E00")) +
annotate(geom = "text", # Label of Indifference Price Point
x = psm_interpolated\$idp + 1,
y = psm_interpolated\$data_vanwestendorp\$ecdf_not_expensive[psm_interpolated\$data_vanwestendorp\$price == psm_interpolated\$idp],
label = paste("IDP: ", psm_interpolated\$idp)) +
coord_cartesian(xlim = c(10, 20)) +
theme_minimal()

## ---- fig.width=7, fig.height=4.5, echo = FALSE-------------------------------
psmplot_comparison <-  ggplot(data = psm_interpolated\$data_vanwestendorp, aes(x = price)) +
geom_line(aes(y = ecdf_not_cheap, # line: not cheap, interpolated
colour = "not cheap"),
size = 4, alpha = 0.25) +
geom_line(aes(y = ecdf_not_expensive, # line: not expensive, interpolated
colour = "not expensive"),
size = 4, alpha = 0.25) +
geom_line(data = psm_steps\$data_vanwestendorp, # line: not cheap, not interpolated
aes(y = ecdf_not_cheap,
colour = "not cheap"),
size = 1) +
geom_line(data = psm_steps\$data_vanwestendorp, # line: not expensive, not interpolated
aes(y = ecdf_not_expensive,
colour = "not expensive"),
size = 1)

psmplot_comparison +
labs(x = "Price",
y = "Share of Respondents (0-1)",
title = "Price Sensitivity Meter Plot: with vs. without interpolation")  +
scale_colour_manual(name = "Legend",
values = c("not cheap" = "#009E73",
"not expensive" = "#D55E00")) +
coord_cartesian(xlim = c(10, 20)) +
theme_minimal()
```

## Try the pricesensitivitymeter package in your browser

Any scripts or data that you put into this service are public.

pricesensitivitymeter documentation built on Oct. 20, 2021, 1:07 a.m.