Overview of Quality Control Measures
There are 4 main QC steps plus 3 added quantities in the Level 2 QC data, relative to Level 1 data.
These are discussed in detail in what follows.
DATA QC |
---|
1 | Sensor Bias
a) Ocean Pressure Sensors
b) Thermistors
|
2 | Sensor Drift
a) Ocean Pressure Sensors
b) Thermistors
|
3 | Range Checks
a) Capped Values
b) Wrapped Values
c) Unphysical Values
|
4 | Miscellaneous
a) Noisy values
b) Initial adjustment
c) Steady values
d) Spikes (a.k.a outliers)
e) Data columns removed
|
ADDED QUANTITIES |
---|
5 | Calculated depths of the temperature sensors have been added. |
6 | An Open Water or Ice indicator has been added to the data files. |
7 | An integer indicating the uppermost temperature pod in water was added. |
DATA QC
1. Sensor Bias
a) Ocean Pressure Sensors
Bias in the ocean pressure (OP) data was corrected by finding the difference between
the nominal depth of the sensor and the most common deepest value reported by the
sensor when no ridging was present. This difference was then added to the Level 1
OP data. For example, if it is known that a buoy has an OP sensor at 60m, but the
deepest reading from the sensor (when we assume that the buoy is hanging straight
down) is 62 db, then the bias is 60-62= -2. This -2 would then be added to all the
OP readings for that sensor.
Two other factors influence OP:
(1) EFFECT OF SEA LEVEL PRESSURE (SLP) VARIABLITY ON OCEAN PRESSURE (OP) VALUES:
When SLP changes, the OP sensors feel this change. For example, an SLP decrease of 5 db
leads to an OP decrease of the same magnitude, which could then be misinterpreted as
a rise of the OP sensor in the water column owing to wind forcing and/or ridging.
Each of our three manufacturers deals with this issue differently:
• MetOcean does not account for this effect; we corrected for it in the Level 2 data.
• Pacific Gyre does correct for the effect in their reported OP sensor data.
• Marlin-Yug does not account for the effect, but our correction generally degrades
the quality of OP sensor output for reasons unknown at this time, so we did not apply
the correction for these buoys.
The effect of SLP on OP is generally small. An analysis of 2010-2015 SLP data from Arctic
UpTempO buoys results in an average SLP of 10.14db +/- 0.13db. This means that 95% of the
time, the SLP anomaly will be within +/- two standard deviations (2 * 0.13) of the mean.
Thus, after biases are removed, SLP variability impacts OP by +/- 0.26 db, far less than
the usual OP sensor accuracy of +/- 1 db.
(2) EFFECT OF OCEAN DENSITY VARIABILITY ON OCEAN PRESSURE VALUES
• Pressure = (density)(gravity)(height)
Density range of top 60m of Arctic: 1021 to 1028 kg/m^3
Gravity: 9.81 m/s^2
Height: 60m
--> The maximum error is then |0.41 db|, or +/- 0.2 db over the total possible range; the error
is likely much smaller for any particular buoy’s drift. Some UpTempO buoys have a single
temperature/conductivity pair near the surface with which to compute density, but most do not,
and none have t/c pairs through the water column. Thus a calculation of true density is
impossible without additional information, and so this effect is NOT accounted for in OP sensor data.
b) Thermistors
Most buoys’ thermistors are calibrated against a higher quality sensor by the manufacturer in a tank.
Additionally, CTD profiles are often (but not always) available for further calibration, either in
seawater near the manufacturer’s facility or at the deployment site or both. Bias calculated using
field profiles typically uses only the part of the profile that is nearly isothermal, discounting
depths with rapid temperature changes. Calibration in the field is very useful, but typically involves
space and time offsets between buoy and CTD data which limit the accuracy of this procedure. Nonetheless,
the comparisons are generally pretty good. When this information is available, it is included in the data file header.
The thermistors on our early buoys from 2010 and 2011 had rather large biases across all
the thermistors with respect to field CTD casts. For these buoys,
thermistor data have been de-biased in the Level 2 QC data. From 2012 onward, all buoys thermistors have
generally performed within “spec” i.e., with biases relative to CTD data that are within the manufacturers’
quoted accuracy. For these buoys, our calculated biases are provided in the header for each data file,
but the Level 2 QC data have not been modified from the Level 1 data.
Bias corrections and information will appear in the data file headers as follows.
"Overall bias" for thermistors refers to buoy minus CTD values.
2. Drift Correction
a) Ocean Pressure Sensors
OP data from 2010 and 2011 buoys drifted over time toward deeper values. This was corrected by
fitting a geometric function to the mean drift, and then adjusting the original data. Subsequent
ocean pressure sensors used on the UpTempO buoys did not have this problem.
Drift in the ocean pressure sensors was corrected by fitting a geometric function to the
pressure time series:

Where P-hat = modeled pressure (dB), t = time (days), and A,B, and C are the parameters found to model the
drift in the pressure sensor. Drift was corrected for a total of 12 buoys. Eleven of these buoys
were equipped with two pressure sensors, one at 20m, and the other at 60m nominal. The remaining
buoy had only one pressure sensor at 25m nominal. For the 20m pressure sensors, "A" ranged from
0.036 to 0.61 dB/day, "B" ranged from 0.17 to 0.64, and "C" ranged from 20.79 to 26.8 dB.
For the 60m pressure sensors, "A" ranged from 0.21 to 1.34 dB/day, "B" ranged from 0.16 to 0.46, and
"C" ranged from 61.32 to 63.19 dB.
To correct for the drift, we then found the difference between the modeled pressure values and the
first ocean pressure value in the time series (after initial adjustment upon deployment, see Section 4c). We then corrected the ocean pressure values by
subtracting this time series of differences from the ocean pressure time series.

Where P is the pressure that the ocean pressure sensor reported.
The A, B, and C parameters appear as follows in the headers of the data files for the buoys
that required this corrections:
b) Thermistors
High-accuracy thermistors from Seabird are used on some buoys, and these have very small drift
that we have assumed is negligible over the lifetime of our buoys. The drift in other thermistors
has not been assessed at this time (summer, 2016) and so has been assumed to be negligible as well.
We have not been able to recover a buoy at the end of a long drift for recalibration. Preliminary
analysis of long-lived buoys of the difference in winter SSTs from one year to the next is generally
less than the stated accuracy of +/- 0.1 degC.
3. Range check
a) Capped Values
Each quantity an UpTempO buoy reports has a range of acceptable values associated with it.
These upper and lower values are referred to as the "caps"
in this report. Often when there is an error in data reporting for a quantity, the upper or lower
cap is returned. For example, MetOcean UpTempO buoy thermistors have an acceptable reporting range from -45C to 36.91C.
Values of -45C and of 36.91C are clearly bad readings for temperature. Buoys from different
manufacturers and batches can have varying acceptable ranges of data. To make our data more
uniform across different buoy makes and models, almost all of these "capped values" have been
replaced with the value -999. There are some exceptions in cases where a reported value realistically
hit the cap value, in which cases we did not change the value to -999. These situations are described below.
i) Ocean Pressure Sensors
Ocean pressure sensors have a minimum allowed value of 0db. Since these sensors are typically at 20, 40, or 60m,
a 0db report is usually filtered out by giving it a value of -999. At deployment, however, 0db readings are physically
realistic. Ocean pressure sensors can also be pulled up to surface in rare cases of extreme ridging. These events are
recognizable in the data, and the resulting 0db reading are left in the data.
ii) Thermistors
Some of our buoys had a minimum thermistor range of -5C.
While ocean temperatures can never obtain a temperature this low, air/ice/snow temperatures easily get much lower.
Surface and near-surface thermistors of a buoy locked in ice can expose these thermistors to air or ice temperatures and can
therefore realistically drop below this -5 threshold. In this case the -5 remains as the reported temperature value
in the level 2 data files.
b) "Wrapped" Values
This is only an issue for thermistor data.
Buoys report within a range of allowed values. For most buoys, if the temperature
is outside of that range, the buoy will report the upper or lower limit allowed, i.e., a "capped values."
Some Pacific Gyre buoys since 2014 behave a little differently. Instead of "capping"
at the minimum or maximum allowed value, the reported temperature will "wrap around" to
the other end of the allowed range. An example of this is shown below.
As an example of how this occurs, let's consider a case where the actual temperature is
-6C, and the allowable range of temperatures for the sensor is between -5C and 40C. The
value the buoy will report in this case is (-6 - (-5)) + 40 = -1 + 40 = 39C. To figure out
the true temperature then we use the following formula:
True Temperature = reported value - maximum allowed value - minimum allowed value
From the example above this works out as:
True Temperature = 39 - 40 - 5 = -6
In practice, the only wrap-around we see is for temperatures colder than the allowed minimum,
which happens when thermistors are in winter ice/snow/air, which is the case for some deployments
or when ice grows and/or ridges around a buoy.
c) Unphysical Values
i) Ocean Pressure Sensors
The sensors on the UpTempO string can easily ride above their respective nominal
depths when subjected to winds or currents, but they do not typically get pushed
below nominal. Ice can push them under, but when this happens, the buoy cannot
report. Therefore, ocean pressure values reporting deeper than 5m below nominal
are filtered out.
ii) Thermistors
Temperature values were filtered out (given a value of -999) for a number of reasons:
• Temperatures below freezing (-1.8C) for thermistors in water
• Unreasonably warm temperatures
Temperatures were deemed too high and were filtered out for:
• Temperatures greater than 20C
• Temperatures greater than 10C below 20m
• Temperatures greater than 6C during the months Jan to May, Oct to Dec
Range Check information will appear in the data file header as follows:
4. Miscellaneous
a) Noisy Values
i) Ocean Pressure Sensors
Ocean Pressure values can vary quite a bit, especially if the weight at the bottom
of the string is light. But it almost always varies smoothly, with a high degree
of correlation between all the pressure sensors on the string. Ocean pressure values
that are uncorrelated from one reading to the next and are highly variable are filtered
out.
ii) Thermistors
One mode of failure for a buoy is for it to get concussed with ice causing damage
to its electronics. The evidence of this failure is a sudden jump in the time series, followed by
either unphysical values, or unusual behavior. This is recognizable by eye, but is
difficult to filter automatically. In these situations, each thermistor time series
was analyzed to identify at exactly the point in time the failure occurred, and the
remainder of the series was removed since the sensor can no longer be trusted. This type of
failure is much more common near the end of a buoy's life.
b) Steady Values
Usually we expect that when a thermistor fails, it will begin reporting either the minimum or the
maximum value of its allowed range, or report no value at all. In some cases though, the buoy will choose to
report some other constant value for the remainder of its life, as shown below.
c) Initial Adjustment
It often takes a buoy a few reports before its thermistors equilibrate with their
surroundings. When this appears to be the case, we have filtered these first few
values for all thermistors in the string.
d) Spikes
Definition:
A spike is defined as a point in a time series that either rises above or drops below its
immediate neighbors before and after. For our analysis, spike magnitude
is measured in units of ΔTemperature(C)/ΔHour (or dT/dHr) for thermistors, and
ΔPressure(dB)/ΔHour (or dP/dHr) for ocean pressure. For each spike, we get two
measures for dT/dHr for example, one with respect to the spike’s left neighbor, and one with respect
to its right. The dT part of the calculation always proceeds by taking the spike
point temperature minus its left neighbor’s temperature, and then the spike point temperature
minus its right neighbor’s temperature. The dHr part of the calculation is calculated
so that it is always positive. So positive spikes always end up with dT/dHr positive, and
the opposite for negative spikes. We then choose the minimum of the two measurements for
each spike to define the magnitude of the spike.
i) Ocean Pressure Sensors
Detecting errant spikes in the ocean pressure (OP)sensors depends on the how much vertical
movement can be reasonably expected given the thermistor string's bottom weight and the position of the OP sensor in the water column. Marlin-Yug
buoys, for example, have fairly light weight on the end of the thermistor string, and vertical movement as
much as 30dB/Hr in the 60m OP sensor is not unprecedented. An isolated spike of this magnitude could be bad data, though.
So how can we tell whether a 30dB/Hr spike genuinely reflects the motion of the thermistor string? We can tell by looking
at the other OP sensors on the string, if they exist. The plots below show the relative motion between OP sensors located at
different nominal depths on the same string. The x-axis on both plots is showing how much shallower than nominal the
60m OP sensor is, while the y-axis is showing the same for the 20m OP sensor in the first plot, and the 40m OP sensor in the second.
The colors indicate the buoy's manufacturer.
The first plot below (∆OP60 vs. ∆OP20) can be fit pretty well with a polynomial model of the form
∆OP20 ~= A * ∆OP60 + B * ∆OP60^2 + C. This is shown as the dashed green line. The farther from this line
a data point falls the more suspect it is. For simplicity, the solid green lines enclose 99% of the data
shown, and any point falling between them is passed as good. Points that fall outside of this range
are not necessarily bad, but they are flagged for closer inspection.

Not all of the points in these plots are spikes, and not all spikes that fall outside the green lines are bad.
For instance, in the first plot above we see many points above the
upper green line that are actually the result of "ridging", where the buoy
has been physically pulled up in the water column by an ice ridging event. For these data points, the
deepest possible values for the 20m and 60m sensors has been moved up in the water column by the same
amount. If we subtracted this amount from both, we would see that the points fall into the expected band.
All points outside of the green 99% bands are visually inspected for bad data.
Some buoys may have only one functional pressure sensor. An analysis of the behavior of OP sensors depending on the buoy manufacturer and the sensor depth was done to
determine reasonable spike magnitudes. An example of this analysis is shown in the plot below where the difference from nominal is plotted
for each of the 4 possible OP nominal depths for Marlin-Yug buoys. The red line for each OP sensor shows the point below which 99% of the data exists.
Spike magnitudes greater than these values are flagged as suspect. A similar analysis was done for Pacific Gyre and MetOcean buoys. Results are listed
in the table that follows.

The table below
lists the spike magnitude cut-offs for the various buoys and OP sensors in situations where other OP data is not available.
Manufacturer | Max 20dB Spike Mag | Max 40dB Spike Mag | Max 60dB Spike Mag | Max 80dB Spike Mag |
---|
Pacific Gyre | 5dB/Hr | 9dB/Hr | 16dB/Hr | |
---|
Marlin-Yug | 7dB/Hr | 14dB/Hr | 26dB/Hr | 42dB/Hr |
---|
MetOcean | 4dB/Hr | | 12dB/Hr | |
---|
ii) Thermistors
Under the influence of strong winds or ice ridging, the
thermistors can be pulled upward into different thermal stratification regimes. This can
cause "spikes" that are real and which should not be removed. In order to deal with this,
we consider not just an individual thermistor's time series, but also data from other
thermistors on the sensor string.
A spike is defined as a single point that is at least 1C above the values 1 hour before
and after. The spike's temperature is set to -999 C if its dT amplitude is greater than
the range of "non-spiky" values found within +/- 1 day and +/- 3 meters of the thermistor.
A complete explanation of what we did follows.
When to filter a spike:
The next issue to address is at what magnitude do we choose to flag a spike for filtering?
Choosing a constant threshold based on what should be physically
possible seems wise, but it’s not. The problem is that thermistors cannot be relied
upon to stay at their nominal depths, and there can be wide variations in temperatures
at different depths. On a windy day the bottom thermistor of a buoy with a light weight
on the end can rise in the water column as much as 20m. Depending on the thermocline,
thermistors in the transition zone can experience a wide range of temperatures resulting
in wild swings in readings that would be unexpected in a stationary thermistor.
To address this issue, we use the data from the buoys to tell us what should reasonably be
expected. This is done by first finding all NON-SPIKE values at every calculated depth in the
time series. Then at any given spike point, we find the minimum and maximum temperature from
the surrounding non-spike values over a constant ∆time and ∆depth. These
surrounding points are centered on the spike point in time, and also in depth if we are
using calculated depths. When calculated depths are not available, we have to use nominal depths.
In this case, we only search above the spike point in depth
since we don’t expect the buoy to ever go deeper than the nominal depth of the
thermistor. The threshold for filtering this
spike would then be the (max Temp – min Temp) for all points found around the spike point in question.
If the magnitude of the spike exceeds this threshold, it is a candidate for filtering. To be
filtered, it must in addition have a spike magnitude greater than 1 C/hr, and it must have
a temperature value outside of the minimum and maximum temperature range of
the surrounding points.
Here is a summary of steps in the process:
1. Find the spike magnitude of all points in the time series data from all thermistors ( BOX 1 in the figure below). Non-spike
points should be assigned a spike magnitude of 0. Using the non-spike points and calculated depths of each thermistor, construct gridded temperature profiles at
1 m resolution by linearly interpolating between the calculated depths.
2. For each point in a temperature time series, search the gridded temperatures (found in step 2)
based on the chosen ∆time and ∆depth criteria. I will refer to this as the
“search box”. The search box is centered on the (time, calc depth) point. Identify the
maximum and minimum temperatures found in the search box. ( BOX 2 in the Figure below).
3. The threshold spike magnitude at each time series point is then: max Temp – min Temp
Where we are using the temperatures found in step 3. ( BOX 3 in the Figure below).
4. For a spike to be filtered, it must meet three criteria:
• The magnitude of the spike exceeds the spike threshold found in step 3. ( BOX 4 in the figure below)
• The magnitude of the spike is greater than 1 C/hr ( BOX 5 in the figure below).
• The value of the spike is outside of the minimum and maximum temperature range found in step 2.
( BOX 5 in the figure below)
DETERMINING THE SEARCH BOX PARAMETERS
Before this method of flagging spikes can be applied, we must determine what values of
∆time and ∆depth to use. For the ∆depth parameter, we can base our choice on the accuracy
of the calculated depths for our thermistors. Analysis has indicated that we do not expect
the calculated depths to be off by more than 2m. Since we would rather miss filtering a
bad point than filter a good one, we use 3m, giving a total ∆depth of 6m (+/- 3m).
The ∆time parameter becomes especially important when a buoy is near the boundary of two
different water masses. To get the full character of the possible temperature fluctuations in space
we use a total ∆time of 2 days (+/- 1 day).
To get an idea of how sensitive this spike flagging algorithm is to different
values of ∆depth and ∆time, we applied it using a grid of (∆depth, ∆time) parameter pairs.
The results are shown below. A dot on the plot below shows that our chosen parameters of
∆Depth = 6m and ∆Time = 2 days results in about 1 spike per 1000 being flagged for filtering.
WHERE THE SPIKE ALGORITHM FAILS
There are a couple situations where the spike algorithm fails.
1. Double spikes:
This is when two spikes in a row occur, which technically doesn't even qualify them
for the title "spike".
2. Sparse data:
If the points on either side of a spike are distant from it in time,
the spike magnitude can not
be accurately assessed.
In situations such as these, where
it is obvious to the eye that the spikes should be removed even though the algorithm fails to
flag them, the points were filtered out by hand.

e) Data Columns Removed
If a thermistor or ocean pressure sensor reported no good data, i.e. all values were set to -999, then
the column of data for that sensor was removed.
Information about miscellaneous filtering and removed data columes appears in the data file header as follows:
ADDED QUANTITIES
5. Temperature Sensor Depth Calculation
Thermistor depths are presented in three ways:
1. Nominal Depths: This is the default depth provided in Level 1 Raw Data,
assuming that the buoy is hanging straight vertical in the water column.
2. Estimated depth: This is a depth calculated by Marlin-Yug buoys, based on a cable model. However, this cable model
is based on their original 80m long drogued buoy, which we used in some years and thus are reported in Level 2 QC data for those buoys.
In later years, Marlin-Yug made special buoys for us, with no drogue and a
different arrangement of sensors. Thus this cable model may not be optimal for these buoys.
3. Calculated depth: For many buoys we used linear interpolation between ocean pressure sensors to calculate thermistor depths for Level 2 QC Data.
Details of this calculation follow:
Depths for the thermistors were calculated based on the values reported by the Ocean Pressure (OP) sensors.
The OP sensors give the “true depths” at their respective nominal depths. The calculated depth at the top most thermistor
was generally assumed to be equal to the nominal depth, ie 2.5m. Linear interpolation to the other thermistors was then applied.
Special Cases
A. Thermistors can occasionally be pulled up into the ice by ridging events. These thermistors were set to 0 m depth for the interpolation.
B. Thermistors can occasionally be pushed deeper than nominal by ice over-rafting of the surface hull, or by transient wave action. When OP
sensors read deeper than nominal, this bias is added to all thermistor depths to ensure that the total length of the thermistor string
does not exceed its known length.
C. If an OP sensor fails but one or more are still working, the missing op values are estimated based on an analysis of how a particular
buoy's OP, sensors typically behave for the buoy type in question. Then depth calculations proceed as normal. If there are no OP data at all,
the thermistor depths are reported as -999: They can not be calculated.
6. Open Water or Ice/Near Indicator
A column has been added to the UpTempO time series indicating whether the buoy is in/near ice,
or in open water. "In/near ice" implies the buoy is in ice or in water within the Marginal Ice
Zone. It is difficult to distinguish between these two possibilities, so we have lumped them
together as "in/near ice". Thus this indicator likely predicts that the buoy is in ice when
at times, it could be in cold water near some ice.
The primary predictor for this "Open Water or in/near Ice" indicator is the buoy’s proximity to ice
concentration values greater than or equal to 0.15. The ice data used for this analysis comes
from NSIDC’s near real time ice concentration fields, which are derived from satellite passive
microwave values. This field has some inherent error especially near the ice edge, so a
secondary criteria for determining whether a buoy is in/near ice is the temperature of
the uppermost thermistor. If the temperature is less
than -1.2C, we bias the ice indicator toward “in/near ice”. We do this by increasing the allowable
distance to satellite derived ice while maintaining an “in/near ice” classification.
The satellite ice data is on a 25km grid, so the buoy can
be up to 17.7km away from a grid point while being in an ice pack (see the schematic below). If
the buoy is less than this distance from an ice
concentration grid cell with a value greater than 0.15, it is labeled as being in/near ice.
If it is farther than 17.7km away but less than 35.4km away,
it is only labeled as "in/near ice" if the uppermost
thermistor value is less than -1.2C.
7. First Wet Thermistor (FWT)
FWT is our best guess for which thermistor on the buoy is the uppermost one in water
(as opposed to in air or snow or ice). Thus it points to the thermistor that gives our best
estimate of Sea Surface Temperature (SST). For example, if a buoy with a thermistor in the
hull is deployed on an ice floe (with the sensor string hanging down through a hole into the ocean),
then this hull thermistor is providing air or snow or ice values, not SST. Another example might
be if a buoy deployed in open water is later engulfed in ice, and then experiences sensor string
uplift owing to an ice ridging event. In this case, there might be a number of thermistors on the
string that start reading icy values. The FWT value itself is the index of the first wet thermistor.
So, for example, FWT=0 if the
uppermost thermistor on the buoy (0m or 2.5m nominal) is in the water. FWT=1 if the uppermost
thermistor is in air/ice/snow, but the next one down is in water. FWT=2 if the top two thermistors
are in air/ice/snow, etc.
CASE 1: Buoy is in water
FWT = 0 always.
CASE 2: Buoy is in/near ice
If the buoy is in/near ice, it is automatically assumed that the uppermost thermistor is in ice,
and the FWT value defaults to 1. This may not be the case, but the error is on the side of
being sure that the indicated thermistor is indeed in water.
The FWT can obtain values higher than 1 if the buoy has been ridged up into the ice, or if ice freezes
deep enough to encase a thermistor. Therefore, after defaulting to 1, further checks are run to see if the FWT = 1 thermistor is in ice.
If the calculated depth of the FWT=1 thermistor is 0m, implying that the thermistor has been ridged up into the ice,
then the FWT moves to the next thermistor down, giving FWT = 2. This is repeated until the calculated depth of the FWT thermistor is greater than 0m.
Once an FWT thermistor with a calculated depth > 0m is found, we check to see if ice has frozen down around the thermistor.
If the temperature of the FWT thermistor is <= -1.8C, we assume the thermistor is frozen into the ice, and the FWT moves to the next thermistor down.
This is the final answer.
Here's an example of what the final data file header will look like in its entirety:
|