Salut Manu,
Tillard a écrit :Bonjour a tous
quelqu'un connait-il la difference entre les fonctions lowess et loess?
chacune de ces 2 fonctions, appliquée sur un jeu de données binaires, avec une parametrisation identique (enfin je crois) donne des resultats (smoothed) differents.
la question a deja ete posé sur le forum de R et comme reponse: "lowess est obsolete, utiliser loess", ce qui est un peu court. La fonction loessFit du package limma donne des resultats similaires a lowess.
ci apres un petit exemple reproductible
library(car)
data(Mroz)
Mroz
Mroz$lfpn<-ifelse(Mroz$lfp=="yes",1,0)
Mroz<-Mroz[order(Mroz$lwg),]
Mroz.low<-with(Mroz, {
loess(lfpn ~ lwg, span=0.8,loess.control(iterations=0))})
Mroz.low1<-with(Mroz, {
lowess(lwg, lfpn, f=0.8,iter=0)})
Mroz.low$fitted
Mroz.low1$y
plot(Mroz$lwg,Mroz.low$fitted,type="l",col="red",ylim=c0.3,1.4),
xlab="lwg",ylab="smoothed")
lines(Mroz$lwg,Mroz.low1$y,col="blue")
legend(x=-2,y=0.6,legend=c("loess","lowess"),lty=1,col=c("red","blue"))
mon objectif: explorer la linearite de la relation entre un y binaire et une covariable x continue (cf Dohoo et al., veterinary epidemiologic research, page 356). La ref utilise stata qui utilise aussi une fonction lowess, mais avec aussi (???) des resultats differents de ceux de R. Bref, un beau b....
amicalement
Tu peux avoir des résultats très proches en spécifiant degree = 1 dans loess (le défaut est degree = 2: lissage quadratique):
Code : Tout sélectionner
library(car)
data(Mroz)
Mroz$lfpn <- ifelse(Mroz$lfp == "yes", 1, 0)
Mroz <- Mroz[order(Mroz$lwg),]
Mroz.low <- with(Mroz, {
loess(lfpn ~ lwg, span = 0.8, degree = 1,
loess.control(iterations = 0))})
Mroz.low1 <- with(Mroz, {
lowess(lwg, lfpn, f = 0.8, iter = 0)})
plot(Mroz$lwg, fitted(Mroz.low), type = "l", col = "red",
ylim = c(0.3, 1.4), xlab = "lwg", ylab = "smoothed")
lines(Mroz$lwg, Mroz.low1$y, col = "blue")
legend(x = -2, y = 0.6,
legend = c("loess", "lowess"),
lty = 1, col = c("red", "blue"))
Les résultats sont légèrement différents. C'est normal, car les algorithmes sont différents, et loess dispose de multiples options. Ce serait difficile, voire impossible, de les régler pour avoir exactement les mêmes résultats que loess.
Pour ton problème, je pense qu'il ne faut pas trop s'embêter: c'est de l'exploration, pour voir si la relation est approximativement linéaire. Sachant que loess et lowess sont conçus pour explorer les relations entre des variables quantitatives, ce ne sont d'ailleurs pas des outils appropriés dans ton cas.
Pour répondre à cette situation, j'utilise depuis longtemps et avec satisfaction la fonction gam (generalized additive model), que tu peux trouver sur le CRAN dans le package du même nom. Cette fonction est un clone de la fonction gam de S+.
Il y a une implémentation avec de nombreuses améliorations et extensions dans le package mgcv disponible dans la distribution standard de R. Cependant, c'est plus compliqué que gam, surtout pour les habitués de la fct gam de S+.
La référence de base des gam est:
Hastie, T.J., Tibshirani, R.J., 1990. Generalized additive models. London, Chapman & Hall, 335 p.
La méthode et l'algorithme (back-fitting algorithm) sont assez critiqués, mais pour faire de l'exploration, je ne pense pas que ce soit la peine de trop en faire...
Amicalement,
Renaud