<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>admin &#8211; Aptech</title>
	<atom:link href="https://www.aptech.com/blog/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.aptech.com</link>
	<description>GAUSS Software - Fastest Platform for Data Analytics</description>
	<lastBuildDate>Tue, 17 Mar 2026 21:06:29 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>GAUSS 26: Profiler, L-BFGS-B Optimizer, and 30+ New Features</title>
		<link>https://www.aptech.com/blog/gauss26/</link>
					<comments>https://www.aptech.com/blog/gauss26/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 04 Feb 2026 21:16:00 +0000</pubDate>
				<category><![CDATA[Releases]]></category>
		<guid isPermaLink="false">https://www.aptech.com/?p=11585667</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<p>GAUSS 26 introduces a built-in profiler, a new L-BFGS-B optimizer, modern language syntax, and over 30 new features and enhancements. All existing code continues to work unchanged.</p>
<p>Whether you're tracking down a performance bottleneck, estimating a model with bound constraints, or transforming data interactively, this release has something that will change how you work. Here's what's new.</p>
<hr />
<h2 id="find-your-slow-code-in-seconds">Find your slow code in seconds</h2>
<div id="profiler">
<p>GAUSS 26 includes a built-in profiler. Open any program, press <strong>Shift+F5</strong> (or use the run button in the Profiler), and GAUSS profiles every line and procedure call as it runs.</p>
<p>The profiler panel has three tabs:</p>
<ul>
<li><strong>Hot Spots</strong> — every line of code ranked by time spent, so you can see exactly where your program spends the most time</li>
<li><strong>Call Tree</strong> — a hierarchical view of which procedures call which, and how long each takes</li>
<li><strong>Output</strong> — the program's normal output, so you can verify results while profiling</li>
</ul>
<img src="https://www.aptech.com/wp-content/uploads/2026/02/gauss26-profiler-hot-spots.jpg" alt="GAUSS 26 profiler Hot Spots tab showing bootstrap_ols procedure with inv() on line 14 consuming 50.4% of execution time" width="2040" height="1058" class="alignnone size-full wp-image-11585745" />
<p>Double-click any entry to jump directly to that line in the editor.</p>
<p>If you've ever wanted to make your estimation faster, the profiler tells you exactly where to focus. No print statements, no guessing — you see the bottleneck immediately.</p>
<hr />
<h2 id="bound-constrained-optimization-with-l-bfgs-b">Bound-constrained optimization with L-BFGS-B</h2>
<p>The new <code>minimize</code> function brings the L-BFGS-B algorithm to GAUSS — the standard method for smooth unconstrained and bound-constrained optimization problems.</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">// Define an objective function
proc (1) = rosenbrock(x);
    retp( (1 - x[1])^2 + 100 * (x[2] - x[1]^2)^2 );
endp;

// Set up bounds
x0 = { -1, -1 };

struct minimizeControl ctl;
ctl = minimizeControlCreate();
ctl.bounds = { -5 5, -5 5 };

// Optimize
struct minimizeOut out;
out = minimize(&amp;rosenbrock, x0, ctl);</code></pre>
<pre>Solution:       x = 1.0000, 1.0000
Function value: 5.69e-14
Return code:    0 (converged)</pre>
<p><code>minimize</code> supports passing extra data arguments directly to the objective function, so you don't need globals to get data into your likelihood. This is useful for MLE where parameters must stay positive (e.g., variance components) or bounded (e.g., correlations between -1 and 1).</p>
<p>L-BFGS-B is the standard choice for smooth bound-constrained problems. For nonlinear equality or inequality constraints, use <code>sqpSolveMT</code>. For unconstrained problems, <code>minimize</code> and <code>optmt</code> are both good options — <code>minimize</code> uses less memory for high-dimensional problems.</p>
<hr />
<h2 id="modern-language-syntax">Modern language syntax</h2>
<p>GAUSS 26 adds conveniences that reduce friction in everyday code — sequences, printing, and error messages all work the way you'd expect.</p>
<h3 id="colon-operator">Colon operator</h3>
<p>GAUSS now supports the colon operator for creating sequences:</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">// Before
x = seqa(1, 1, 5);

// Now
x = 1:5;</code></pre>
<pre>1  2  3  4  5</pre>
<p>The stepped form creates sequences with custom increments:</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">odds = 1:2:10;
countdown = 10:-2:1;
grid = 0:0.5:2;</code></pre>
<pre>odds:       1  3  5  7  9
countdown:  10  8  6  4  2
grid:       0  0.5  1  1.5  2</pre>
<p>Both forms work with variables and expressions (<code>a:b</code>, <code>(n-1):(n+1)</code>, <code>minc(x):maxc(x)</code>). Inside brackets, the colon continues to work as an index range — <code>x[1:5]</code> selects elements 1 through 5, as it always has.</p>
<h3 id="print-expressions">Print expressions</h3>
<p><code>print</code> now accepts expressions directly without requiring them to be surrounded with parentheses:</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">x = 3;
y = 7;
print x + y;
print x .* y;</code></pre>
<pre>10
21</pre>
<p>All arithmetic, comparison, element-wise, and string operators are supported. The existing whitespace-sensitive behavior is preserved — <code>print a -b;</code> still prints two items, while <code>print a - b;</code> prints the difference.</p>
<h3 id="better-error-messages">Better error messages</h3>
<p>Error messages now tell you what went wrong and where to look.</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">x = rndn(10);</code></pre>
<pre>Before:  &quot;Wrong number of arguments&quot;
Now:     &quot;'rndn' requires 2-3 arguments, got 1&quot;</pre>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">rndn = 100;</code></pre>
<pre>Before:  &quot;Syntax error&quot;
Now:     &quot;Illegal use of reserved word 'rndn'&quot;</pre>
<hr />
<h2 id="statistical-testing-functions">Statistical testing functions</h2>
<p>GAUSS 26 adds four statistical testing functions to the base package.</p>
<p><strong><code>ttest</code></strong> — Two-sample and paired t-tests with Welch and pooled variance options, confidence intervals, and F-test for equality of variances.</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">// Compare treatment vs control means
result = ttest(treatment, control);</code></pre>
<p><strong><code>shapiroWilk</code></strong> — The standard test for univariate normality.</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">result = shapiroWilk(residuals);
print result.w;
print result.p;</code></pre>
<pre>W statistic: 0.9788
p-value:     0.1070</pre>
<p><strong><code>mvnTest</code></strong> — Multivariate normality testing using Henze-Zirkler (default), Mardia's skewness and kurtosis, Doornik-Hansen, or Royston methods. Useful for checking VAR residuals or validating distributional assumptions before estimation.</p>
<p><strong><code>contingency</code></strong> — Comprehensive analysis of contingency tables: chi-squared tests, Fisher's exact test, odds ratios, relative risk, and measures of association including Cramer's V, Gamma, Kendall's tau-b, and Cohen's Kappa.</p>
<hr />
<h2 id="transform-data-without-writing-code">Transform data without writing code</h2>
<div id="transform">
<p>The new Transform Tab in the Symbol Editor lets you apply common data transformations interactively — lag, first difference, percent change, moving average, log, standardize, normalize, and more.</p>
<video autoplay loop muted playsinline style="width:100%;">
    <source src="https://www.aptech.com/wp-content/uploads/2026/01/xle-transform-tab.mp4" type="video/mp4">
</video>
<p>Select a column, choose a transformation, and the result appears as a new column. GAUSS generates the equivalent code automatically, so you can incorporate the transformation into your scripts later.</p>
<p>String columns support lowercase, uppercase, trim, and text replacement. Date columns support extracting year, month, day, quarter, week, and time components.</p>
<hr />
<h2 id="data-management">Data management</h2>
<p>New functions for the tasks that bookend every estimation: reshaping data, converting frequencies, and balancing panels.</p>
<h3 id="aggregate-time-series-to-any-frequency">Aggregate time series to any frequency</h3>
<p>The new <code>tsAggregate</code> function converts time series data from higher to lower frequencies:</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">data = loadd("daily_prices.csv", "date(Date) + Price + Volume");

// Convert daily to monthly: last price, total volume
monthly = tsAggregate(data, "monthly", "last" $| "sum");</code></pre>
<p>Supports second, minute, hourly, daily, monthly, quarterly, and yearly frequencies. Aggregation methods include last, first, mean, sum, max, min, median, standard deviation, count, and mode.</p>
<h3 id="add-computed-columns-to-dataframes">Add computed columns to dataframes</h3>
<p>The new <code>dfaddcol</code> function adds a named column to a dataframe in one step:</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">auto2 = dfaddcol(auto2, "price_k", auto2[., "price"] ./ 1000);
auto2 = dfaddcol(auto2, "log_mpg", ln(auto2[., "mpg"]));</code></pre>
<pre>           make     price       mpg   price_k   log_mpg
    AMC Concord      4099        22     4.099     3.091
      AMC Pacer      4749        17     4.749     2.833
     AMC Spirit      3799        22     3.799     3.091
  Buick Century      4816        20     4.816     2.996
  Buick Electra      7827        15     7.827     2.708</pre>
<p>The new columns are named and ready to use. If you're building derived variables for estimation, this keeps your workflow clean and your column names explicit.</p>
<h3 id="balance-panel-datasets">Balance panel datasets</h3>
<p><code>pdBalance</code> standardizes panel data so each group has identical time coverage:</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">balanced = pdBalance(panel_data, "fill");</code></pre>
<p>This fills gaps with missing values so every group spans the full time range — a common preprocessing step before panel estimation. Pairs naturally with <code>pdLag</code> and <code>pdSummary</code> introduced in GAUSS 25.</p>
<h3 id="multicolumn-aggregation">Multicolumn aggregation</h3>
<p>The <code>aggregate</code> function now supports grouping by more than one variable:</p>
<pre class="hljs-container hljs-container-solo"><code class="lang-gauss">method = "max";
variables = "day" $| "time";
max_tips = aggregate(tips, method, variables);</code></pre>
<hr />
<h2 id="editor-and-ide">Editor and IDE</h2>
<h3 id="spot-global-variables-in-your-code">Spot global variables in your code</h3>
<p>Global variables in procedures prevent you from adding <code>threadFor</code> or other parallelization to your code and make maintenance difficult. GAUSS 26 lets you find them instantly — procedures that reference globals now show those variables with an orange highlight in the editor. Hover over any highlighted variable to see its name in a tooltip. Toggle it on or off via <em>Edit &gt; Preferences &gt; Highlight globals in procs</em>.</p>
<h3 id="streamlined-graphics-interface">Streamlined graphics interface</h3>
<p>The Graphics page now combines Graph Settings and Canvas Settings into a single tabbed interface with tabs for Axes, Lines, Symbols, Text, and Canvas. A new toolbar toggle provides quick access.</p>
<h3 id="filter-widgets-for-navigation">Filter widgets for navigation</h3>
<p>New filter widgets on the Command page and Data page let you search through command history and workspace symbols as you type. Press <strong>Ctrl+K</strong> (Cmd+K on Mac) to activate the filter in either view. The Open Symbol dialog on the Data page also includes autocomplete.</p>
<hr />
<h2 id="additional-enhancements">Additional enhancements</h2>
<ul>
<li><strong><code>repmat</code></strong> — tile a matrix: <code>repmat(A, 3, 2)</code> creates a matrix of 3x2 copies of A (MATLAB equivalent: <code>repmat</code>)</li>
<li><strong><code>findIdx</code></strong> — return indices where a condition is true: <code>findIdx(x .&gt; 0)</code> (R equivalent: <code>which()</code>)</li>
<li><strong><code>diagmat</code></strong> — create diagonal or off-diagonal matrices from vectors, with optional offset for super- or subdiagonals</li>
<li><strong><code>sortc</code> and <code>sortmc</code></strong> — new <code>sort_order</code> parameter for ascending (1) or descending (-1) sorting</li>
<li><strong><code>endswith</code></strong> — complements <code>startsWith</code> for string and dataframe filtering</li>
<li><strong><code>strrindx</code></strong> — now accepts vector input for search patterns</li>
<li><strong><code>quantileFit</code></strong> — new convergence diagnostics (<code>qOut.converged</code>, <code>qOut.iterations</code>) and improved input validation with clear error messages</li>
<li><strong><code>sqpSolveMT</code></strong> — improved robustness for challenging optimization problems with better adaptive trust region management</li>
<li><strong><code>eigv</code></strong> — 2.6x faster for 2x2 matrices using closed-form solution, with automatic fallback to the standard algorithm for near-repeated eigenvalues</li>
<li><strong>Symbol Editor</strong> — new &quot;Starts With&quot;, &quot;Does Not Start With&quot;, &quot;Ends With&quot;, &quot;Does Not End With&quot; filters; pending changes shown in blue text; column headers show asterisk for pending filters or transforms</li>
<li><strong>Package Manager</strong> — detailed error messages with categorized troubleshooting steps</li>
<li>New button on Edit and Debug pages opens matrices, strings, and dataframes directly in the Symbol Editor</li>
</ul>
<hr />
<h2 id="whats-coming-next">What's coming next</h2>
<p>Later this year, we'll be shipping new Bayesian VAR estimation with Minnesota priors, conditional forecasting, and hyperparameter optimization — directly from GAUSS, powered by new high-performance computation libraries. Stay tuned.</p>
<hr />
<h2 id="get-started-with-gauss-26">Get started with GAUSS 26</h2>
<p>GAUSS 26 is a free update for users with active maintenance. Download for <a href="http://www.aptech.com/downloads/26/GAUSS_26_Win_64.zip">Windows</a> or <a href="http://www.aptech.com/downloads/26/GAUSS_26_MacOSX_64.zip">macOS</a>, or <a href="https://www.aptech.com/contact/">contact us</a> for a trial license.</p>
<p>New to GAUSS? See our <a href="https://docs.aptech.com/">Getting Started Guide</a>. Coming from another language? See our <a href="https://docs.aptech.com/gauss/coming-to-gauss/">Coming to GAUSS</a> guides for R, MATLAB, Stata, and Python users.</p>
<p>    <!-- MathJax configuration -->
    <style>
        .mjx-svg-href {
            fill: "inherit" !important;
            stroke: "inherit" !important;
        }
    </style>
    <script type="text/x-mathjax-config">
        MathJax.Hub.Config({ TeX: { equationNumbers: {autoNumber: "AMS"} } });
    </script>
    <script type="text/javascript">
window.MathJax = {
  tex2jax: {
    inlineMath: [ ['$','$'] ],
    displayMath: [ ['$$','$$'] ],
    processEscapes: true,
    processEnvironments: true
  },
  // Center justify equations in code and markdown cells. Elsewhere
  // we use CSS to left justify single line equations in code cells.
  displayAlign: 'center',
  "HTML-CSS": {
    styles: {'.MathJax_Display': {"margin": 0}},
    linebreaks: { automatic: false }
  },
  "SVG": {
    styles: {'.MathJax_SVG_Display': {"margin": 0}},
    linebreaks: { automatic: false }
  },
  showProcessingMessages: false,
  messageStyle: "none",
  menuSettings: { zoom: "Click" },
  AuthorInit: function() {
    MathJax.Hub.Register.StartupHook("End", function() {
            var timeout = false, // holder for timeout id
            delay = 250; // delay after event is "complete" to run callback
            var shrinkMath = function() {
              //var dispFormulas = document.getElementsByClassName("formula");
              var dispFormulas = document.getElementsByClassName("MathJax_SVG_Display");
              if (dispFormulas){
                // caculate relative size of indentation
                var contentTest = document.getElementsByTagName("body")[0];
                var nodesWidth = contentTest.offsetWidth;
                // if you have indentation
                var mathIndent = MathJax.Hub.config.displayIndent; //assuming px's
                var mathIndentValue = mathIndent.substring(0,mathIndent.length - 2);
                for (var i=0; i<dispFormulas.length; i++){
                  var dispFormula = dispFormulas[i];
                  var wrapper = dispFormula;
                  //var wrapper = dispFormula.getElementsByClassName("MathJax_Preview")[0].nextSibling;
                  var child = wrapper.firstChild;
                  wrapper.style.transformOrigin = "center"; //or top-left if you left-align your equations
                  var oldScale = child.style.transform;
                  //var newValue = Math.min(0.80*dispFormula.offsetWidth / child.offsetWidth,1.0).toFixed(2);
                  var newValue = Math.min(dispFormula.offsetWidth / child.offsetWidth,1.0).toFixed(2);
                  var newScale = "scale(" + newValue + ")";
                  if(newValue != "NaN" && !(newScale === oldScale)){
                    wrapper.style.transform = newScale;
                    wrapper.style["margin-left"]= Math.pow(newValue,4)*mathIndentValue + "px";
                    var wrapperStyle = window.getComputedStyle(wrapper);
                    var wrapperHeight = parseFloat(wrapperStyle.height);
                    wrapper.style.height = "" + (wrapperHeight * newValue) + "px";
                    if(newValue === "1.00"){
                      wrapper.style.cursor = "";
                      wrapper.style.height = "";
                    }
                    else {
                      wrapper.style.cursor = "zoom-in";
                    }
                  }

                }
            }
            };
            shrinkMath();
            window.addEventListener('resize', function() {
              clearTimeout(timeout);
              timeout = setTimeout(shrinkMath, delay);
            });
          });
  }
}
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-AMS_SVG"></script></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aptech.com/blog/gauss26/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://www.aptech.com/wp-content/uploads/2026/01/xle-transform-tab.mp4" length="0" type="video/mp4" />

			</item>
	</channel>
</rss>
