Proba_photos_cours_chapt2-3 PDF
Document Details

Uploaded by BeautifulSpruce
ESIEA
Tags
Related
Summary
This PDF document provides a RStudio session for chapter 2 and 3, focusing on graph theory concepts like probability, independence, and dependence in a data analysis context. It outlines calculations related to different types of graph connections and describes their functions. The document explains these concepts in detail.
Full Transcript
## RStudio Session - Chap 2, Graphe de Connaissances ### Introduction - Dans ce cours, on étudie un jeu de données appelé *diabete*. - Le jeu de données *diabete* est chargé à partir d'un fichier `.rds` : ```{r} diabete <- readRDS('./Diabete_dataset.rds') head(diabete) str(diabete) ``` ### Grap...
## RStudio Session - Chap 2, Graphe de Connaissances ### Introduction - Dans ce cours, on étudie un jeu de données appelé *diabete*. - Le jeu de données *diabete* est chargé à partir d'un fichier `.rds` : ```{r} diabete <- readRDS('./Diabete_dataset.rds') head(diabete) str(diabete) ``` ### Graphe de Connaissances - Représente les observations sous forme de graphique et permet de définir une mesure d'association. - Chaque nœud correspond à une variable et chaque arc (flèche) correspond à une relation entre les variables aux extrémités. - Nous explorons les relations de dépendances ou d'indépendances probabilistes entre les variables. #### Définitions 1. **Définition (l'indépendance probabiliste):** - Soient deux événements $A$ et $B$. - Les événements $A$ et $B$ sont indépendants si la probabilité d'observer $A$ et $B$ conjointement est la même que de les observer séparément : $$ \mathbb{P}(A \cap B)=\mathbb{P}(A \mid B)\times\mathbb{P}(B)=\mathbb{P}(A)\times\mathbb{P}(B). $$ - *Exemple:* - On lance deux dés équilibrés à 6 faces, $D_1$ et $D_2$, simultanément. - Soient $A$ l'événement "Faire un 6 avec $D_1$" et $B$ l'événement "Faire un 4 avec $D_2$". - Quelle est la probabilité d'observer simultanément $A$ et $B$ ? $\\~\\$ - La probabilité d'observer $A$ est $\mathbb{P}(A) = \frac{1}{6}$. - La probabilité d'observer $B$ est $\mathbb{P}(B) = \frac{1}{6}$. - La probabilité d'observer conjointement $A$ et $B$ est $\mathbb{P}(A\cap B)=\mathbb{P}(A \mid B)\times\mathbb{P}(B)=\mathbb{P}(A)\times\mathbb{P}(B) = \frac{1}{6} \times \frac{1}{6}=\frac{1}{36}$. - Donc $A$ et $B$ sont indépendants. 2. **Définition (la dépendance probabiliste):** - Soient deux événements $A$ et $B$. - Les événements $A$ et $B$ sont dépendants s'il n'est pas possible de dire qu'ils sont indépendants. - Par conséquent, on a : $$ \mathbb{P}(A\cap B) = \mathbb{P}(A \mid B)\times\mathbb{P}(B). $$ #### Implémentation - On commence par modifier la fonction `UpdateAmat()` : ```{r} UpdateAmat <- function(u, v, amat, mode='edge', update.with=0) { switch(mode, edge={ amat[u, v] <- update.with amat[v, u] <- update.with }, arc={ amat[u, v] <- update.with amat[v, u] <- 1-update.with } ) return(amat) } ``` - On définit ensuite une fonction pour créer un ensemble de séparation en utilisant l'algorithme de d-séparation ```{r} getNbr <- function(u, v, G, K) { k <- 1 nbru <- nbr(G, u) nbrv <- nbr(G, v) while (k<K) { k <- k+1 nbru <- unique(unlist(sapply(nbru, function(n) nbr(G, n)))) nbrv <- unique(unlist(sapply(nbrv, function(n) nbr(G, n)))) nbru <- setdiff(nbru, u) nbrv <- setdiff(nbrv, v) } return(intersect(nbru, nbrv)) } ``` - A l'aide de cette fonction, on définit une nouvelle fonction pour créer un graphe de dépendance conditionnelle: ```{r} ##Fonction principale pour créer un graphe de dépendance conditionnelle gen_dsep_graph <- function(data, alpha){ graphe <- empty.graph(names(data)) edges <- matrix(data=1,nrow=ncol(data),ncol=ncol(data)) rownames(edges) <- colnames(edges) <- names(data) diag(edges) <- 0 node.pairs <- list() for(arc_name in names(node.pairs)) { node.pairs[[arc_name]]$is.Present <- TRUE node.pairs[[arc_name]]$dsep <- c() node.pairs[[arc_name]]$pvals <- c() } ## On parcourt chaque arc for (K in seq(1,ncol(data)-2)) { for(arc_name in names(node.pairs)) { nodes <- unlist(strsplit(arc_name, '-')) separators <- getNbr(nodes[1], nodes[2], graphe, K) if (length(separators)!=0) { pvalues <- sapply(separators, function(z) ci.test(nodes[1], nodes[2], z=z, data = data,test="x2")$p.value) node.pairs[[arc_name]]$pvals <- c(node.pairs[[arc_name]]$pvals, pvalues) adjusted.p.vals <- p.adjust(node.pairs[[arc_name]]$pvals, 'bonferroni') if(any(tail(adjusted.p.vals,length(pvalues))>alpha)) { edges <- UpdateAmat(nodes[1], nodes[2], edges, update.with = 0) amat(graphe) <- edges node.pairs[[arc_name]]$dsep <- c(node.pairs[[arc_name]]$dsep, unlist(Z[which(tail(adjusted.p.vals,length(pvalues))>alpha)])) node.pairs[[arc_name]]$is.Present <- FALSE } } } } par(mar = c(0, 0, 0, 0)) plot(graphe) return(graphe) } ##On crée le graphe final graphe <- gen_dsep_graph(diabete, alpha=0.05) ``` - La fonction `UpdateAmat(u,v,amat,mode='edge',update.with=0)` permet de modifier la matrice d'adjacence en fonction du mode choisi (arc ou arête) et de mettre à jour la valeur. - Les arcs de ce graphe sont orientés en utilisant la règle de d-séparation : - La d-séparation est une règle qui nous permet de décrire dans quelles conditions l'information peut circuler d'une variable à l'autre. - Elle se base sur les trois sous-ensembles de nœuds $A$, $B$ et $C$, qui sont disjoints. - Soient deux chemins qui relient $A$ à $B$. Ces deux chemins sont d-séparés par $C$ s'il existe au moins un nœud $v$ qui remplit l'une des conditions suivantes : - La première condition implique que les deux arcs du chemin passant par $v$ sont convergents et qu'il n'y a aucun descendant (les nœuds que l'on peut atteindre en suivant les arcs depuis $v$) qui se trouve dans $C$. - Ou, $v$ appartient à $C$ et les deux arcs du chemin passant par lui ne sont pas convergents. $\\~\\$ - En pratique, pour identifier ces relations d'indépendances conditionnelles, on réalise des tests d'indépendance conditionnelle sur chaque ensemble de 3 variables. - On crée ensuite un graphe et on utilise la fonction `UpdateAmat()` pour mettre à jour le graphe en fonction des résultats des tests. - On utilise la règle d-séparation pour orienter les arcs du graphe. - Le graphe obtenu représente l'ensemble des dépendances et des indépendances entre les variables du jeu de données. - Chaque arc correspond à une relation de dépendance entre les variables représentées par les nœuds à ses extrémités. - L'absence d'un arc entre deux nœuds signifie que les variables sont indépendantes conditionnellement aux variables représentées par les nœuds qui les séparent. #### Circulation de l'information - Intéressons-nous maintenant à la façon dont la connaissance circule dans le graphe. - Au début de cette partie, on a établi que le graphe de connaissances était composé de nœuds et d'arcs. - Mais on observe que, dans le graphe d'indépendances conditionnelle, il n'y a pas d'arcs, mais des arêtes. - Pour déterminer la bonne orientation de chaque arête, il faut savoir comment et dans quelle direction l'information circule dans le graphe. - On utilise la règle de d-séparation pour déterminer la direction du flux d'information dans le graphe. - La d-séparation est une règle qui permet de décrire dans quelles conditions l'information peut circuler d'une variable à l'autre. - La fonction `UpdateAmat()` est modifiée pour répondre à la question d'orientation: - Elle prend en arguments deux nœuds, $u$ et $v$, une matrice d'adjacence, `amat`, le mode (arc ou arête), et la valeur de mise à jour. - On utilise ensuite la fonction `switch()` pour appliquer la bonne orientation. - On peut ensuite utiliser la fonction pour mettre à jour le graphe. - Le graphe obtenu représente un ensemble de dépendances et d'indépendances conditionnelles. - Il nous reste ensuite à orienter les autres arcs du graphe de façon à ne créer aucune nouvelle connexion convergente. - Pour cela, on va utiliser la fonction d-séparation. - Le graphe obtenu reflète la manière dont les variables sont dépendantes ou indépendantes conditionnellement aux autres variables. #### Conclusion - Nous avons appris à créer des graphes d'indépendances conditionnelles. - On a appris la règle de d-séparation. - De plus, on a appris à utiliser la fonction `UpdateAmat()` pour mettre à jour le graphe. - Ces graphes de dépendances conditionnelles peuvent être utilisés pour explorer les relations entre les variables et pour construire des modèles de prédiction.