# SQRTTRANS: Square Root Transform > "The square root is nature's variance-stabilizing trick—halving the exponent space while preserving monotonicity. When price volatility scales with level, sqrt compresses the noise." The Square Root (SQRT) transformer applies $\sqrt{x}$ to each value in a time series. This variance-stabilizing transformation compresses ranges where volatility scales with magnitude, making it useful for heteroscedastic data where standard deviation increases with price level. ## Mathematical Foundation ### Core Formula $$ \text{SQRT}_t = \sqrt{x_t} $$ where: - $x_t$ is the input value at time $t$ - $x_t \geq 0$ (domain restriction) ### Key Properties | Property | Formula | Description | |:---------|:--------|:------------| | **Domain** | $x \geq 0$ | Only non-negative inputs valid | | **Range** | $y \geq 0$ | Output always non-negative | | **Product Rule** | $\sqrt{ab} = \sqrt{a} \cdot \sqrt{b}$ | Factors separate under sqrt | | **Quotient Rule** | $\sqrt{a/b} = \sqrt{a} / \sqrt{b}$ | Division becomes ratio of roots | | **Power Relation** | $\sqrt{x} = x^{0.5}$ | Half-power equivalence | | **Inverse** | $(\sqrt{x})^2 = x$ | Squaring reverses sqrt | | **Identity** | $\sqrt{0} = 0$, $\sqrt{1} = 1$ | Fixed points | ### Derivative $$ \frac{d}{dx}\sqrt{x} = \frac{1}{2\sqrt{x}} $$ The derivative approaches infinity as $x \to 0^+$, meaning small changes near zero produce large output changes. ## Financial Applications ### Variance Stabilization For data where standard deviation scales with the mean (Poisson-like behavior), sqrt transformation normalizes variance: $$ \text{Var}(\sqrt{X}) \approx \text{constant} $$ This enables statistical techniques that assume homoscedasticity. ### Volatility Scaling When volatility is proportional to price level: $$ \sigma_{price} \propto P \implies \sigma_{\sqrt{P}} \approx \text{constant} $$ The sqrt transformation can normalize volatility for cross-asset comparison. ### Distance Metrics Euclidean distance in feature space: $$ d = \sqrt{\sum_i (x_i - y_i)^2} $$ ### Risk Metrics Volatility from variance: $$ \sigma = \sqrt{\text{Var}(R)} $$ ## Implementation Details ### Negative Input Handling Mathematical $\sqrt{x}$ is undefined for $x < 0$. This implementation: - Returns last valid value for negative inputs - Returns last valid value for NaN/Infinity - Starts with lastValid = 0.0 (since sqrt(0) = 0) ### Precision Characteristics | Input Range | Relative Precision | |:------------|:-------------------| | $x > 0$ | Full 15-16 digits | | $x = 0$ | Exact (returns 0) | | $x < 0$ | Substituted with last valid | ### Streaming Characteristics | Metric | Value | |:-------|:------| | **Warmup Period** | 0 | | **Memory** | O(1) | | **Complexity** | O(1) per update | ## Performance Profile ### Operation Count (Scalar) | Operation | Count | Notes | |:----------|:-----:|:------| | SQRT | 1 | Hardware instruction (FSQRT) | | CMP | 1 | Domain check | | **Total** | ~15-20 cycles | Platform dependent | ### Quality Metrics | Metric | Score | Notes | |:-------|:-----:|:------| | **Accuracy** | 10/10 | IEEE 754 compliant | | **Timeliness** | 10/10 | Zero lag | | **Smoothness** | N/A | Transform preserves input characteristics | ## Usage Examples ### Basic Usage ```csharp // Create SQRT transformer var sqrt = new Sqrttrans(); // Transform a value var price = new TValue(DateTime.UtcNow, 100.0); var result = sqrt.Update(price); // 10.0 ``` ### Variance Stabilization ```csharp var prices = new TSeries(); // ... populate with price data // Apply sqrt transform for variance stabilization var sqrtPrices = Sqrttrans.Calculate(prices); // Now compute statistics on transformed data var stdDev = StdDev.Calculate(sqrtPrices, 20); ``` ### Batch Processing ```csharp var source = new double[] { 1, 4, 9, 16, 25 }; var output = new double[source.Length]; Sqrttrans.Calculate(source, output); // output: { 1, 2, 3, 4, 5 } ``` ### Chained with Square ```csharp // Round-trip: sqrt(x^2) = |x| var values = bars.Close; var squared = values.Select(v => new TValue(v.Time, v.Value * v.Value)).ToTSeries(); var recovered = Sqrttrans.Calculate(squared); // recovered ≈ abs(original) ``` ## Common Pitfalls 1. **Negative Input**: Prices are always positive, but derived values (returns, differences) can be negative. Sqrt is undefined for negatives—this implementation returns last valid value. 2. **Zero Amplification**: Near zero, small changes in input cause large changes in sqrt output. $\sqrt{0.01} = 0.1$ but $\sqrt{0.0001} = 0.01$—a 100x input change yields only 10x output change. 3. **Reversal Requires Squaring**: To undo sqrt, square the result. Unlike log/exp which are inverses, sqrt/square are only one-way inverses for non-negative values. 4. **Variance Stabilization Assumption**: Sqrt is optimal when variance scales linearly with mean. For other heteroscedasticity patterns, log or Box-Cox may be more appropriate. 5. **Magnitude Compression**: Sqrt compresses large values more than small ones. $\sqrt{10000} = 100$ but $\sqrt{100} = 10$. This can distort technical analysis patterns that depend on absolute price levels. ## Validation | Test | Status | |:-----|:------:| | **Math.Sqrt Parity** | ✅ | | **Perfect Squares (0,1,4,9,16,25,100)** | ✅ | | **Irrational Results (√2, √3, √5)** | ✅ | | **Inverse of Square** | ✅ | | **Product Rule** | ✅ | | **Quotient Rule** | ✅ | | **Power Relationship (x^0.5)** | ✅ | | **Small Values (1e-10 to 1e-2)** | ✅ | | **Large Values (1e10 to 1e100)** | ✅ | ## References - Box, G.E.P., & Cox, D.R. (1964). "An Analysis of Transformations." *Journal of the Royal Statistical Society, Series B*, 26(2), 211-252. - Tukey, J.W. (1977). *Exploratory Data Analysis*. Addison-Wesley. (Variance-stabilizing transformations) - IEEE 754-2019. *Standard for Floating-Point Arithmetic*. (sqrt specification)