Écriture fonction sigmoide pour standardisation rasters

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

Alexia Rondeau
Messages : 3
Enregistré le : 25 Oct 2017, 20:21

Écriture fonction sigmoide pour standardisation rasters

Messagepar Alexia Rondeau » 26 Oct 2017, 10:42

Bonjour à tous,
Je suis nouvelle sur ce forum et en le parcourant je n'ai pas trouvé la réponse à ma question car j'ai peur que ma question soit particulière à mon travail. Je travaille sur des données rasters. Je cherche à changer la valeur des pixels d'un raster en appliquant une fonction mathématique (pour "standardiser" avec la méthode fuzzy). J'ai des problèmes d'écriture de la fonction sigmoïde, car en appliquant la fonction telle qu'écrite ci dessous j'obtiens soit des valeurs 0 ou 1 et non pas une continuité de valeurs entre 0 et 1, donc je me dis qu'il doit y avoir une faute dans l'écriture.. Voici comment je l'écris:
f1<-x1 #(mon raster que je veux standardiser)
a<-2
b<-2000
f1[f1<=a]<- 0
f1[f1>a & f1<=b]<- 1/(1+exp(-5/a*(f1[f1>a & f1<=b]-(b+a)/2)))
f1[f1>b]<- 1
Voyez-vous un problème dans l'écriture de l'équation? Je n'arrive pas à trouver mon erreur..merci beaucoup pour votre aide!
Bonne journée à tous,
Alexia Rondeau

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Écriture fonction quadratique pour standardisation rasters

Messagepar Pierre-Yves Berrard » 26 Oct 2017, 12:16

Bonjour,

C'est sûrement dû à la forme de la fonction mathématique ?

Code : Tout sélectionner

curve(1/(1+exp(-5/a*(x-(b+a)/2))), from = a, to = b)
PY

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

Re: Écriture fonction quadratique pour standardisation rasters

Messagepar François Bonnot » 26 Oct 2017, 12:19

Bonjour,
1) Mieux vaut écrire une fonction f(x,a,b) puis l'appliquer aux données.
(Remarque : les 2 premières lignes de sigm1 ne semblent pas indispensables si les paramètres a et b sont corrects)

Code : Tout sélectionner

sigm1 <- function(x,a,b) {
    if (x<a) return(0)
    if (x>b) return(1)
    1/(1+exp(-5/a*(x-(b+a)/2)))
}

sigm <- function(x,a,b) sapply(x,sigm1,a,b)

2) Il s'agit bien d'une sigmoïde mais qui passe de 0 à 1 entre 499 et 503

Code : Tout sélectionner

a <- 2 ; b <- 1000
z <- seq(499,503,0.01)
plot(z,sigm(z,a,b),type='l')

z <- 0:1002
plot(z,sigm(z,a,b),type='l')
François

Alexia Rondeau
Messages : 3
Enregistré le : 25 Oct 2017, 20:21

Re: Écriture fonction quadratique pour standardisation rasters

Messagepar Alexia Rondeau » 29 Oct 2017, 12:21

Bonjour à tous les deux et merci pour vos réponses,
Je pense que je me suis mal exprimée car je ne cherche pas à dessiner/créer ou visualiser la fonction, en fait je cherche à remplacer chaque valeur de pixel (du raster) par sa valeur si on lui applique la fonction sigmoïde. par exemple pour les pixels dont la valeur est inférieure à 2, leur nouvelle valeur est 0, et pour les pixels dont la valeur est supérieure à 2000 alors leur nouvelle valeur est 1. Pour les pixels qui ont une valeur x entre 2 et 2000, je souhaiterais que leur nouvelle valeur soit sigm(x). Mais je souhaiterais créer un nouveau raster avec ces nouvelles valeurs, et non pas juste créer la fonction.. En tout cas merci beaucoup pour votre aide
Bon dimanche
Alexia

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

Re: Écriture fonction quadratique pour standardisation rasters

Messagepar François Bonnot » 30 Oct 2017, 07:36

Bonjour,
Votre question était très claire, peut-être ma réponse ne l'était-elle pas et je la précise.
je souhaiterais créer un nouveau raster avec ces nouvelles valeurs

Si votre raster est f1, alors vous obtenez votre nouveau raster au moyen de la fonction sigm() ci-dessus avec :

Code : Tout sélectionner

f2 <- sigm(f1,2,2000)

j'obtiens soit des valeurs 0 ou 1 et non pas une continuité de valeurs entre 0 et 1

C'est pour ça qu'il faut tracer la courbe. Vous voyez alors que votre sigmoïde passe de 0 à 1 pour les valeurs de pixel comprises entre 999 et 1003 (j'avais écrit plus haut 499 à 503 parce que j'avais pris b=1000 au lieu de 2000 mais ça ne change pas le fond du problème). Il y a bien une continuité de valeurs, mais les pixels inférieurs à 999 sont transformés en 0 et les pixels supérieurs à 1003 sont transformés en 1.
François

Alexia Rondeau
Messages : 3
Enregistré le : 25 Oct 2017, 20:21

Re: Écriture fonction sigmoide pour standardisation rasters

Messagepar Alexia Rondeau » 30 Oct 2017, 12:43

Bonjour François,
Merci beaucoup pour votre message, c'est maintenant tres clair!
Je me suis aperçue que j'ai parlé de fonction quadratique dans mon titre pour fonction sigmoide... C'est maintenant corrigé.
J'en profite pour vous demander une dernière aide; je souhaiterais faire la même chose que précédemment mais avec une fonction quadratique, ou le maximum (=1) est atteint pour la valeur 40. Si me souviens bien la valeur maximale est atteinte pour x=-b/2a. Mais encore une fois je ne sais pas comment l'écrire je suis debutante +++ dans R.. J'ai essayé de bricoler mais ça ne marche pas, et surtout R me dit qu'il n'y a pas de valeur 40 dans mon jeu de données, ce qui est possible. Il faudrait que je puisse dire à R de ne pas rester sur =40 mais de considérer plutôt 39.5-40.5, histoire d'être sûr d'avoir au moins une de mes donnees autour de 40.
J'espère être assez claire.. Bonne journée à vous
Alexia

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

Re: Écriture fonction sigmoide pour standardisation rasters

Messagepar François Bonnot » 30 Oct 2017, 13:45

Cette fois-ci la question n'est pas très claire. D'une façon générale, il suffit après avoir établi l'équation (ce qui sort du cadre de R) de la programmer en prenant exemple sur la sigmoïde ci-dessus. C'est particulièrement simple pour une fonction quadratique, par exemple:

Code : Tout sélectionner

quad <- function(x,a,b,c) { a*x^2 + b*x +c }
z <- seq(31,49,.1) ; plot(z,quad(z,-1/80,1,-19),type='l') ; abline(v=40)
François


Retourner vers « Questions en cours »

Qui est en ligne

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