I'm working on a customer satisfaction survey consisting of five questions: customer support, product quality, website user-friendliness, pricing, and delivery times. Each question's scored 1 (worst score) to 5 (best score).

Usually the analysis's done by applying weights to calculate an index score: customer support*0.7, product quality*0.7, website user-friendliness*0.8, pricing*0.9, and delivery times*0.6.

So for a rating of 3 (customer support), 3 (product quality), 4 (website user-friendliness), 5 (pricing) and 3 (delivery times), you get an index score of (3*0.7)+(3*0.7)+(4*0.8)+(5*0.9)+(3*0.6)=13.7.

Customers buying a subscription service complete the survey twice, at the time of the initial purchase as well as at a six month follow-up. The index scores from both time points are used in a linear regression model along with other variables like the age of the customer and what product they purchased to see what the predictors are of follow up overall customer satisfaction, ie:

lm(index_score_follow_up ~ index_score_initial_purchase + product_purchased + age_of_customer, data=df)

What I'd like to do now is to break it down and explore the relationships between the questions that make up the index scores. My concern's that maybe there's a specific problem with eg delivery times, either at the time of the initial purchase or at follow-up, and that an annoyed customer then goes on rating certain other questions lower at one or both time points than they otherwise would have.

What's best practice for something like this? I've been thinking about a network graph, although it doesn't seem to allow me to control for categorical variables the way I could in a regression model:

# For this MWE I used the big5 data set (because I couldn't think of a better one), subsetting two of the big5 groups to represent the two time points of my survey.

library("qgraph") # load package
data(big5) # load data frame
data(big5groups) # load list of groups for data frame 
big5groups_sub <- big5groups[1:2] # subset two of the groups from the list

# Correlations:
Q <- qgraph(cor(big5), minimum = 0.25, cut = 0.4, vsize = 1.5, groups = big5groups_sub, 
            legend = TRUE, borders = FALSE)
title("Big 2 correlations", line = 2.5)

Any help would be much appreciated!


1 Answer 1


Good on you for exploring the details! The main issue up front is implicit correlation between the variables. Perhaps product support at t2 now seems lower because customer support wasn’t that great over the past six months (or, the opposite.) There’s also a lot of literature on pricing vs quality, for example, and businesses do participate in conspicuous consumption all the time. So in general, to do the type of analysis that you’re looking to do, you should start thinking about these sorts of questions and making sure you address them up front.

Following this, segmenting your demographics in an intelligent way and then running your analysis, may allow you to answer some of the up front questions at a high level.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.