% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/nmfae.R
\name{nmfae.DOT}
\alias{nmfae.DOT}
\title{DOT graph visualization for nmfae objects}
\usage{
nmfae.DOT(
  result,
  type = c("XCX", "YXCXY"),
  threshold = 0.01,
  sig.level = 0.1,
  rankdir = "LR",
  fill = TRUE,
  weight_scale = 5,
  weight_scale_x1 = weight_scale,
  weight_scale_theta = weight_scale,
  weight_scale_x2 = weight_scale,
  Y1.label = NULL,
  X1.label = NULL,
  X2.label = NULL,
  Y2.label = NULL,
  Y1.title = "Output (Y1)",
  X1.title = "Decoder (X1)",
  X2.title = "Encoder (X2)",
  Y2.title = "Input (Y2)",
  hide.isolated = TRUE
)
}
\arguments{
\item{result}{An object of class \code{"nmfae"} returned by \code{\link{nmfae}}.}

\item{type}{Character. Graph type: \code{"XCX"} (default) or \code{"YXCXY"}.}

\item{threshold}{Numeric. Edges with values below this are omitted. Default is 0.01.}

\item{sig.level}{Numeric or \code{NULL}. Significance level for filtering C edges
when inference results are available. Only edges with p-value below \code{sig.level}
are shown, with significance stars. Set to \code{NULL} to disable. Default is 0.1.}

\item{rankdir}{Character. Graph direction for DOT layout. Default is \code{"LR"} (left to right).}

\item{fill}{Logical. If \code{TRUE}, nodes are filled with color. Default is \code{TRUE}.}

\item{weight_scale}{Numeric. Base scale factor for edge widths. Default is 5.}

\item{weight_scale_x1}{Numeric. Scale factor for \eqn{X_1} edges.}

\item{weight_scale_theta}{Numeric. Scale factor for \eqn{\Theta} edges.}

\item{weight_scale_x2}{Numeric. Scale factor for \eqn{X_2} edges.}

\item{Y1.label}{Character vector of output variable labels.}

\item{X1.label}{Character vector of decoder basis labels.}

\item{X2.label}{Character vector of encoder basis labels.}

\item{Y2.label}{Character vector of input variable labels.}

\item{Y1.title}{Character. Title for output node group. Default is \code{"Output (Y1)"}.}

\item{X1.title}{Character. Title for decoder node group. Default is \code{"Decoder (X1)"}.}

\item{X2.title}{Character. Title for encoder node group. Default is \code{"Encoder (X2)"}.}

\item{Y2.title}{Character. Title for input node group. Default is \code{"Input (Y2)"}.}

\item{hide.isolated}{Logical. If \code{TRUE} (default), Y1 and Y2 nodes that have no
edges at or above \code{threshold} are excluded from the graph. Only
applies when \code{type = "YXCXY"}.}
}
\value{
A character string containing the DOT graph specification.
}
\description{
\code{nmfae.DOT} generates a DOT language string for visualizing the structure
of a three-layer NMF model. Two graph types are supported:
\code{"XCX"} shows encoder factors, \eqn{\Theta}, and decoder factors;
\code{"YXCXY"} shows the full structure from \eqn{Y_2} through \eqn{X_2}, \eqn{\Theta},
\eqn{X_1} to \eqn{Y_1}.

Edge widths are proportional to matrix element values, and edges below
\code{threshold} are omitted for clarity.
}
\section{Lifecycle}{

This function is \strong{experimental}. The interface may change in
future versions; details are to be described in an upcoming paper.
}

\examples{
\donttest{
set.seed(1)
Y <- matrix(runif(20), nrow = 4)
res <- nmfae(Y, rank = 2)
dot <- nmfae.DOT(res)
}
}
\seealso{
\code{\link{nmfae}}
}
