How to Calculate Correlation Between Two Variables in R
Use this interactive calculator to estimate Pearson or Spearman correlation from two data series, visualize the relationship on a scatter chart, and learn the exact R commands used by analysts, students, and researchers.
Expert Guide: How to Calculate Correlation Between Two Variables in R
Correlation is one of the most common statistical tools used to measure the strength and direction of a relationship between two variables. If you want to know whether study hours increase exam scores, whether advertising spend tracks revenue, or whether blood pressure tends to rise with age, correlation provides a fast first look at the pattern in your data. In R, calculating correlation is straightforward, but choosing the right method and interpreting the result correctly requires more than typing one function.
When people search for how to calculate correlation between two variables in R, they usually need three things: the correct syntax, a clear explanation of Pearson versus Spearman, and confidence that the number they produced actually means what they think it means. This guide walks through all of that in practical language. You will learn the basic formula concepts, the exact R functions to use, how to handle missing values, how to test significance, and how to report results in a way that is statistically sound.
What correlation measures
A correlation coefficient summarizes the relationship between two variables on a scale from -1 to 1.
- +1 means a perfect positive relationship. As one variable increases, the other increases in a perfectly consistent way.
- 0 means no linear relationship for Pearson, or no monotonic relationship for Spearman.
- -1 means a perfect negative relationship. As one variable increases, the other decreases consistently.
A high positive coefficient does not prove causation. It only tells you that two variables move together in a patterned way. There may be confounding variables, reverse causality, or pure coincidence in small samples.
The main R functions for correlation
In R, the most commonly used functions are cor() and cor.test().
cor(x, y)returns the correlation coefficient.cor.test(x, y)returns the coefficient plus a hypothesis test, confidence interval for Pearson, and p-value.
The default method in cor() is Pearson, which is ideal for continuous variables with an approximately linear relationship. If your data are ranks, ordinal values, or strongly non-normal with monotonic ordering, Spearman is often a better choice.
Pearson correlation in R
Pearson correlation measures the strength of a linear relationship between two numeric variables. It is the most familiar correlation coefficient in introductory statistics, economics, psychology, public health, and business analytics.
Use Pearson when:
- Both variables are numeric and measured on an interval or ratio scale.
- The relationship appears roughly linear on a scatter plot.
- There are no extreme outliers dominating the result.
- You want a measure of linear association.
The output coefficient is often called r. A result like r = 0.82 indicates a strong positive linear relationship, while r = -0.61 indicates a moderate to strong negative linear relationship.
Spearman correlation in R
Spearman correlation is based on ranks rather than raw values. It measures whether two variables move together in a consistent monotonic direction. This makes it more robust when your data are skewed, ordinal, or not linearly related.
Use Spearman when:
- Your variables are ordinal, ranked, or non-normal.
- The relationship is monotonic but not necessarily linear.
- You want a rank-based alternative less sensitive to outliers.
The Spearman coefficient is often denoted by the Greek letter rho. In plain reporting, many analysts simply say Spearman correlation and give the numerical estimate.
Step by step: how to calculate correlation between two variables in R
- Create your vectors. Store the two variables in objects such as
xandy. - Inspect your data. Check lengths, missing values, and suspicious outliers.
- Visualize the relationship. Use a scatter plot to see whether the association is linear, monotonic, weak, or affected by unusual points.
- Choose the method. Pearson for linear numeric data, Spearman for ranked or monotonic non-normal data.
- Run the correlation. Use
cor()for the coefficient andcor.test()if you need statistical testing. - Interpret carefully. Consider the coefficient size, sample size, p-value, and whether the relationship makes practical sense.
How to handle missing values in R
Real data often contain missing values. If you run cor(x, y) with missing values present, you may get NA. To avoid that, specify how missing values should be handled. The most common option is use = "complete.obs", which keeps only rows where both variables are present.
When your data are stored in a data frame, it is often cleaner to subset the complete cases first:
Correlation from data frame columns
Most analysts work with data frames rather than standalone vectors. Suppose you have a data frame named df with columns hours_studied and exam_score. The syntax becomes:
If your project involves many variables, you can calculate a full correlation matrix:
Comparison table: Pearson versus Spearman
| Feature | Pearson | Spearman |
|---|---|---|
| Measures | Linear association | Monotonic rank association |
| Best for | Continuous numeric data | Ordinal, ranked, or non-normal data |
| Sensitivity to outliers | Higher | Lower than Pearson |
| Typical notation | r | rho |
| R method argument | "pearson" |
"spearman" |
Interpreting coefficient size
There is no universal rule for what counts as weak, moderate, or strong because context matters. In some fields, a correlation of 0.20 may be important. In highly controlled physical systems, 0.20 may be trivial. Still, a practical reference is useful.
| Absolute correlation | Common interpretation | Example use case |
|---|---|---|
| 0.00 to 0.19 | Very weak | Website visits vs daily humidity in a noisy market |
| 0.20 to 0.39 | Weak | Sleep duration vs self rated focus |
| 0.40 to 0.59 | Moderate | Training hours vs productivity score |
| 0.60 to 0.79 | Strong | Study time vs exam performance |
| 0.80 to 1.00 | Very strong | Height in inches vs height in centimeters |
Real example with statistics
Imagine a simple educational dataset with 8 students. Their weekly study hours and exam scores are positively associated. If Pearson correlation is calculated in R and returns r = 0.989, that would indicate a very strong positive linear relationship. A corresponding cor.test() output would also give a p-value, helping you test the null hypothesis that the true correlation equals zero.
Now compare that with a public health style example where physical activity rank and stress rank are inversely related, but not in a perfectly linear pattern. Spearman might produce a coefficient around -0.67. That would suggest a meaningful negative monotonic relationship, even if the data are not well represented by a straight line.
Using cor.test() for significance testing
If you need more than the coefficient itself, use cor.test(). This function is especially helpful in academic assignments, reports, and scientific analyses because it returns:
- The estimated correlation coefficient
- A p-value for the hypothesis test
- A confidence interval for Pearson correlation
- Test statistic and degrees of freedom where appropriate
Do not rely only on the p-value. With large sample sizes, even very small correlations can become statistically significant. Always consider effect size and real-world importance.
Visualizing correlation in R
A scatter plot should almost always accompany correlation analysis. This helps you detect nonlinear patterns, clusters, and outliers. Two datasets can have similar coefficients while showing very different shapes. Base R makes this easy:
If you prefer tidy workflows, packages such as ggplot2 are excellent for publication quality charts, though base R is enough for most correlation tasks.
Common mistakes when calculating correlation in R
- Using Pearson on obviously curved data. A nonlinear relationship can produce a misleading low Pearson coefficient.
- Ignoring outliers. A single extreme point can inflate or reverse Pearson correlation.
- Forgetting missing values. This often leads to
NAoutputs or mismatched sample sizes. - Mixing scales incorrectly. Use Spearman for ordinal rankings instead of forcing Pearson.
- Assuming correlation implies causation. Correlation is descriptive, not proof of mechanism.
Recommended reporting format
A clean reporting sentence might look like this: There was a strong positive correlation between study hours and exam score, Pearson’s r = 0.71, p < 0.01, n = 52. If using Spearman, write: Spearman’s rho = -0.48, p = 0.02, n = 30. This gives readers the method, coefficient, significance, and sample size in one concise statement.
Authoritative references for deeper study
National Center for Biotechnology Information on correlation
UCLA Statistical Methods and Data Analytics for R
U.S. Census Bureau statistical working paper resources
Final takeaway
If you want to know how to calculate correlation between two variables in R, the core workflow is simple: prepare two equal-length variables, inspect the relationship visually, run cor() or cor.test(), choose Pearson or Spearman appropriately, and interpret the coefficient in context. For a quick coefficient, cor(x, y) is enough. For full statistical output, use cor.test(x, y). The calculator above mirrors this logic so you can experiment with your own numbers before moving into R code.
Good correlation analysis combines statistical correctness with practical judgment. The more carefully you check assumptions, missing values, and plot shape, the more trustworthy your conclusion will be.