SKEWTEST
Overview
The SKEWTEST
function tests whether the skewness of a sample is different from that of a normal distribution. This is useful for assessing the symmetry of a dataset and determining if it deviates from normality. The test computes a z-score for the skewness and a corresponding p-value, based on the D’Agostino test:
where is the third central moment and is the second central moment (variance). For more details, see the scipy.stats.skewtest documentation .
This example function is provided as-is without any representation of accuracy.
Usage
To use the function in Excel:
=SKEWTEST(data)
data
(2D list, required): Sample data. Must contain at least 8 elements (as a column or row vector).
The function returns a 2D list with two values: the test statistic (z-score) and the p-value. If the input is invalid, an error message is returned as a string.
Examples
Example 1: Symmetric Data
Inputs:
data |
---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Excel formula:
=SKEWTEST({1;2;3;4;5;6;7;8})
Expected output:
Statistic | P-value |
---|---|
1.010805 | 0.312110 |
Example 2: Skewed Data
Inputs:
data |
---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8000 |
Excel formula:
=SKEWTEST({1;2;3;4;5;6;7;8000})
Expected output:
Statistic | P-value |
---|---|
3.571774 | 0.000355 |
Example 3: Repeated Values
Inputs:
data |
---|
100 |
100 |
100 |
100 |
100 |
100 |
100 |
101 |
Excel formula:
=SKEWTEST({100;100;100;100;100;100;100;101})
Expected output:
Statistic | P-value |
---|---|
3.571777 | 0.000355 |
Example 4: Mixed Data
Inputs:
data |
---|
2 |
8 |
0 |
4 |
1 |
9 |
9 |
0 |
Excel formula:
=SKEWTEST({2;8;0;4;1;9;9;0})
Expected output:
Statistic | P-value |
---|---|
0.446264 | 0.655407 |
Python Code
from scipy.stats import skewtest as scipy_skewtest
def skewtest(data):
"""
Test whether the skewness of a sample is different from that of a normal distribution.
Args:
data: 2D list. Sample data (must contain at least 8 elements).
Returns:
2D list. Test statistic and p-value, or an error message (str) if input is invalid.
This example function is provided as-is without any representation of accuracy.
"""
# Validate input is a 2D list with at least 8 elements
if not isinstance(data, list) or len(data) < 8:
return "Invalid input: data must be a 2D list with at least 8 elements."
try:
# Flatten 2D list to 1D
flat = [float(row[0]) if isinstance(row, list) and len(row) == 1 else float(row) for row in data]
except Exception:
return "Invalid input: data must be numeric."
if len(flat) < 8:
return "Invalid input: data must contain at least 8 elements."
try:
result = scipy_skewtest(flat)
stat = float(result.statistic)
pval = float(result.pvalue)
# Check for nan/inf
if any([x != x or x == float('inf') or x == float('-inf') for x in [stat, pval]]):
return "Invalid result: nan or inf encountered."
return [[stat, pval]]
except Exception as e:
return f"scipy.stats.skewtest error: {e}"