Reference:

Xu. 2021. Understanding Consumers’ Perceptions toward Grocery Stores in Bakersfield. Rpubs.com/utjimmyx/brand_positioning

This web report is created using the R programming language (R Studio and RMarkdown). For more details on authoring R Markdown Documents please visit https://rmarkdown.rstudio.com/.

Introduction - What is Brand/Product Positioning

The selection of benefits to emphasize should be based on - importance (relevance of the benefit to target customers’purchase motives in the category), - delivery (the brand’s ability to provide the benefit), and uniqueness (differential delivery of the benefit)

Think-Pair-Share

The final perceptual maps (see Figures 3 and 4) are designed to explain the impact of a college degree on people’s perception of grocery stores.

Figure 3 represents consumers who have a college degree.

Figure 4 represents consumers who do not have a college degree.

Please try to

Objectives

After this workshop/exercise, you will have a better understanding of how to develop a perceptual mapping for brand/product positioning purposes using either survey data or qualitative data.

In addition, you will also try to learn how to design basic perceptual mapping questions for survey studies.

Tips

Data Generation Procedures

The first step is to collect your data. In this example, we collected Qualtrics survey data for the local groceries in Bakersfield, CA using a focus group. You may try to evaluate the attributes based on your group members’ perceptions of your project client’s business and the competition.

If you would like to follow my tutorial, I suggest that you think about using at least three attributes and follow the same data format (Columns:attributes; 1st Row: brands or products). Please open my sample data and see how it looks like.

Data Pre-processing

In this exercise, we first calculate consumers’ average ratings for each attribute and then split the original survey dataset into two according to the education variable (1 and 0). The final datasets used for this analysis include those consumers who have at least a college degree (i.e., Bakersfield_Grocery1.csv) and those not (i.e., Bakersfield_Grocery2.csv).

Interpreting the results - What does a Perceptual Map tell you?

The final output shows you how different grocery brands have been clustered in four quadrants to reflect how they are perceived in terms of several service attributes (Yelp Reviews, Convenience, Price or value, etc.).

Data Analysis and Reporting - Understanding the Perceptions of Consumers toward Grocery Stores in Bakersfield - What Did Well-educated Consumers Say?

library(devtools) 
## 载入需要的程辑包:usethis
install_github("vqv/ggbiplot")
## Skipping install of 'ggbiplot' from a github remote, the SHA1 (7325e880) has not changed since last install.
##   Use `force = TRUE` to force installation
library(ggbiplot)
## 载入需要的程辑包:ggplot2
## 载入需要的程辑包:plyr
## 载入需要的程辑包:scales
## 载入需要的程辑包:grid
?ggbiplot  #see the official introduction to this library
## starting httpd help server ...
##  done
data <- read.csv("Bakersfield_Grocery1.csv", header=TRUE, row.names=1)

site.groups <- c(rep("a", 3), rep("b", 3),
                 rep("c", 3))
data.pca <- prcomp(data[,-1], scale. = TRUE) #build a PCA model
data.pca <- prcomp(data, scale. = TRUE)
ggbiplot(data.pca, labels =  rownames(data))

g1 <- ggbiplot(data.pca, obs.scale = 1, var.scale = 1, 
              groups = site.groups, 
              ellipse = TRUE, circle = TRUE, labels =  rownames(data))  #draw a PCA plot
g1 <- g1 + scale_color_discrete(name = 'Figure 3 - What Did Well-educated Consumers Say about the Grocery Stores in Bakersfield?')
g1 <- g1 + theme(legend.direction = 'horizontal', 
               legend.position = 'top')
print(g1)

Data Analysis and Reporting - Understanding the Perceptions of Consumers toward Grocery Stores in Bakersfield - What Did other Consumers Say?

library(devtools) 
install_github("vqv/ggbiplot")
## Skipping install of 'ggbiplot' from a github remote, the SHA1 (7325e880) has not changed since last install.
##   Use `force = TRUE` to force installation
library(ggbiplot)

data <- read.csv("Bakersfield_Grocery2.csv", header=TRUE, row.names=1)

site.groups <- c(rep("a", 3), rep("b", 3),
                 rep("c", 3))
data.pca <- prcomp(data[,-1], scale. = TRUE)
data.pca <- prcomp(data, scale. = TRUE)
ggbiplot(data.pca, labels =  rownames(data))

g2 <- ggbiplot(data.pca, obs.scale = 1, var.scale = 1, 
              groups = site.groups, 
              ellipse = TRUE, circle = TRUE, labels =  rownames(data))

g2 <- g2 + scale_color_discrete(name = 'Figure 4 -  What Did other Consumers Say about the Grocery Stores in Bakersfield?')
g2 <- g2 + theme(legend.direction = 'horizontal', 
               legend.position = 'top')
print(g2)

Method - Explaining the PCA Algorithm with the 2nd sample (Bakersfield_Grocery2.csv)

Principal Component Analysis (PCA) involves the process of understanding different features in a dataset and can be used in conjunction with cluster analysis.

PCA is also a popular machine learning algorithm used for feature selection. Imagine if you have more than 100 features or factors. It is useful to select the most important features for further analysis.

The basic idea when using PCA as a tool for feature selection is to select variables according to the magnitude (from largest to smallest in absolute values) of their coefficients (loadings).

In this tutorial, we will be using the sample syntax available from the following book. Principal component analysis - reading (p.498-p.510) https://web.stanford.edu/~hastie/ISLR2/ISLRv2_website.pdf

pr.out=prcomp(data, scale=TRUE) #build a PCA model
pr.out$center #find the means of each component
##         Yelp        Value  Convenience   Assortment      Service Delivery_ser 
##     4.222222     3.722222     4.055556     3.666667     4.333333     3.444444 
##   Smart_Apps 
##     1.888889
pr.out$scale #find the standard deviations of each component
##         Yelp        Value  Convenience   Assortment      Service Delivery_ser 
##    0.6666667    1.2527747    1.0137938    0.8660254    0.7071068    1.1303883 
##   Smart_Apps 
##    1.5365907
pr.out$rotation #find the principal component loadings
##                      PC1         PC2         PC3        PC4         PC5
## Yelp          0.45541646  0.25127275  0.26162536 -0.3909461  0.09408531
## Value         0.50548193 -0.04109625 -0.07836262 -0.3176391 -0.33245909
## Convenience   0.36773024 -0.24737311  0.22798165  0.7715158 -0.30084191
## Assortment    0.41350043 -0.41284520  0.26143331 -0.2001377  0.03739488
## Service       0.43537583  0.14678540 -0.38856228  0.2747627  0.73580555
## Delivery_ser  0.03490443 -0.55027820 -0.71012103 -0.1484888 -0.15684125
## Smart_Apps   -0.20026309 -0.61578117  0.38708649 -0.1158941  0.47191704
##                       PC6        PC7
## Yelp         -0.252598208  0.6599343
## Value        -0.407924432 -0.5990263
## Convenience  -0.182995305  0.1799323
## Assortment    0.737133448 -0.0735505
## Service      -0.001400835 -0.1449655
## Delivery_ser -0.070942727  0.3741961
## Smart_Apps   -0.433478913 -0.0826511
pr.out$sdev  #compute the standard deviations
## [1] 1.8706625 1.3224074 0.9390264 0.7689036 0.4723882 0.1881555 0.1425622
pr.var=pr.out$sdev^2
pr.var #variance explained
## [1] 3.49937836 1.74876128 0.88177067 0.59121267 0.22315057 0.03540249 0.02032397
pve=pr.var/sum(pr.var)  #variance explained
pve
## [1] 0.499911195 0.249823040 0.125967238 0.084458953 0.031878652 0.005057498
## [7] 0.002903424
plot(pve, xlab="Principal Component", ylab="Proportion of Variance Explained", ylim=c(0,1),type='b')  #draw a scree plot to see proportion of variance is explained

Disclaimer

The sample size used for this survey exercise is very small. That said, please do not try to generalize the results to the entire population.

Please keep in mind that for generalization purposes, we would usually need a survey from at least 30 customers for most statistical analysis.

References (methods):

Simpson 2017. How The Perception Of A Good Brand Helps Your Company’s Effectiveness https://www.forbes.com/sites/forbesagencycouncil/2017/05/05/how-the-perception-of-a-good-brand-helps-your-companys-effectiveness/?sh=4380e74c67ac

MIT. Strategic Positioning. https://ocw.mit.edu/courses/sloan-school-of-management/15-810-marketing-management-analytics-frameworks-and-applications-fall-2015/lecture-notes/MIT15_810F15_L1_Stratgic.pdf

Nenadic, O., & Greenacre, M. (2007). Correspondence analysis in R, with two-and three-dimensional graphics: the ca package. Journal of statistical software, 20(3). https://goedoc.uni-goettingen.de/bitstream/handle/1/5892/Nenadic.pdf?sequence=1

Sensographics and Mapping Consumer Perceptions Using PCA and FactoMineR. https://www.r-bloggers.com/2017/09/sensographics-and-mapping-consumer-perceptions-using-pca-and-factominer/

The Unavoidable Instability of Brand Image. https://www.r-bloggers.com/2014/06/the-unavoidable-instability-of-brand-image/

The R Project for Statistical Computing. https://www.r-project.org/

R for Data Science - Hadley Wickham. https://r4ds.had.co.nz/

R Markdown. https://rmarkdown.rstudio.com/

R Markdown: The Definitive Guide - Bookdown. https://bookdown.org/yihui/rmarkdown/