Turning my comment to an answer, the sm package offers non-parametric ANCOVA as
sm.ancova. Here is a toy example:
anorexia$Treat <- relevel(anorexia$Treat , ref="Cont")
# visual check for the parallel group assumption
xyplot(Postwt ~ Prewt, data=anorexia, groups=Treat, aspect="iso", type=c("p","r"),
auto.key=list(space="right", lines=TRUE, points=FALSE))
# fit two nested models (equal and varying slopes across groups)
anorex.aov0 <- aov(Postwt ~ Prewt + Treat, data=anorexia) # ≈ lm(Postwt ~ Prewt + Treat + offset(Prewt), data=anorexia)
anorex.aov1 <- aov(Postwt ~ Prewt * Treat, data=anorexia)
# check if we need the interaction term
The above shows that the parallel group assumption is not realistic and that we must account for the interaction (p=0.007) between the factor group and continuous covariate.
Here is what we would get with
sm.ancova, with default smoothing parameter and equal-group as the reference model:
> with(anorexia, ancova.np <- sm.ancova(Prewt, Postwt, Treat, model="equal"))
Test of equality : h = 1.90502 p-value = 0.0036
Band available only to compare two groups.
There is another R package for non-parametric ANCOVA (I haven't tested it, though): fANCOVA, with
T.aov allowing to test for the equality of nonparametric curves or surfaces based on an ANOVA-type statistic.