J'explique linéairement le prix p d'un logement par ses caractéristiques x (nombre de pièces, surface, proximité d'une école etc.) : reg1<-lm(p~.,x). J'utilise la fonction boxcox(reg1) pour vérifier la linéarité de la relation. Graphiquement (voir image), on choisit une transformation 'racine' reg2<-lm(sqrt(p)~.,x).
Maintenant, on m'a demandé de tester néanmoins le modèle reg3<-lm(log(p)~.,x). Or, quand je calcule la vraisemblance de ce modèle avec logLik(), je trouve logLik(reg3) > logLik(reg2), ce qui ne devrait pas être le cas puisque boxcox (qui rejette la transformation log) fait appel au maximum de vraisemblance...
Bref, si quelqu'un peut m'expliquer ce mystère... j'imagine que ce n'est pas la même vraisemblance derrière logLik et derrière boxcox, ce que confirme la doc R.
Dans boxcox, on a :
loglik <- -n/2 * log(sum(qr.resid(xqr, yt/ydot^(la-1))^2))
Avec object la régression, <la> la valeur courante de lambda (en vue d'un plot) et yt <- (y^la - 1)/la la transformée de Box-Cox
1 2 3 4
| xqr <- object$qr
y <- object$y
logy <- log(y)
ydot <- exp(mean(logy)) |
En revanche, dans logLik (avec des notations différentes) :
val <- 0.5 * (sum(log(w)) - N * (log(2 * pi) + 1 - log(N) + log(sum(w * res^2))))
Avec object la régression et w la matrice des poids, qui par défaut est la matrice identité :
1 2 3
| res <- object$residuals (object, c'est toujours la régression)
p <- object$rank
N <- length(res) |
(on pourra se servir de ça : http://russell.vcharite.univ-mrs.fr/EIE/fchap14.pdf)
Partager