Statistical Functions
Measures of Central Tendency
Function | Description |
---|---|
mean | Arithmetic mean |
median | Median (middle) value |
mode | Most frequent value |
trimmean | Trimmed mean (mean, excluding outliers) |
geomean | Geometric mean |
harmean | Harmonic mean |
Measures of Spread
Function | Description |
---|---|
range | Range of values (largest – smallest) |
std | Standard deviation |
var | Variance |
mad | Mean absolute deviation |
iqr | Interquartile range (75th percentile minus 25th percentile) |
Measures of Shape
Function | Description |
---|---|
skewness | Skewness (third central moment) |
kurtosis | Kurtosis (fourth central moment) |
moment | Central moment of arbitrary order |
Calculate Basic Statistics
Instructions are in the task pane to the left. Complete and submit each task one at a time.
This code loads and plots the data.
load sampleletters.mat
plot(b1.Time,b1.X)
hold on
plot(b2.Time,b2.X)
hold off
plot(b1.Time,b1.Y)
hold on
plot(b2.Time,b2.Y)
hold off
Task 1
aratiob = range(b1.Y)/range(b1.X)
Task 2
medxb = median(b1.X,"omitnan")
medyb = median(b1.Y,"omitnan")
Task 3
devxb = mad(b1.X)
devyb = mad(b1.Y)
Task 4
aratiov = range(v1.Y)/range(v1.X)
medxd = median(d1.X,"omitnan")
medyd = median(d1.Y,"omitnan")
devxm = mad(m1.X)
devym = mad(m1.Y)
Further Practice
plot(b1.X,b1.Y,b2.X,b2.Y)
axis([-1 1 -1 1])
axis equal
plot(d1.X,d1.Y,d2.X,d2.Y)
axis([-1 1 -1 1])
axis equal
Find Peaks in Signals
Instructions are in the task pane to the left. Complete and submit each task one at a time.
This code loads and plots the data.
load sampleletters.mat
plot(m1.Time,m1.X)
Task 1
idxmin = islocalmin(m1.X)
idxmax = islocalmax(m1.X)
Visualize the results
plot(m1.Time,m1.X)
hold on
plot(m1.Time(idxmin),m1.X(idxmin),"o")
plot(m1.Time(idxmax),m1.X(idxmax),"s")
hold off
Task 2
[idx,prom] = islocalmin(m1.X);
plot(m1.Time,prom)
Task 3
idxmin = islocalmin(m1.X,"MinProminence",0.1)
idxmax = islocalmax(m1.X,"MinProminence",0.1)
Further Practice
nnz(idxmin)
sum(idxmin)
Calculating Derivatives
Instructions are in the task pane to the left. Complete and submit each task one at a time.
This code loads and plots the data.
load sampleletters.mat
plot(m2.Time,m2.X)
grid
Task 1
dX = diff(m2.X);
dT = diff(m2.Time);
Task 2
dXdT = dX./dT;
Task 3
plot(m2.Time(1:end-1),dXdT)
Task 4
maxdx = max(dXdT)
dYdT = diff(m2.Y)./dT;
maxdy = max(dYdT)
Task 5
dYdT = standardizeMissing(dYdT,Inf);
maxdy = max(dYdT)
Further Practice
dYdT = standardizeMissing(dYdT,[-Inf 0 Inf]);
maxdy = max(dYdT)
Calculating Correlations
Instructions are in the task pane to the left. Complete and submit each task one at a time.
This code loads and plots the data.
load sampleletters.mat
plot(v2.X,v2.Y,"o-")
Task 1
C = corr(v2.X,v2.Y)
Task 2
C = corr(v2.X,v2.Y,"Rows","complete")
Task 3
M = [v2.X(1:11) v2.Y(1:11) v2.X(12:22) v2.Y(12:22)]
Task 4
Cmat = corr(M,"Rows","complete")
Create a Feature Extraction Function
Instructions are in the task pane to the left. Complete and submit each task one at a time.
This code loads the data and calculates some features for one letter.
load sampleletters.mat
letter = b1;
aratio = range(letter.Y)/range(letter.X)
idxmin = islocalmin(letter.X,"MinProminence",0.1);
numXmin = nnz(idxmin)
idxmax = islocalmax(letter.Y,"MinProminence",0.1);
numYmax = nnz(idxmax)
dT = diff(letter.Time);
dXdT = diff(letter.X)./dT;
dYdT = diff(letter.Y)./dT;
avgdX = mean(dXdT,"omitnan")
avgdY = mean(dYdT,"omitnan")
corrXY = corr(letter.X,letter.Y,"rows","complete")
featurenames = ["AspectRatio","NumMinX","NumMinY","AvgU","AvgV","CorrXY"];
Task 1
feat = table(aratio,numXmin,numYmax,avgdX,avgdY,corrXY)
Task 2
feat = table(aratio,numXmin,numYmax,avgdX,avgdY,corrXY,'VariableNames',featurenames)
Task 3 (continued below)
featB2 = extract(b2)
Task 3
function feat=extract(letter)
aratio = range(letter.Y)/range(letter.X)
idxmin = islocalmin(letter.X,"MinProminence",0.1);
numXmin = nnz(idxmin)
idxmax = islocalmax(letter.Y,"MinProminence",0.1);
numYmax = nnz(idxmax)
dT = diff(letter.Time);
dXdT = diff(letter.X)./dT;
dYdT = diff(letter.Y)./dT;
avgdX = mean(dXdT,"omitnan")
avgdY = mean(dYdT,"omitnan")
corrXY = corr(letter.X,letter.Y,"rows","complete")
featurenames = ["AspectRatio","NumMinX","NumMinY","AvgU","AvgV","CorrXY"];
feat = table(aratio,numXmin,numYmax,avgdX,avgdY,corrXY,'VariableNames',featurenames)
end
Add a Feature Extraction Function
Instructions are in the task pane to the left. Complete and submit each task one at a time.
This code creates a datastore and adds a preprocessing function as a transformation to it.
letterds = datastore("*.txt");
preprocds = transform(letterds,@scale)
Task 1
featds = transform(preprocds,@extract)
Task 2
data = readall(featds)
scatter(data.AspectRatio,data.CorrXY)
Task 3
knownchar = extractBetween(letterds.Files,"_","_")
Task 4
knownchar = categorical(knownchar)
Task 5
data.Character = knownchar
gscatter(data.AspectRatio,data.CorrXY,data.Character)
Local Functions
function data = scale(data)
% Normalize time [0 1]
data.Time = (data.Time - data.Time(1))/(data.Time(end) - data.Time(1));
% Fix aspect ratio
data.X = 1.5*data.X;
% Center X & Y at (0,0)
data.X = data.X - mean(data.X,"omitnan");
data.Y = data.Y - mean(data.Y,"omitnan");
% Scale to have bounding box area = 1
scl = 1/sqrt(range(data.X)*range(data.Y));
data.X = scl*data.X;
data.Y = scl*data.Y;
end
function feat = extract(letter)
% Aspect ratio
aratio = range(letter.Y)/range(letter.X);
% Local max/mins
idxmin = islocalmin(letter.X,"MinProminence",0.1);
numXmin = nnz(idxmin);
idxmax = islocalmax(letter.Y,"MinProminence",0.1);
numYmax = nnz(idxmax);
% Velocity
dT = diff(letter.Time);
dXdT = diff(letter.X)./dT;
dYdT = diff(letter.Y)./dT;
avgdX = mean(dXdT,"omitnan");
avgdY = mean(dYdT,"omitnan");
% Correlation
corrXY = corr(letter.X,letter.Y,"rows","complete");
% Put it all together into a table
featurenames = ["AspectRatio","NumMinX","NumMinY","AvgU","AvgV","CorrXY"];
feat = table(aratio,numXmin,numYmax,avgdX,avgdY,corrXY,'VariableNames',featurenames);
end