view hmm/hmm.xml @ 0:e090cf6dd3f5 draft

Imported from capsule None
author devteam
date Thu, 22 Jan 2015 10:40:18 -0500
parents
children 38f5cd46ffd3
line wrap: on
line source

<tool id="hmm_1" name="Fit HMM " version="1.0.0">
  <description>on numeric data</description>
  <command interpreter="bash">\$R_SCRIPT_PATH/r_wrapper.sh $script_file</command>

  <inputs>
    <param name="input" type="data" format="tabular" label="Dataset"/>
    <param name="var_cols" label="Select columns containing observations " type="data_column" data_ref="input" numerical="True" multiple="true" >
        <validator type="no_options" message="Please select at least one column."/>
    </param>
    <param name="samp_col" label="Select column containing sample numbers " type="data_column" data_ref="input" numerical="True" multiple="false" >
        <validator type="no_options" message="Please select a column."/>
    </param>
    <param name="header" type="select" label="Treat first line as header? ">
        <option value="yes" selected="true">Yes</option>
        <option value="no">No</option>
    </param>
    <param name="nStates" size="10" type="integer" value="2" label="Number of hidden states " />
    <conditional name="disChoice">
    	<param name="dis" type="select" label="Distribution">
            <option value="NORMAL" selected="true">Normal</option>
            <option value="DISCRETE">Discrete</option>
            <option value="MIXTURE">Mixture</option>
        </param>
    	<when value="NORMAL" />
        <when value="DISCRETE" />
        <when value="MIXTURE">
            <param name="nMixt" size="10" type="integer" value="2" label="Number of mixtures of normal distributions " />
        </when>
    </conditional>
    <!--
    <conditional name="asymptChoice">
	    <param name="asymptCov" type="select" label="Compute asymptotic covariance matrix? ">
	        <option value="FALSE" selected="true">No</option>
	        <option value="TRUE">Yes</option>
	    </param>
	    <when value="FALSE" />
	    <when value="TRUE">
            <param name="asymptMethod" type="select" label="Method for computing asymptotic covariance matrix ">
	        <option value="nlme" selected="true">nlme</option>
	        <option value="optim">optim</option>
	    </param>
        </when>
    </conditional> 
    -->
  </inputs>

  <configfiles>
    <configfile name="script_file">
      ## Setup R error handling to go to stderr
      options( show.error.messages=F, 
               error = function () { cat( geterrmessage(), file=stderr() ); q( "no", 1, F ) },
               warn = -1 )
      suppressPackageStartupMessages(library('RHmm'))
      
      #if str($header) == "yes"
      	inp = read.table( "${input.file_name}", header=T )
      #else
      	inp = read.table( "${input.file_name}", header=F )
      #end if

      samp_numbers = unique(inp[, ${samp_col}])
      
      if (length(samp_numbers) == 1){
      samp_list = inp[,c(${var_cols})]
      } else { 
      samp_list=list()
      for (i in 1:length(samp_numbers)) {
      	samp_list[[i]] = inp[(inp[,${samp_col}] == samp_numbers[i]),c(${var_cols})]
      }
      }
      
      nStates = ${nStates}
      dis = "$disChoice['dis']"
      nMixt = 0
      
      #if $disChoice['dis'] == "MIXTURE"
      nMixt = ${disChoice.nMixt}
	  #end if
	  
      ##asymptCov = $asymptChoice['asymptCov']
      asymptCov = "FALSE"
      asymptMethod = "nlme"
      
      ##if (asymptCov == "TRUE") {
      ##	asymptMethod = "${asymptChoice.asymptMethod}"
      ##}
      
      #if $disChoice['dis'] == "MIXTURE"
      	if (asymptCov == "TRUE") {
      		myfit = HMMFit(samp_list, nStates=nStates, dis=dis, nMixt=nMixt, asymptCov=asymptCov, asymptMethod=asymptMethod)
      	} else {
      		myfit = HMMFit(samp_list, nStates=nStates, dis=dis, nMixt=nMixt) 
      	}
      #else
      	if (asymptCov == "TRUE") {
      		myfit = HMMFit(samp_list, nStates=nStates, dis=dis, asymptCov=asymptCov, asymptMethod=asymptMethod)
      	} else {
      		myfit = HMMFit(samp_list, nStates=nStates, dis=dis)
      	}
      #end if
      
      myfittxt=capture.output(myfit)
      cat(myfittxt,file="${out_file1}",sep="\n")
      
    
      samp_list_stateSol = list()
      if (length(samp_numbers) == 1){
      	samp_list_stateSol[[1]]=unlist(viterbi(myfit, samp_list)["states"])
      } else { 
      	for (i in 1:length(samp_numbers)) {
      	samp_list_stateSol[[i]]=unlist(viterbi(myfit, samp_list[[i]])["states"])
      	}
      }
      inp_stateSol=cbind(inp,unlist(samp_list_stateSol))
	  write.table(inp_stateSol,file="${out_file2}",sep="\t",row.names=F,col.names=F,quote=F)
	  
    </configfile>
  </configfiles>

  <outputs>
    <data format="txt" name="out_file1" />
    <data format="input" name="out_file2" />
  </outputs>

   <requirements>
    	<requirement type="set_environment">R_SCRIPT_PATH</requirement>
    	<requirement type="package" version="2.15.0">R</requirement>
  </requirements>
  
<help>

.. class:: infomark

**What it does**

This tool uses the 'HMMFit' and 'viterbi' functions from 'RHmm' library from R statistical package to fit an Hidden Markov Model using Baum-Welch algorithm, and calculate the optimal hidden states sequence using Viterbi's algorithm. 

It returns two outputs - one containing summary statistics for HMMFit, and the other containing state numbers appended as a new column to the input data.

*Ollivier TARAMASCO and Sebastian Bauer (2010). RHmm: Hidden Markov Models simulations and estimations. R package version 1.4.4. http://CRAN.R-project.org/package=RHmm.*

-----

.. class:: warningmark

**Note**

The tool fails if any of the observation columns contain non-numeric data.


</help>
</tool>