Statistical Functions
Measures of Central Tendency
FunctionDescription
meanArithmetic meanmedianMedian (middle) valuemodeMost frequent valuetrimmeanTrimmed mean (mean, excluding outliers)geomeanGeometric meanharmeanHarmonic mean
Measures of Spread
FunctionDescription
rangeRange of values (largest – smallest)stdStandard deviationvarVariancemadMean absolute deviationiqrInterquartile range (75th percentile minus 25th percentile)
Measures of Shape
FunctionDescription
skewnessSkewness (third central moment)kurtosisKurtosis (fourth central moment)momentCentral 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