I am currently working with survey data, and I'm a bit at a loss as to how to test for strength of association between categorical responses across questions.

The data in question is in this format:

   Q01     Q02      Q03      Q04      Q05
1 Agree   Agree  Neutral    Agree Disagree
2 Agree   Agree  Neutral Disagree  Neutral
3 Agree Neutral Disagree Disagree    Agree
4 Agree Neutral Disagree    Agree  Neutral
5 Agree   Agree  Neutral    Agree  Neutral

I have 18 questions with 472 respondents, all questions on the same scale ("Agree/Neutral/Disagree"). One of the things I'd like to know is how well correlated are responses of specific categories across questions: for example, how correlated is an "Agree" on Q1 with an "Agree" on Q2, etc.

Anyone mind giving me a "nudge" on the right path to go down? I believe I need to use Cramer's V in this situation (and implement it in R with the vcd package), but I'd like to make sure I'm on the right path.

  • $\begingroup$ Do you have reason to believe that there is a latent normal variable that lies behind people's manifest responses? Ie, do you think people's inner level of agreement - disagreement is continuous & normally distributed? $\endgroup$ Commented Nov 17, 2016 at 17:55
  • $\begingroup$ Yes - I believe so. I'll take that as a nudge to investigate latent variable models. $\endgroup$
    – Kyle Shank
    Commented Nov 17, 2016 at 18:25
  • $\begingroup$ If, as you say, your interest is correlation between partial categories, not the entire categorical variables, then I would see your question as a duplicate of this one. $\endgroup$
    – ttnphns
    Commented Nov 17, 2016 at 23:42

2 Answers 2


You needn't necessarily move straight to latent variable models. If you simply want to assess the possible association between variables, correlations are a simple and convenient place to start. Given that you suspect the ordinal ratings are likely a discretization of a latent normal distribution, I would begin by forming a correlation matrix of polychoric correlations. That is easy to do in R using functions in the psych package.

You should also probably visualize the possible 2x2 contingency tables cross-classifying the variables (for instance with mosaic plots).


If you want to test whether proportion in Agree in Q01 is equal to proportion in agree in Q02, there is test called McNemar Test.

First create the 2*2 contingency table, where row for Q01 and column for Q02.

enter image description here


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.