I want to do clustering of my data in R, using kmeans or hclust (I am a new R user).

My data is ordinal, Likert scale, to measure the causes of cost escalation. I have 41 causes "variables" that scaled from 1 to 5 (1: no effect, 5: major effect). I have about 160 observations "who rate the causes".

I would like to cluster the variables (the columns, not the rows) in terms of similarity of occurrence in observations, but I don't know how to start.

Do I have to convert the scale to percentage or z-score before clustering?

My data is available and shared as a Google Drive spreadsheet.

  • $\begingroup$ the link is dead $\endgroup$ – baxx Sep 27 '19 at 21:12
  • $\begingroup$ There is a good explanation here. coursera.org/lecture/cluster-analysis/… $\endgroup$ – Venugopal Bukkala Oct 17 '19 at 6:07
  • $\begingroup$ I changed "who rank" to "who rate", because Likert ia a rating scale. $\endgroup$ – ttnphns Oct 17 '19 at 7:41
  • $\begingroup$ Likert data are frequently analyzed as interval data. Primarily because 1) often there is no strong reason to insist the scale is rather ordinal than interval. 2) Methods to analyze ordinal data are much less scope than that for interval data. $\endgroup$ – ttnphns Oct 17 '19 at 7:46

You are trying to determine an appropriate distance measure, and clearly you are noticing how tricky this can be.

Ordinal data is not interval data. You should consider:

  • whether the distance between each category is the same (is the distance between 2 and 3 the same as the distance between 3 and 4?)
  • whether special consideration needs to be given to the neutral/null category (in your case, 1: no effect).
  • whether several of your causes variables need to be considered together. For example, you may decide to sum 2 related variables together and treat them as one (derivative) variable for purposes of clustering.

These considerations have psychological roots. For example, people tend to give more weight to the difference between options at the ends of the scale than in the middle.

You may decide on an approach based on these considerations that involves: - cleaning the data - transforming the current scale into one in Euclidean space.

... or, you may decide this is not necessary for your purposes.

Existing research that uses the Likert scale often utilizes distance measures based on Cosine distance and Pearson Correlation.

You may find the following useful:


I am not sure about the amount of data you need to fit the a model, but you are asking for a common usage of Factor Analysis. Check this page of Quick-R that will help you to deal with some initials examples on how to map your questions to a latent space. You can use it to see the relations among similar questions that will be loaded in the same factors


The previous technique is part of Exploratory Factor Analysis. I am not an expert, but summarizing what the link I mentioned says, for Confirmatory Factor Analysis you would try Structural Equation Modelling, which you can try with R via the sem package


Good luck.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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