Variogramme et Krige

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Edgar Lopez
Messages : 1
Enregistré le : 16 Mai 2019, 13:02

Variogramme et Krige

Messagepar Edgar Lopez » 17 Mai 2019, 15:35

Bonjour,

je travaille actuellement sur la résiliation de contrats en assurance. Il m'ai demandé de construire un zonier comportemental mesurant le risque de résiliation à la maille "commune" sur la France. Pour ce faire je possède une BDD contenant des millions de contrats différents. La variable cible spécifie si il y a eu résiliation ou non du contrat d'assurance. J'ai donc effectué une régression logistique sur cette variable et j'ai déjà pu projeter les résidus de cette dernière sur une carte.

Mon problème se situe au niveau de l'interpolation spatiale. Il y a de nombreuses communes où les contrats sont inexistants. Il faut donc prévoir le risque sur ces zones. Après quelques recherches, j'ai décidé d'utiliser la méthode du Krige qui semble être la plus adaptée dans le domaine. Cependant après avoir effectué le variogramme, la fonction krige tourne indéfiniment. J'aimerais donc savoir si ma démarche est la bonne et si elle ne comporte pas d'erreurs.

J'ai donc mon dataframe res_auto contenant les latitudes et longitudes (x et y) des communes et leur résidu associé. (36742 lignes)

Code : Tout sélectionner

> head(res_auto)
# A tibble: 6 x 4
  commune     x      y residus_resil
  <chr>   <dbl>  <dbl>         <dbl>
1 32460    43.7 -0.188         0.144
2 51141    48.8  4.54          0   
3 77130    48.9  2.93          0.229
4 63379    46.0  3.13          0.265
5 62050    50.4  2.10          0.341
6 13020    43.4  5.53          0.354


J'assigne au dataframe les coordonnées x et y créant ainsi un spatialpoints dataframe puis j'applique le variogramme sur les résidus en omettant les valeurs manquantes. "nugget" est déterminé via le plot de auto_vgm.

Code : Tout sélectionner

miss <- which(is.na(res_auto$residus_resil))
no_miss <- which(!is.na(res_auto$residus_resil))

auto_vgm <- variogram(residus_resil ~ x + y, res_auto[no_miss, ])
vgm.fit<-fit.variogram(auto_vgm,vgm(model="Sph", nugget = 0.02), fit.sills = TRUE, fit.ranges = TRUE)
plot(auto_vgm,vgm.fit)


auto_vgm me donne ceci :

Code : Tout sélectionner

> auto_vgm
         np      dist      gamma dir.hor dir.ver   id
1 158116884  1.877717 0.01969131       0       0 var1
2 249386291  4.588087 0.01936867       0       0 var1
3 101074254  7.176633 0.02056242       0       0 var1
4   9493121 10.133665 0.02033806       0       0 var1
5    494460 13.245340 0.02644974       0       0 var1
6      2205 15.452550 0.01954190       0       0 var1


et le vgm.fit ce qui suit :

Code : Tout sélectionner

> vgm.fit
  model      psill   range
1   Nug 0.02267848 0.00000
2   Sph 0.00000000 5.15085


Il se trouve que les points sont tous quasiment alignées et que le plot de vgm.fit donne donc une droite horizontale. Dois-je en déduire qu'il n'existe pas de corrélation spatiale entre les résidus ?

Par la suite j'exécute la fonction krige en prenant comme newdata les communes sans résidus.

Code : Tout sélectionner

km <- krige(residus_resil ~ x + y, res_auto[no_miss, ], newdata = res_auto[miss, ], model = vgm.fit)


Cependant le code tourne indéfiniment. Ai-je fait une erreur quelque part ?

Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité