Cross Validated is a question and answer site for people interested in statistics, machine learning, data analysis, data mining, and data visualization. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?


share|improve this question
up vote 4 down vote accepted

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.

share|improve this answer
Thank you. Then how should I interpret the result from the powerTransform function? – nsw Aug 20 '14 at 4:58
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. – Glen_b Aug 20 '14 at 5:36
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. – nsw Aug 20 '14 at 15:59
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$ – Glen_b Aug 20 '14 at 21:44

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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