context("Price sensitivity meter")
dat <- as.matrix(data.frame(`Too cheap` = c(1, 0.5, 0.75, 0.5, 0.25, 0.5, 0.5, 1, 1, 0.1,
1, 0.5, 1, 0, 0.5, 0.25, 1, 2, 0.75, 0.25,
0.75, 0.5, 0.75, 0.25, 1.5, 0.2),
`Cheap` = c(1, 2.1, 2, 2, 0.75, 2,0.5, 1.5, 4, 1.5,
0.5, 3.5, 0.9, 2.5, 0.8, 3, 0.25, 5, 2.5, 1,
1, 1, 1, 2, 1, 1),
'Expensive' = c(2, 2.8, 5, 2.5, 1.5, 4, 1.5, 2, 5.5, 3,
1.7, 7, 2, 3.5, 1.1, 5, 1, 6, 3, 3,
2, 1.5, 1.5, 3, 1.5, 2.5),
'Too expensive' = c(6, 2.5, 3, 2, 2, 3, 5, 3.5, 8, 1.5,
6, 1.2, 4.5, 3, 8, 2, 3, 6, 2, 2,
7, 5, 8, 7, 3, 5)))
data.with.likelihoods <- structure(c(8.13, 8.34, 8.65, 8.84, 8.09, 7.83, 6.47, 7.55, 8.25,
10.13, 7.85, 6.77, 7.3, 8.86, 5.19, 7.05, 7.94, 10.16, 6.62,
7.98, 8.33, 8.75, 10.5, 6.49, 8.59, 5.75, 9.86, 8.06, 6.44, 8.23,
6.43, 9.05, 9.14, 6.83, 6.03, 7.44, 7.87, 7.61, 8.33, 8.55, 9.36,
8.6, 7.78, 7.85, 7.51, 7.9, 5.2, 8.42, 7.24, 7.8, 8.73, 6.18,
6.7, 8.52, 8.01, 9.96, 6.58, 7.98, 9.8, 7.86, 8.47, 7.27, 12.63,
8.05, 6.15, 8.04, 8.7, 8.25, 8.47, 6.99, 8.07, 8.14, 9.26, 10.73,
8.09, 9.32, 9.94, 8.01, 10.05, 10.3, 7.71, 5.17, 6.81, 5.96,
6.47, 10.06, 6.6, 7.97, 5.14, 9.24, 7.5, 9.41, 8.53, 5.97, 7.09,
9.14, 11.46, 8.31, 8.15, 8.4, 8.57, 8.33, 9.37, 6.21, 7, 6.23,
4.65, 7.85, 9.16, 7.88, 5.78, 8.57, 5.6, 7.19, 7.09, 8.02, 8.03,
6.93, 7.76, 7.4, 7.13, 8.35, 9.55, 8.66, 10.09, 6.67, 10.1, 8.39,
6.57, 9.16, 10.09, 7.68, 7.2, 8.98, 8.69, 9.94, 6.84, 5.54, 8.62,
8.15, 9.58, 8.36, 6.97, 6.88, 6.46, 8.38, 8.42, 10.03, 8.57,
9.65, 8.4, 7.01, 7.39, 7.93, 8.93, 9.14, 8.64, 8.1, 6.76, 7.88,
9.24, 8.57, 9.63, 7.79, 5.47, 9.67, 7.93, 9.11, 9.9, 6.82, 6.68,
8.02, 6.86, 7.2, 7.47, 7.9, 9.08, 6.5, 7.31, 8.86, 8.5, 8.94,
7.44, 5.45, 9.06, 8.55, 8.02, 7.96, 7.53, 7.11, 7.16, 9.16, 6.14,
7.48, 7.82, 10.65, 6.92, 5.37, 6.5, 10.6, 9.56, 7.66, 8.86, 9.1,
7.15, 6.84, 8.42, 7.4, 9.84, 4.52, 9.18, 8.4, 7.55, 8.95, 9.95,
6.39, 8.52, 4.51, 6.47, 7.8, 5.33, 7.7, 7.29, 7.44, 9.87, 5.58,
6.63, 7.97, 8.25, 6.56, 13.68, 8.58, 9.35, 7.51, 9.6, 6.52, 8.57,
8.95, 8.04, 7.77, 6.83, 11.85, 9.41, 8.56, 11.88, 7.12, 5.06,
8.9, 9.43, 7.71, 10.07, 10.45, 11.98, 9.98, 15.72, 14.92, 11.74,
10.06, 11.24, 9.18, 13.2, 6.57, 14.72, 13.53, 12.27, 12.21, 12.22,
10.86, 11.93, 13.89, 12.7, 12.22, 11.04, 10.84, 13.61, 13.27,
15.95, 14.9, 9.92, 11.18, 13.57, 10.88, 11.71, 14.43, 12.45,
12.42, 11.31, 10.94, 13.16, 13.55, 11.36, 11.63, 10.84, 9.57,
13.24, 13.38, 13.07, 9.9, 12.79, 14.3, 10.18, 11.16, 13.71, 14.16,
11.76, 11.24, 12.68, 13.26, 17.25, 7.2, 12.97, 9.28, 18.38, 14.8,
13.4, 12.93, 12.79, 11.21, 12.25, 11.74, 7.82, 10.63, 14.88,
11.33, 12.62, 13.6, 11.92, 10.7, 12.32, 11.33, 11.67, 9.3, 13.53,
12.93, 9.91, 10.07, 14.32, 9.03, 14.19, 12.93, 11.71, 15.06,
10.3, 10.09, 14.43, 13.62, 14.68, 11.81, 11.73, 12.68, 11.78,
8.85, 11.57, 14.19, 11.77, 10.09, 9.54, 10.83, 13.49, 9.69, 10.77,
12.93, 9.75, 9.76, 13.96, 15.6, 10.85, 11.9, 10.57, 13.41, 10.43,
11.54, 12.74, 10.18, 10.93, 9.33, 12.77, 13.36, 10.54, 13.88,
12.05, 11.91, 13.08, 11.15, 13.21, 15.36, 12.77, 11.13, 7.98,
11.52, 11.39, 15.54, 12.8, 11.63, 13.11, 9.34, 11.74, 14.11,
11.96, 9.36, 14.94, 14.5, 9.23, 12.1, 12.03, 6.16, 9.37, 10.44,
11.56, 13.61, 11.39, 12.18, 16.22, 9.73, 9.9, 12.31, 12.59, 12.24,
11.26, 6.56, 9.93, 16.25, 12.54, 11.38, 11.11, 9.04, 14.07, 10.88,
10.79, 10.92, 15.5, 11.06, 11.2, 14.08, 10.25, 13.59, 11.35,
11.83, 15.23, 13.8, 9.87, 14.71, 11.21, 11.4, 12.06, 14.92, 10,
7.44, 11.23, 10.55, 12.55, 10.83, 9.3, 13.32, 12.29, 12, 12.98,
12.24, 14.53, 10.39, 14.28, 12.46, 12.85, 12.86, 16.78, 11.04,
13.18, 9.26, 13.38, 13.57, 13.86, 10.46, 10.93, 11.8, 10.18,
13.25, 9.7, 12.18, 8.86, 12.45, 11.03, 12.75, 10.25, 15.46, 14.25,
12.83, 15.15, 14.25, 13.12, 9.61, 13.37, 13.21, 14.99, 12.67,
12.28, 12.26, 8.64, 13.22, 12.54, 13.87, 12.65, 11.07, 12.24,
15.34, 10.93, 11.96, 13.3, 12.62, 12.69, 14.02, 12.83, 13.23,
13.04, 12.78, 11.95, 13.89, 12.75, 12.16, 11.68, 13.7, 11.38,
12.82, 13.86, 12.47, 13.96, 12.07, 13.74, 11.4, 12.56, 13.3,
13.66, 13.8, 13.28, 11.77, 13.24, 12.34, 13, 13.07, 14.26, 13.64,
14.45, 12.21, 15.08, 11.57, 15.21, 12.49, 10.88, 13.72, 12.86,
11.74, 12.52, 12.29, 13.61, 13.73, 13.37, 12.98, 15.33, 10.53,
12.68, 12.32, 13.33, 15.27, 14.51, 14.24, 11.11, 13.86, 12.36,
12.73, 15.5, 13.07, 11.88, 13.57, 10.68, 12.82, 13.88, 13.36,
14.01, 13.05, 12.41, 14.46, 11.64, 13.22, 13.8, 13.33, 11.92,
12.09, 12.29, 13.08, 13.09, 12.65, 11.6, 13.35, 14.95, 11.48,
12.82, 13.62, 12.98, 12.03, 14.3, 13.32, 13.94, 12.08, 13.42,
10.61, 12.49, 11.88, 12.95, 13.41, 12.04, 13.28, 14.12, 13.34,
10.68, 13.43, 13.3, 12.42, 13.38, 14.12, 13.1, 12.53, 13.94,
13.25, 12.63, 13.59, 11.49, 12.86, 11.02, 12.68, 12.35, 12.89,
15.06, 13.31, 11.97, 12.65, 13.07, 12.23, 13, 14.44, 12.28, 13.84,
13.68, 11.44, 12.78, 12.45, 10.02, 13.93, 13.23, 13.28, 13.26,
13.07, 14.29, 14.33, 14.03, 12.01, 12.91, 14, 12.58, 14.81, 12.79,
13.16, 12.97, 12.94, 12.08, 12.69, 12.64, 13.82, 15.13, 12.33,
13.61, 12.88, 12.57, 11.8, 14.32, 11.24, 13.77, 13.82, 13.55,
12.12, 13.26, 13.81, 12.8, 13.49, 15.53, 13.2, 12.73, 13.22,
12.82, 11.31, 12.07, 13.11, 10.78, 12.71, 11.55, 12.83, 12.66,
11.7, 13.12, 14.18, 14.19, 13.01, 12.8, 12.61, 14.3, 11.54, 13.06,
14.55, 12.96, 12.92, 12.45, 12.09, 12.95, 13.97, 14.76, 13.39,
11.95, 12.57, 12.07, 12.55, 13.85, 12.97, 12.4, 12.48, 13.41,
12.61, 13.42, 14.69, 13.46, 12.21, 12.11, 12.15, 12.79, 11.65,
13.44, 12.62, 12.82, 12.94, 11.25, 12.15, 13.02, 12.66, 11.06,
13.48, 13.69, 13.53, 11.86, 13.82, 12.96, 13.62, 13.58, 15.13,
15.3, 16.31, 16.36, 15.25, 15.39, 14.84, 13.12, 14.87, 15.56,
15.55, 16.21, 14.3, 15.01, 14.4, 14.29, 14.83, 13.02, 14.5, 16.51,
14.71, 14.77, 15.82, 15.64, 14.21, 15.2, 14.19, 16.3, 13.59,
13.04, 15.8, 15.1, 15.04, 14.7, 15.88, 16.37, 15.02, 14.66, 14.08,
13.6, 15.33, 14.04, 13.81, 14.93, 16.03, 14.99, 14.78, 15.58,
14.54, 13.84, 14.57, 15.23, 12.89, 14.74, 16.94, 14.83, 14.91,
15.1, 13.24, 15.5, 14.18, 16.57, 16.39, 14.28, 14.44, 14.59,
16.66, 15.47, 13.14, 15.03, 14.69, 14.32, 14.49, 15.92, 14.9,
15.45, 16.17, 14.67, 13.88, 16.55, 14.77, 15.02, 14.38, 13.85,
13.93, 17.02, 15.56, 16.46, 14.27, 15.15, 15.26, 14.61, 15.56,
16.44, 16.06, 14.94, 15.08, 15.76, 14.99, 14.31, 14.69, 13.85,
15.26, 13.8, 14.38, 16.7, 16.49, 14.17, 15.18, 15.26, 14.1, 14.51,
14.81, 14.01, 13.81, 15.49, 15.71, 14.04, 14.62, 14.41, 13.21,
15.45, 15.14, 14.38, 15.29, 15.53, 15.98, 14.51, 15.2, 14.15,
13.58, 16.64, 15.37, 15.88, 14.22, 13.28, 15.36, 16.1, 13.73,
16.02, 16.22, 13.75, 16.85, 13.58, 14.92, 14.99, 17.05, 14.47,
15.42, 17.37, 13.13, 15.22, 14.86, 15.13, 14.85, 14.75, 15.76,
13.6, 15.54, 13.83, 14.32, 15.06, 14.09, 14.26, 15.3, 16.54,
15.72, 15.62, 16.04, 16.75, 13.51, 14.65, 17.68, 16.18, 15.06,
15.56, 14.26, 14.36, 14.91, 16.58, 15.32, 15.81, 14.18, 14.73,
13.27, 16.2, 14.81, 14.7, 13.81, 15.09, 16.93, 15.98, 14.34,
16.6, 15.27, 15.47, 15.7, 15.11, 16.19, 15.18, 15.72, 15.53,
16.16, 13.99, 14.12, 15.16, 13.89, 13.39, 15.69, 15.35, 14.73,
15.03, 16.12, 14.11, 15.12, 14.07, 15.17, 19.33, 15.19, 14.35,
14.05, 17.75, 14.63, 14.06, 14.19, 13.84, 16.07, 16.87, 16.31,
14.75, 14.51, 15.09, 14.93, 13.91, 15.65, 17.23, 14.66, 12.86,
15.01, 15.52, 16.06, 15.74, 16.29, 15.66, 15.77, 14.87, 13.9,
17.55, 16.48, 13.55, 14.73, 3, 3, 3, 2, 2, 5, 2, 3, 5, 5, 4,
5, 5, 5, 4, 4, 4, 5, 5, 3, 1, 1, 4, 1, 5, 4, 5, 5, 2, 4, 3, 4,
4, 2, 2, 4, 5, 5, 3, 4, 1, 5, 4, 4, 1, 5, 4, 5, 4, 5, 1, 5, 3,
4, 5, 5, 1, 5, 4, 4, 1, 3, 3, 2, 2, 5, 5, 4, 4, 5, 4, 4, 2, 5,
1, 5, 3, 2, 1, 4, 5, 5, 3, 4, 3, 5, 1, 4, 4, 1, 1, 5, 4, 5, 5,
4, 1, 1, 4, 4, 3, 3, 5, 4, 4, 2, 5, 2, 4, 4, 3, 5, 5, 4, 5, 4,
2, 3, 3, 5, 3, 5, 5, 5, 5, 5, 3, 4, 5, 2, 4, 5, 4, 2, 1, 4, 5,
4, 5, 1, 4, 2, 5, 3, 4, 4, 3, 4, 4, 4, 3, 1, 4, 5, 5, 3, 2, 3,
5, 4, 5, 5, 4, 5, 4, 3, 3, 3, 1, 4, 4, 5, 4, 5, 3, 4, 3, 5, 4,
2, 4, 4, 3, 4, 1, 3, 5, 5, 4, 4, 1, 5, 4, 4, 1, 5, 5, 4, 2, 4,
3, 5, 4, 4, 1, 4, 4, 1, 5, 5, 4, 5, 3, 4, 4, 1, 5, 1, 5, 2, 3,
2, 5, 4, 3, 1, 4, 4, 5, 1, 5, 4, 4, 2, 4, 5, 4, 3, 5, 1, 3, 3,
1, 1, 4, 4, 4, 4, 3, 5, 1, 2, 2, 2, 1, 2, 1, 2, 1, 3, 1, 2, 4,
1, 1, 4, 3, 2, 1, 5, 1, 1, 2, 2, 4, 1, 5, 1, 2, 5, 2, 1, 2, 2,
2, 2, 2, 2, 1, 1, 1, 5, 4, 3, 3, 2, 1, 2, 3, 2, 5, 1, 1, 2, 2,
2, 1, 1, 1, 3, 3, 5, 5, 2, 4, 1, 2, 3, 4, 2, 4, 2, 5, 3, 1, 5,
3, 1, 3, 2, 2, 1, 4, 3, 4, 4, 2, 2, 2, 1, 1, 1, 3, 1, 3, 2, 2,
1, 1, 2, 3, 2, 5, 4, 1, 2, 4, 3, 5, 2, 5, 1, 5, 1, 1, 2, 1, 2,
1, 3, 1, 1, 2, 1, 5, 4, 5, 4, 2, 1, 5, 3, 2, 3, 1, 1, 2, 4, 2,
1, 4, 5, 1, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2, 2,
3, 3, 2, 1, 1, 2, 1, 3, 2, 2, 1, 1, 5, 1, 2, 4, 3, 2, 1, 2, 4,
2, 2, 1, 2, 2, 1, 4, 2, 2, 1, 1, 1, 4, 2, 1, 2, 3, 4, 3, 3, 2,
3, 2, 2, 2, 3, 2, 4, 1, 4, 1, 2, 5, 3, 1, 3, 2, 3, 1, 1, 2, 4,
2, 3, 2, 1, 1, 4, 4, 3, 3, 3, 1, 2, 1, 2, 3, 4, 2, 1, 2, 3, 1,
3, 1, 2, 3, 3, 3), dim = c(250L, 6L), dimnames = list(c("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",
"36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46",
"47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57",
"58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68",
"69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
"80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90",
"91", "92", "93", "94", "95", "96", "97", "98", "99", "100",
"101", "102", "103", "104", "105", "106", "107", "108", "109",
"110", "111", "112", "113", "114", "115", "116", "117", "118",
"119", "120", "121", "122", "123", "124", "125", "126", "127",
"128", "129", "130", "131", "132", "133", "134", "135", "136",
"137", "138", "139", "140", "141", "142", "143", "144", "145",
"146", "147", "148", "149", "150", "151", "152", "153", "154",
"155", "156", "157", "158", "159", "160", "161", "162", "163",
"164", "165", "166", "167", "168", "169", "170", "171", "172",
"173", "174", "175", "176", "177", "178", "179", "180", "181",
"182", "183", "184", "185", "186", "187", "188", "189", "190",
"191", "192", "193", "194", "195", "196", "197", "198", "199",
"200", "201", "202", "203", "204", "205", "206", "207", "208",
"209", "210", "211", "212", "213", "214", "215", "216", "217",
"218", "219", "220", "221", "222", "223", "224", "225", "226",
"227", "228", "229", "230", "231", "232", "233", "234", "235",
"236", "237", "238", "239", "240", "241", "242", "243", "244",
"245", "246", "247", "248", "249", "250"), c("toocheap", "cheap",
"expensive", "tooexpensive", "pi_cheap", "pi_expensive")))
test_that("PSM",
{
expect_warning(PriceSensitivityMeter(dat, check.prices.ordered = TRUE),
"should be supplied in increasing order")
dat[5,1] <- NA
dat[6,4] <- NA
expect_error(PriceSensitivityMeter(dat), NA)
dat.missing <- cbind(dat[,1:3], 'Very expensive' = rep(NA, NROW(dat)))
expect_warning(PriceSensitivityMeter(dat.missing), "Missing values have been omitted")
})
fake <- data.frame(A = 1:10, B = (1:10) + 1, C = (1:10) + 2, D = (1:10) + 3)
test_that("Check proportions",
{
psm0 <- PriceSensitivityMeter(fake)
expect_equal(attr(psm0, "ChartData")[,1], c((10:1)/10, 0.0, 0.0, 0.0), check.attributes = FALSE)
psm1 <- PriceSensitivityMeter(fake, resolution = 0.1)
expect_equal(attr(psm1, "ChartData")[,3],
c(`1` = 0, `1.1` = 0, `1.2` = 0, `1.3` = 0, `1.4` = 0, `1.5` = 0,
`1.6` = 0, `1.7` = 0, `1.8` = 0, `1.9` = 0, `2` = 0, `2.1` = 0,
`2.2` = 0, `2.3` = 0, `2.4` = 0, `2.5` = 0, `2.6` = 0, `2.7` = 0,
`2.8` = 0, `2.9` = 0, `3` = 0.1, `3.1` = 0.1, `3.2` = 0.1, `3.3` = 0.1,
`3.4` = 0.1, `3.5` = 0.1, `3.6` = 0.1, `3.7` = 0.1, `3.8` = 0.1,
`3.9` = 0.1, `4` = 0.2, `4.1` = 0.2, `4.2` = 0.2, `4.3` = 0.2,
`4.4` = 0.2, `4.5` = 0.2, `4.6` = 0.2, `4.7` = 0.2, `4.8` = 0.2,
`4.9` = 0.2, `5` = 0.3, `5.1` = 0.3, `5.2` = 0.3, `5.3` = 0.3,
`5.4` = 0.3, `5.5` = 0.3, `5.6` = 0.3, `5.7` = 0.3, `5.8` = 0.3,
`5.9` = 0.3, `6` = 0.4, `6.1` = 0.4, `6.2` = 0.4, `6.3` = 0.4,
`6.4` = 0.4, `6.5` = 0.4, `6.6` = 0.4, `6.7` = 0.4, `6.8` = 0.4,
`6.9` = 0.4, `7` = 0.5, `7.1` = 0.5, `7.2` = 0.5, `7.3` = 0.5,
`7.4` = 0.5, `7.5` = 0.5, `7.6` = 0.5, `7.7` = 0.5, `7.8` = 0.5,
`7.9` = 0.5, `8` = 0.6, `8.1` = 0.6, `8.2` = 0.6, `8.3` = 0.6,
`8.4` = 0.6, `8.5` = 0.6, `8.6` = 0.6, `8.7` = 0.6, `8.8` = 0.6,
`8.9` = 0.6, `9` = 0.7, `9.1` = 0.7, `9.2` = 0.7, `9.3` = 0.7,
`9.4` = 0.7, `9.5` = 0.7, `9.6` = 0.7, `9.7` = 0.7, `9.8` = 0.7,
`9.9` = 0.7, `10` = 0.8, `10.1` = 0.8, `10.2` = 0.8, `10.3` = 0.8,
`10.4` = 0.8, `10.5` = 0.8, `10.6` = 0.8, `10.7` = 0.8, `10.8` = 0.8,
`10.9` = 0.8, `11` = 0.9, `11.1` = 0.9, `11.2` = 0.9, `11.3` = 0.9,
`11.4` = 0.9, `11.5` = 0.9, `11.6` = 0.9, `11.7` = 0.9, `11.8` = 0.9,
`11.9` = 0.9, `12` = 1, `12.1` = 1, `12.2` = 1, `12.3` = 1, `12.4` = 1,
`12.5` = 1, `12.6` = 1, `12.7` = 1, `12.8` = 1, `12.9` = 1, `13` = 1)
)
psm2 <- PriceSensitivityMeter(fake, weights = 1:10)
expect_equal(attr(psm2, "ChartData")[,2],
c(`1` = 1, `2` = 1, `3` = 0.981818181818182, `4` = 0.945454545454545,
`5` = 0.890909090909091, `6` = 0.818181818181818, `7` = 0.727272727272727,
`8` = 0.618181818181818, `9` = 0.490909090909091, `10` = 0.345454545454545,
`11` = 0.181818181818182, `12` = 0, `13` = 0)
)
})
test_that("PSM with two axes",
{
expect_error(PriceSensitivityMeter(data.with.likelihoods, output = "Likelihood to buy and Revenue",
currency = "€", y2.tick.prefix = "(€", y2.tick.suffix = ")",
y2.tick.font.family = "Courier New", y2.tick.font.color = "#0000FF",
y2.title.font.family = "Courier New", y2.title.font.color = "#0000FF",
y2.bounds.minimum = 0.5, y2.bounds.maximum = 5, y2.title = "R"), NA)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.