I'm having trouble interpreting the results from the Spread-Level Plot function in R (car package). The documentation says:

spread-stabilizing power transformation, calculated as 1 - slope of the line fit to the plot.

This is not explicit enough for me. Should this transformation be applied to every variable in the regression?

For example, assume I have an lm object given by:

myFit <- lm(y ~ x1 + x2)

Then I use Spread-Level Plot:


If the 'suggested power transformation' is 0.5, then does that imply a homoscedastic model could be fit using one of the following?

refitA <- lm(sqrt(y) ~ sqrt(x1) + sqrt(x2))
refitB <- lm(sqrt(y) ~ x1 + x2)
refitC <- lm(sqrt(y) ~ sqrt(x1 + x2))

If I understand correct, refitA would be the suggested model to approximate homoscedasticity. On the other hand, if I only want to transform the LHS, I would use the powerTransform function (also from car package). i.e., an "estimated transform parameter" of 0.5 from the powerTransform function would imply that refitB is homoscedastic.

Is this correct?



1 Answer 1


The idea is to identify a possible transformation of the response to improve the heteroskedasticity, assuming the model fitted well enough for the spread and level to have been sufficiently accurately estimated.

Which is to say, try refitB, but beware that if the original model was reasonably linear in unstransformed X, the new one generally won't be.

Things to watch out for: possible need to transform X as well, interaction where there wasn't any, or loss of interaction where there was.

If the noise level is high you may not be able to easily tell linear from not-linear though, at least not without something like a loess fit or other similar smooth to pick it out from the noise.

  • $\begingroup$ Thank you. Then how should I interpret the result from the powerTransform function? $\endgroup$
    – ch-pub
    Aug 20, 2014 at 4:58
  • $\begingroup$ The interpretation is that 1-slope is the transformation to apply to $y$ to stabilize variance. It doesn't tell you what you may need to do with $x$ to get a model that describes the mean. It's assumed you will try something like refitB (or, in some situations, perhaps refitA) and then use model diagnostics (perhaps added variable plots, for example) to check whether linearity seems plausible/reasonable, and you may then additionally need to consider whether interaction might also be required. $\endgroup$
    – Glen_b
    Aug 20, 2014 at 5:36
  • $\begingroup$ I think either there is a miscommunication or I don't quite understand your comment. There are two distinct functions. slp(myFit) and powerTransform(myFit). They each return some transformation parameter (and they are different estimates). So, I'd also like to understand how to interpret the value returned from the powerTranform(myFit) function. $\endgroup$
    – ch-pub
    Aug 20, 2014 at 15:59
  • 2
    $\begingroup$ Oh, sorry, I missed that; they're both power transformations of course. Note that they use different information to generate an estimate (so they won't be the same) and in both cases, there's generally a wide uncertainty around the central estimate (though only one of the two reports any). Look at these: (1) summary(carspow <- powerTransform(dist ~ speed, cars)) (estimate 0.43, interval is between 0.21 and 0.65) vs (2) slp(lm(dist ~ speed, cars)) (estimate is 0.54). In each case you should choose a nearby "round number" ... which would be 1/2. So they're different but both suggest $√x$ $\endgroup$
    – Glen_b
    Aug 20, 2014 at 21:44

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.