How to Calculate Standardized Regression Coefficients in R


Typically when we perform multiple linear regression, the resulting regression coefficients in the model output are unstandardized, meaning they use the raw data to find the line of best fit.

model <- lm(price ~ age + sqfeet, data=df)

However, it’s possible to standardize each predictor variable and the response variable (by subtracting the mean value of each variable from the original values and then dividing by the variables standard deviation) and then perform regression, which results in standardized regression coefficients.

The easiest way to calculate standardized regression coefficients in R is by using the scale() function to standardize each variable in the model:

model <- lm(scale(price) ~ scale(age) + scale(sqfeet), data=df)

The following example shows how to calculate standardized regression coefficients in practice.

Example: How to Calculate Standardized Regression Coefficients in R

Suppose we have the following dataset that contains information about the age, square footage, and selling price of 12 houses:

#create data frame
df <- data.frame(age=c(4, 7, 10, 15, 16, 18, 24, 28, 30, 35, 40, 44),
                 sqfeet=c(2600, 2800, 1700, 1300, 1500, 1800,
                          1200, 2200, 1800, 1900, 2100, 1300),
                 price=c(280000, 340000, 195000, 180000, 150000, 200000,
                         180000, 240000, 200000, 180000, 260000, 140000))

#view data frame
df

   age sqfeet  price
1    4   2600 280000
2    7   2800 340000
3   10   1700 195000
4   15   1300 180000
5   16   1500 150000
6   18   1800 200000
7   24   1200 180000
8   28   2200 240000
9   30   1800 200000
10  35   1900 180000
11  40   2100 260000
12  44   1300 140000

Suppose we then perform multiple linear regression using age and square footage as the predictor variables and price as the response variable:

#fit regression model
model <- lm(price ~ age + sqfeet, data=df)

#view model summary
summary(model)

Call:
lm(formula = price ~ age + sqfeet, data = df)

Residuals:
   Min     1Q Median     3Q    Max 
-32038 -10526  -6139  21641  34060 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 34736.54   37184.32   0.934 0.374599    
age          -409.83     612.46  -0.669 0.520187    
sqfeet        100.87      15.75   6.405 0.000125 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 24690 on 9 degrees of freedom
Multiple R-squared:  0.8508,	Adjusted R-squared:  0.8176 
F-statistic: 25.65 on 2 and 9 DF,  p-value: 0.0001916

From the model output we can see the unstandardized regression coefficients:

  • Intercept: 34736.54
  • Age: -409.83
  • Sq Feet: 100.87

Upon first glance, it appears that age has a much larger effect on house price since it’s coefficient in the regression table is -409.833 compared to just 100.866 for the predictor variable square footage.

However, the standard error is much larger for age compared to square footage, which is why the corresponding p-value is actually large for age (p=0.520) and small for square footage (p=0.000).

The reason for the extreme differences in regression coefficients is because of the extreme differences in scales for the two variables:

  • The values for age range from 4 to 44.
  • The values for square footage range from 1,200 to 2,800.

Suppose we instead standardize the raw data and fit a new regression model:

#standardize each variable and fit regression model
model_std <- lm(scale(price) ~ scale(age) + scale(sqfeet), data=df)

#turn off scientific notation
options(scipen=999)

#view model summary
summary(model_std)

Call:
lm(formula = scale(price) ~ scale(age) + scale(sqfeet), data = df)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.5541 -0.1820 -0.1062  0.3743  0.5891 

Coefficients:
                            Estimate             Std. Error t value Pr(>|t|)
(Intercept)   -0.0000000000000002253  0.1232881457926768426   0.000 1.000000
scale(age)    -0.0924421263946849786  0.1381464029075653854  -0.669 0.520187
scale(sqfeet)  0.8848591938302141635  0.1381464029075653577   6.405 0.000125
                 
(Intercept)      
scale(age)       
scale(sqfeet) ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.4271 on 9 degrees of freedom
Multiple R-squared:  0.8508,	Adjusted R-squared:  0.8176 
F-statistic: 25.65 on 2 and 9 DF,  p-value: 0.0001916

The regression coefficients in this table are standardized, meaning they used standardized data to fit this regression model.

The way to interpret the coefficients in the table is as follows:

  • A one standard deviation increase in age is associated with a 0.092 standard deviation decrease in house price, assuming square footage is held constant.
  • A one standard deviation increase in square footage is associated with a 0.885 standard deviation increase in house price, assuming age is held constant.

Now we can see that square footage has a much larger effect on house price than age.

Note: The p-values for each predictor variable are the exact same as the previous regression model.

When deciding on the final model to use, we now know that square footage is much more important for predicting the price of a house compared to age.

Additional Resources

The following tutorials provide additional information about regression models:

How to Read and Interpret a Regression Table
How to Interpret Regression Coefficients
How to Interpret P-Values in Linear Regression

Leave a Reply

Your email address will not be published. Required fields are marked *