Test de Moran sur les résidus d'une régression logistique

Questions sur les fonctions statistiques de R

Modérateur : Groupe des modérateurs

Hélène Guis
Messages : 7
Enregistré le : 10 Juil 2006, 11:56

Test de Moran sur les résidus d'une régression logistique

Messagepar Hélène Guis » 14 Sep 2006, 17:14

Bonsoir,

Je voulais savoir s'il était possible un test de Moran sur les résidus d'une régression logistique. J'ai chargé le package spdep, et j'ai vu que la fonction lm.morantest permettait de la faire mais pour des régressions linéaires.
D'autre part, je ne sais pas comment on crée la matrice de distance (spatial weights). Est-ce que c'est forcément une matrice avec les k plus proches voisins, ou peut on travailler sur une distance entre voisins?
Merci d'avance pour votre aide!

cordialement,
Hélène
Hélène Guis
Cirad Madagascar

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 15 Sep 2006, 06:36

Bonjour,
Pour faire un test de Moran sur les résidus d'une régression logistique, on peut récupérer les résidus de la régression ( par exemple glm(...)$residuals ) puis utiliser moran.test ou moran.mc.
Pour créer la matrice de distance on peut utiliser la fonction dnearneigh (voisins dans un rayon fixé) suivie de nb2listw, ou encore knearneigh (k plus proches voisins) suivie de knn2nb puis nb2listw (voir le mode d'emploi de ces fonctions).
Reparque : les objets de classe nb retournés par dnearneigh ou knn2nb peuvent être utilisés par plot.nb pour visualiser les voisinages et par edit.nb pour éventuellement les modifier.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 15 Sep 2006, 07:24

François Bonnot a écrit :Bonjour,
Pour faire un test de Moran sur les résidus d'une régression logistique, on peut récupérer les résidus de la régression ( par exemple glm(...)$residuals ) puis utiliser moran.test ou moran.mc.
Pour créer la matrice de distance on peut utiliser les fonctions dnearneigh (voisins dans un rayon fixé) ou knearneigh (k plus proches voisins).
Après on peut visualiser les voisinages avec plot.nb et éventuellement les modifier de façon interactive avec edit.nb.


François: c'est "dangereux" d'utiliser glm(...)$residuals. Il vaut mieux utiliser la fonction residuals, ce qui permet de spécifier le type de résidu souhaité ("deviance", "pearson", "working", "response", "partial") et d'éviter des déconvenues lors d'utilisation de poids ou d'offset dans la régression, cas fréquents en glm.

Exemple:

Code : Tout sélectionner

> data(ships, package = "MASS")
> fm <- glm(incidents ~ type + year * period + offset(log(service)),
+           family = poisson, data = ships, subset = service > 0)
>
> # extraction directe
> head(fm$residuals, 5)
          1           2           3           4           5
-1.00000000 -1.00000000 -0.03365935 -0.11824240 -0.15337006
>
> #utilisation de la fonction dédiée
> head(residuals(fm), 5)
          1           2           3           4           5
-0.65999528 -0.68624541 -0.05964382 -0.25706717 -0.41945696


En complément de ta réponse, il y a des packages spécialisés pour l'utilisation de modèles linéaires et linéaires généralisés dans l'analyses de données géographiques: geoR et geoRglm.

Renaud

Hélène Guis
Messages : 7
Enregistré le : 10 Juil 2006, 11:56

lm.morantest ou moran.test ?

Messagepar Hélène Guis » 15 Sep 2006, 13:34

Bonjour

Merci pour ces réponses. Si j'ai bien compris:
1) Je peux extraire les résidus de ma régression logistique avec la fonction "residuals". Mais quel type de résidus faut-il choisir? (déviance, pearson, working, response, partial)?
2) Une fois que l'on a extrait les résidus, quel fonction appliquer? Luc Anselin précise dans un de ses docs de travail (Pages 10 et 11 de An intro to spatial regression analysis in R : www.sal.uiuc.edu/stuff/stuff-sum/pdf/spdepintro.pdf) que ce n'est pas pareil d'appliquer la fonction lm.morantest directement (fonction qui prend comme argument un modèle linaire x.lm) que d'appliquer la fonction moran.test sur des résidus qu'on aurait extrait par ailleurs. Il dit que la 2eme façon de faire (avec moran.test sur des résidus) est incorrecte. Je n'ai pas compris pourquoi cela n'était pas pareil. Pouvez-vous m'éclairer sur ce point?
Je ne sais donc plus que faire s'il ne faut pas utiliser moran.test sur des résidus, et si la fonction lm.morantest ne s'applique que pour des modèles linéaires et non logistiques...
Merci encore
Hélène
Hélène Guis
Cirad Madagascar

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Re: lm.morantest ou moran.test ?

Messagepar Renaud Lancelot » 15 Sep 2006, 16:54

Hélène Guis a écrit :Bonjour

Merci pour ces réponses. Si j'ai bien compris:
1) Je peux extraire les résidus de ma régression logistique avec la fonction "residuals". Mais quel type de résidus faut-il choisir? (déviance, pearson, working, response, partial)?
2) Une fois que l'on a extrait les résidus, quel fonction appliquer? Luc Anselin précise dans un de ses docs de travail (Pages 10 et 11 de An intro to spatial regression analysis in R : www.sal.uiuc.edu/stuff/stuff-sum/pdf/spdepintro.pdf) que ce n'est pas pareil d'appliquer la fonction lm.morantest directement (fonction qui prend comme argument un modèle linaire x.lm) que d'appliquer la fonction moran.test sur des résidus qu'on aurait extrait par ailleurs. Il dit que la 2eme façon de faire (avec moran.test sur des résidus) est incorrecte. Je n'ai pas compris pourquoi cela n'était pas pareil. Pouvez-vous m'éclairer sur ce point?


J'imagine qu'il faut tenir compte du fait que les résidus sont estimés et non observés, ce qui doit réduire le nombre de ddl et diminuer la puissance du test. Juste une hypothèse...

Je ne pense pas qu'il existe de méthode programmée, voire de théorie, pour faire le test de Moran sur les résidus d'un modèle linéaire généralisé. En regardant rapidement sur le net, je suis tombé sur ce working paper qui semble confirmer ce que je pense et propose une solution pour des modèles log-linéaires (Poisson). Ils utilisent alors soit les résidus de Pearson, soit les résidus de la déviance pour effectuer le test de Moran. Mais c'est un papier de recherche, non publié etc ==> prudence.

Par ailleurs, il y a quelques outils permettant d'évaluer l'autocorrélation ou le variogramme pour des modèles de Poisson (cf dans geoRglm). Tu peux aussi essayer de fouiller dans le package DCluster. Si c'est le cas, tu peux reformuler ta régression logistique en régression de Poisson et utiliser une des méthodes dispo.

Il faudrait en fait poser cette question sur un forum spécialisé en géostats. Voir la "task view" sur les méthodes spatiales avec R à http://cran.r-project.org/src/contrib/Views/Spatial.html, et la liste R-SIG-Geo

Je ne sais donc plus que faire s'il ne faut pas utiliser moran.test sur des résidus, et si la fonction lm.morantest ne s'applique que pour des modèles linéaires et non logistiques...
Merci encore
Hélène


Désolé de de pas être plus informatif, mais le plus sage est de poser la question à des spécialistes. Je te conseille de passer par la liste R-SIG-Geo.

Merci de nous tenir au courant si tu résouds le problème. L'idéal serait que tu postes alors le code avec un extrait des données dans la section "Fichiers", rubrique "Scripts et fonctions R". Cela pourra alors servir à tout le monde.

Bon courage,

Renaud

Hélène Guis
Messages : 7
Enregistré le : 10 Juil 2006, 11:56

Moran test on residuals of a logistic regression

Messagepar Hélène Guis » 20 Sep 2006, 09:34

Bonjour
Comme Renaud Lancelot me le conseillait, j'ai posé ma question sur le forum R SIG Geo. Voici la réponse que j'ai obtenu de Roger Bivand:

From: Roger Bivand
Date: Tue, 19 Sep 2006 21:08:24 +0200 (CEST)
To: r-sig-geo@stat.math.ethz.ch
Subject: Re: [R-sig-Geo] Moran test on residuals of a logistic regression

On Tue, 19 Sep 2006, guis@teledetection.fr wrote:
Hi
I have a logistic regression model, and I would like to see if the residuals of this model are spatially autocorrelated. I saw that the lm.morantest function could be used to test for autocorrelation in residuals from a linear model (lm). Does a similar function exist for residuals of a logistic regression models? (one of the arguments of the lm.morantest is an lm object: x.lm)


No, it doesn't.

I thought of extracting the residuals of my model (with the residuals function) and then applying a moran.test, but I read that this wasn't correct as there was no correction for the fact that these were residuals (I didn't understand why).


The classic reference is Cliff and Ord (1981) p. 200, section 8.2.4, who point out that sample model residuals are correlated anyway, because they are estimated using the fitted regression coefficients. An alternative they also mention but discard is to test n-k independent BLUS residuals, chosen by dropping k spatial units. They also state that "random permutations are not the appropriate reference set for testing the residuals". So lm.morantest() or its Saddlepoint approximation equivalent are the only game in town for Moran's I of regression residuals. Of course I can be computed, but the basis for inference will most likely be unsound.

Is there a way to specify that the moran.test is applied to residuals, making it possible to use this function in my case? I have a last question : if I extract residuals of the logistic models, what type of residuals should I choose : deviance, pearson, working, response, partial...?


(All responsibility waived!!)
If you replace the test:

if(class(model) != "lm")

in lm.morantest()

with:

if(!inherits(model, "lm"))

lm.morantest() will "work" for some definition of work on glm objects using deviance residuals. Until somebody tests this properly, I would certainly not advise using the output for anything other than electron recycling.

Hope this helps,

Roger

I would be grateful for any help
Thanks
Helene Guis
PhD student CIRAD - University of Franche-Comté, France.
guis@teledetection.fr


R-sig-Geo mailing list
R-sig-Geo at stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

--
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no
Hélène Guis
Cirad Madagascar

Tillard
Messages : 87
Enregistré le : 17 Déc 2004, 10:32

acpvi orthogonal et test de moran ?

Messagepar Tillard » 21 Sep 2006, 08:35

Bonjour
c'est juste une idée, je n'ai pas creusé l'affaire

si vous ne pouvez pas appliquer le test de Moran aux residus d'une regression logistique, peut etre est-il possible de mettre en relation les coordonnées factorielles d'une acpvi (mêmes variables que celles de votre regression logistique) orthogonale a votre variable réponse y (binaire) et un operateur de voisinage ?;

essayez de voir
Meot A, Chessel D, Sabatier R. 1993. Opérateurs de voisinage et analyse de données spatio-temporelles. In: Biométrie et environnement, Lebreton JD, Asselain B, editors (Ed.), MASSON, pp. 45-72

il faudrait poser la question dans la liste ade4 pour voir si il existe une solution àvotre probleme via les méthodes d'analyses couplées

adelist@cisrweb.univ-lyon1.fr

Cordialement
Emmanuel Tillard
UMR ERRC (Elevage des Ruminants en Regions Chaudes)
CIRAD - St PIERRE (La Réunion)
tel: 02 62 49 92 54

Tillard
Messages : 87
Enregistré le : 17 Déc 2004, 10:32

mon message précédent n'est pas valable

Messagepar Tillard » 21 Sep 2006, 08:41

Ne tenez pas compte du message précédent que j'ai envoyé, je m'apercois que c'est completement débile !! désolé, suis aller trop vite pour l'ecrire
Cordialement
Emmanuel Tillard

UMR ERRC (Elevage des Ruminants en Regions Chaudes)

CIRAD - St PIERRE (La Réunion)

tel: 02 62 49 92 54


Retourner vers « Archives : Fonctions statistiques »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité