semsim               package:ontoTools               R Documentation

_C_o_m_p_u_t_e _s_e_m_a_n_t_i_c _s_i_m_i_l_a_r_i_t_y _m_e_a_s_u_r_e _f_o_r _t_e_r_m_s _i_n
_a_n _o_b_j_e_c_t-_o_n_t_o_l_o_g_y _c_o_m_p_l_e_x

_D_e_s_c_r_i_p_t_i_o_n:

     Compute semantic similarity measure for terms in an
     object-ontology complex

_U_s_a_g_e:

     semsim(c1, c2, ooc, acc=NULL, pc=NULL)
     conceptProbs(ooc,acc=NULL,inds=NULL) 
     subsumers(c1, c2, ont, acc=NULL) 
     pms(c1, c2, ooc, acc=NULL, pc=NULL) 
     usageCount(map,acc,inds)

_A_r_g_u_m_e_n_t_s:

      c1: c1, c2: "character" terms to be compared

      c2: c1, c2: "character" terms to be compared

     ooc: ooc: an object of class "OOC": object-ontology complex

     ont: ont: an object of class "ontology": annotated rooted DAG

     acc: acc: optional (sparse) accessibility matrix for the ontology

      pc: pc: optional vector of concept probabilities, if pre-computed

     map: map: OOmap component of an ooc

    inds: inds: vector of numeric indices, row indices of
          object-ontology map to be processed

_D_e_t_a_i_l_s:

     For large ontologies, computation of the term accessibility
     relationships and term probabilities can be costly. Once these are
     computed to support one semsim calculation, they should be saved. 
     The acc and pc parameters allow use of this saved information.

_V_a_l_u_e:

     semsim returns the measure of semantic similarity cited by Lord et
     al (2003).

_A_u_t_h_o_r(_s):

     Vince Carey <stvjc@channing.harvard.edu>

_R_e_f_e_r_e_n_c_e_s:

     PW Lord et al, Bioinformatics, 19(10)2003:1275

_E_x_a_m_p_l_e_s:

     #
     # we are given a graph of GOMF and the OOmap between LL and GOMF
     # derived from humanLLMappings and stored as data resources in
     # ontoTools -- these will have to be updated regularly
     #
     data(goMFgraph.1.15)
     data(LL2GOMFooMap.1.15)
     #
     # build the rooted DAG, the ontology, and the OOC objects
     #
     gomfrDAG <- new("rootedDAG", root="GO:0003674", DAG=goMFgraph.1.15)
     GOMFonto <- new("ontology", name="GOMF", version="bioc GO 1.15", rDAG=gomfrDAG)
     LLGOMFOOC <- makeOOC(GOMFonto, LL2GOMFooMap.1.15)
     #
     # we are given the accessibility matrix for the GO MF graph as a 
     # data resource, and we can compute some term probabilities
     #
     data(goMFamat.1.15)
     pc <- conceptProbs(LLGOMFOOC, goMFamat.1.15, inds=1:20)
     #
     # now we will get a sample of GO MF terms and compute the
     # semantic similarities of pairs of terms in the sample
     #
     data(LL2GOMFcp.1.15) # full set of precomputed concept probabilities
     library(GO.db)
     library(Biobase)
     library(combinat)
      library(annotate)
     GO() # get the GO environments
     GOtags <- ls(GOTERM)
     GOlabs <- mget(GOtags, GOTERM, ifnotfound=NA)
     GOMFtags <- GOtags[ sapply(GOlabs,Ontology)=="MF" ]
     GOMFtags <- GOMFtags[!is.na(GOMFtags)]
     GOMFtermObs <- mget(GOMFtags,env=GOTERM)
     GOMFterms <- sapply( GOMFtermObs, Term )
     ntags <- length(GOMFtags)
     if (any(duplicated(GOMFterms)))
      {
      dups <- (1:ntags)[duplicated(GOMFterms)]
      GOMFterms[dups] <- paste(GOMFterms[dups],".2",sep="")
      }
     #names(GOMFterms) <- GOMFtags
     set.seed(1234)
     # does not lead to common samples across platforms...
     st <- sample(names(GOMFterms),size=50) # take the sample
     st <- intersect(st, names(LL2GOMFcp.1.15))[1:10] # use only those terms available in bioc GO 1.15
     # thus ...
     st = c("GO:0004397", "GO:0030215", "GO:0042802", "GO:0008504", "GO:0008640", 
     "GO:0008528", "GO:0008375", "GO:0005436", "GO:0004756", "GO:0003729"
     )
     pst <- combn(st,2)   # get a matrix with the pairs of terms in columns
     bad = c(4L, 12L, 19L, 25L, 31L, 32L, 33L, 34L, 35L) # can't use 8640
     pst = pst[,-bad]
     npst <- ncol(pst)
     ss <- rep(NA,npst)
     for (i in 1:npst)  # compute semantic similarities
       {
       cat(i)
       ss[i] <- semsim( pst[1,i], pst[2,i], ooc=LLGOMFOOC, acc=goMFamat.1.15, pc=LL2GOMFcp.1.15 )
       }
     print(summary(ss))
     top <- (1:npst)[ss==max(ss,na.rm=TRUE)][1]  # index of the most similar pair
                  # note -- must come to an understanding of the NAs
     print( GOMFterms[ as.character(pst[,top]) ] )
     pen <- (1:npst)[ss==max(ss[-top],na.rm=TRUE)][1] # second most similar
     print( GOMFterms[ as.character(pst[,pen]) ] )

