% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/mcml.R
\name{as_tna}
\alias{as_tna}
\alias{as_tna.mcml}
\alias{as_tna.default}
\title{Convert cluster_summary to tna Objects}
\usage{
as_tna(x)

\method{as_tna}{mcml}(x)

\method{as_tna}{default}(x)
}
\arguments{
\item{x}{A \code{cluster_summary} object created by \code{\link{cluster_summary}}.
The cluster_summary should typically be created with \code{type = "tna"} to
ensure row-normalized transition probabilities. If created with
\code{type = "raw"}, the raw counts will be passed to \code{tna::tna()}
which will normalize them.}
}
\value{
A \code{cluster_tna} object (S3 class) containing:
\describe{
\item{between}{A tna object representing cluster-level transitions.
Contains \code{$weights} (k x k transition matrix), \code{$inits}
(initial distribution), and \code{$labels} (cluster names).
Use this for analyzing how learners/entities move between high-level
groups or phases.}
\item{within}{Named list of tna objects, one per cluster. Each tna object
represents internal transitions within that cluster. Contains
\code{$weights} (n_i x n_i matrix), \code{$inits} (initial distribution),
and \code{$labels} (node labels). Clusters with single nodes or zero-row
nodes are excluded (tna requires positive row sums).}
}

A \code{netobject_group} with data preserved from each sub-network.

A \code{tna} object constructed from the input.
}
\description{
Converts a \code{cluster_summary} object to proper tna objects that can be
used with all functions from the tna package. Creates both a between-cluster
tna model (cluster-level transitions) and within-cluster tna models (internal
transitions within each cluster).
}
\details{
This is the final step in the MCML workflow, enabling full integration with
the tna package for centrality analysis, bootstrap validation, permutation
tests, and visualization.
\subsection{Requirements}{

The tna package must be installed. If not available, the function throws
an error with installation instructions.
}

\subsection{Workflow}{

\preformatted{
# Full MCML workflow
net <- build_network(data, method = "relative")
net$nodes$clusters <- group_assignments
cs <- cluster_summary(net, type = "tna")
tna_models <- as_tna(cs)

# Now use tna package functions
plot(tna_models$macro)
tna::centralities(tna_models$macro)
tna::bootstrap(tna_models$macro, iter = 1000)

# Analyze within-cluster patterns
plot(tna_models$clusters$ClusterA)
tna::centralities(tna_models$clusters$ClusterA)
}
}

\subsection{Excluded Clusters}{

A within-cluster tna cannot be created when:
\itemize{
\item The cluster has only 1 node (no internal transitions possible)
\item Some nodes in the cluster have no outgoing edges (row sums to 0)
}

These clusters are silently excluded from \code{$clusters}. The between-cluster
model still includes all clusters.
}
}
\examples{
mat <- matrix(runif(36), 6, 6)
rownames(mat) <- colnames(mat) <- LETTERS[1:6]
clusters <- list(G1 = c("A", "B"), G2 = c("C", "D"), G3 = c("E", "F"))
cs <- cluster_summary(mat, clusters, type = "tna")
tna_models <- as_tna(cs)
tna_models
tna_models$macro$weights
}
\seealso{
\code{\link{cluster_summary}} to create the input object,
\code{plot()} for visualization without conversion,
\code{tna::tna} for the underlying tna constructor
}
