Software comparison and correction

PCA: verify component values and chart output

Principal component analysis (PCA) summarises variation in a set of variables using components. This unrotated example fixes two components, compares QuickPLS with an independent matrix calculation and checks the installed output. It also records how a precision issue was corrected.

Reviewed 4 November 2026
Correction verifiedThe corrected calculations and installed output were both checked

What the comparison shows

The corrected installed-app test compares 146 scientific results and counts, plus 94 chart coordinates, for a four-variable example. The chart checks verify where the results are drawn; they are not a separate statistical study. Rotation and parallel analysis remain outside this example. Earlier screenshot values are not expected answers for the corrected version.

Follow the original finding through to the corrected result

The test fixes two components and leaves them unrotated, using the component directions from PCA without an additional rotation. The reference uses full singular value decomposition (SVD), an independent matrix calculation of the same decomposition.

The page keeps the original difference and the corrected results separate. The corrected calculation is checked first, then its output is checked in the installed application. This makes it possible to see what changed without treating historical values as current expected answers.

Which software produced these results?

The table separates the original installed version, the correction’s source calculation and the corrected installed version. Each result belongs to the version shown; a later product label does not mean that the test was repeated.

On a small screen, swipe the table sideways to see every column.

RecordQuickPLS build or result checkedReferenceComparison outcome
Historical PCA precision difference1.01.19scikit-learn1.6.1 full SVDThe recorded numerical difference means equivalence was not established
Corrected PCA full-SVD reference1.01.20 correction sourcenumpy 1.26.4, pandas 2.2.3, scikit-learn 1.6.1, scipy 1.15.2Passed the comparisons documented for this record
Corrected installed PCA1.01.20numpy 1.26.4, pandas 2.2.3, scikit-learn 1.6.1, scipy 1.15.2Passed the comparisons documented for this record

The precision difference found in the original test

The original test used installed version 1.01.19 with an unrotated model and two fixed components. Some results exceeded the specified numerical allowance. The original comparison is kept here so the correction can be assessed against the recorded finding.

  • A separate test verifies the correction in version 1.01.20. This historical finding is not presented as a known unresolved defect in the current app.
What was checkedValue / scope
Compared numbers and missing-value statuses146
Outside the stated tolerance93
Different scenario names in the comparison record1
Largest absolute difference1.66514018229424e-06

Inspect the original weight and loading differences

The examples show component PC1 weights and loadings for variables a, b and c. A weight determines a variable’s contribution to the component score; a loading describes its relationship with that component. Each displayed row exceeded the allowed difference in the original comparison.

Values are displayed to 15 significant digits, and differences use the numbers before this display rounding. Use the saved definitions and precision in the download when examining these historical results. Do not use them as the corrected version’s answer values.

On a small screen, swipe the table sideways to see every column.

Quantity comparedQuickPLSReferenceAbsolute differenceComparison result
Outer weight: a on PC1
Result identifierloadings/PC1/a/weight
-0.499865938880597-0.4998661558745822.16993984669678e-07Difference
Outer loading: a on PC1
Result identifierloadings/PC1/a/loading
-0.74538313070546-0.7453834542795473.23574087079948e-07Difference
Outer weight: b on PC1
Result identifierloadings/PC1/b/weight
-0.497264199114519-0.497264417223632.18109110272646e-07Difference
Outer loading: b on PC1
Result identifierloadings/PC1/b/loading
-0.74150350462719-0.7415038298641143.25236924503258e-07Difference
Outer weight: c on PC1
Result identifierloadings/PC1/c/weight
0.5084691971240880.5084689849530912.12170997215821e-07Difference
Outer loading: c on PC1
Result identifierloadings/PC1/c/loading
0.7582120175429210.7582117011607473.16382174680996e-07Difference

Check the corrected calculation against full SVD

The corrected calculation was checked against 146 reference values and four mathematical properties that should remain true. The value comparisons assess numerical agreement; the property checks assess consistency with the mathematics of the decomposition.

  • This is the corrected source calculation identified in the software table.
  • Many checked values come from the same component analysis. They are not independent studies.
What was checkedValue / scope
Values checked146
Values outside the allowed difference0
Maximum absolute error5.218048215738236e-15
PassedYes

Read eigenvalues and explained variation

An eigenvalue describes the amount of variation represented by a component. Explained variance gives its share of the total, and cumulative variance adds the shares through that component. The first component’s explained and cumulative values are the same because no earlier component has been added.

The display uses 15 significant digits. Small nonzero differences can remain when the displayed estimates look equal because differences were calculated before display rounding. The download retains the saved precision and the comparison conventions.

On a small screen, swipe the table sideways to see every column.

Quantity comparedQuickPLSReferenceAbsolute differenceComparison result
Eigenvalue, component 1
Result identifiercomponents/0/eigenvalue
2.223576266802962.223576266802964.44089209850063e-16Pass
Explained variance, component 1
Result identifiercomponents/0/explained_variance
0.5558940667007390.5558940667007391.11022302462516e-16Pass
Cumulative explained variance, component 1
Result identifiercomponents/0/cumulative_variance
0.5558940667007390.5558940667007391.11022302462516e-16Pass
Eigenvalue, component 2
Result identifiercomponents/1/eigenvalue
1.636886854678161.636886854678158.88178419700125e-16Pass
Explained variance, component 2
Result identifiercomponents/1/explained_variance
0.4092217136695390.4092217136695382.22044604925031e-16Pass
Cumulative explained variance, component 2
Result identifiercomponents/1/cumulative_variance
0.9651157803702780.9651157803702774.44089209850063e-16Pass

Check the corrected values and their chart positions

The comparison checks 146 scientific results and counts, plus 94 chart coordinates, for a four-variable unrotated model with two fixed components. A chart coordinate specifies where a plotted result appears. Checking it helps detect an output drawn in the wrong place even when its table value is correct.

  • This installed-app check uses the corrected version identified above.
  • The plotted coordinates come from the same analysis. They should not be counted as a second statistical study.
What was checkedValue / scope
Values checked146
Differences found0
Largest absolute difference5.218048215738236e-15
Chart coordinates checked94
Mismatched chart coordinates0

Inspect the values shown by the installed app

These installed results report the eigenvalues, explained shares and cumulative shares for the same example. Compare them with the independent reference and with the corrected calculation above. The repeated rows show agreement at the application-output stage; they do not add another dataset.

Values are displayed to 15 significant digits. Differences use the numbers before this display rounding. The download preserves the recorded precision and explains the reference conventions.

On a small screen, swipe the table sideways to see every column.

Quantity comparedQuickPLSReferenceAbsolute differenceComparison result
Eigenvalue, component 1
Result identifiercomponents/0/eigenvalue
2.223576266802962.223576266802964.44089209850063e-16Pass
Explained variance, component 1
Result identifiercomponents/0/explained_variance
0.5558940667007390.5558940667007391.11022302462516e-16Pass
Cumulative explained variance, component 1
Result identifiercomponents/0/cumulative_variance
0.5558940667007390.5558940667007391.11022302462516e-16Pass
Eigenvalue, component 2
Result identifiercomponents/1/eigenvalue
1.636886854678161.636886854678158.88178419700125e-16Pass
Explained variance, component 2
Result identifiercomponents/1/explained_variance
0.4092217136695390.4092217136695382.22044604925031e-16Pass
Cumulative explained variance, component 2
Result identifiercomponents/1/cumulative_variance
0.9651157803702780.9651157803702774.44089209850063e-16Pass

Error limits that identified the original difference

These are the rules applied to the historical result. Rows outside them remain marked as differences, even though a later version corrected the calculation.

abs(native - aligned_reference) <= absolute_tolerance + relative_tolerance * abs(aligned_reference)

In this formula, native is the QuickPLS value and aligned_reference is the reference value expressed using the same definition. abs means absolute value, so the sign does not affect the size of the difference. Absolute tolerance is a fixed allowance. Relative tolerance adds an allowance that grows with the size of the reference value. A separate check verifies whether a result is available or missing where expected; it does not estimate another effect.

On a small screen, swipe the table sideways to see every column.

Absolute toleranceRelative toleranceNumeric or missing-value checksWhere the comparison rule was specified
1e-081e-08102Specified separately for each compared value
0044Specified separately for each compared value

Error limits for the corrected calculation

The corrected calculation is checked using these rules. The comparison includes exact checks as well as checks allowing small numerical differences.

abs(native - aligned_reference) <= absolute_tolerance + relative_tolerance * abs(aligned_reference)

Use the same rule explained above: a fixed allowance plus one proportional to the reference value, with the limits in this table. Counts and missing-result checks are assessed separately from estimated values.

On a small screen, swipe the table sideways to see every column.

Absolute toleranceRelative toleranceNumeric or missing-value checksWhere the comparison rule was specified
1e-081e-08102Specified separately for each compared value
0044Specified separately for each compared value

Error limits for corrected installed results

These rules apply to the scientific results from the installed app. The chart-coordinate checks are reported separately and should not be confused with additional component estimates.

abs(native - aligned_reference) <= absolute_tolerance + relative_tolerance * abs(aligned_reference)

Use the same rule explained above: a fixed allowance plus one proportional to the reference value, with the limits in this table. Counts and missing-result checks are assessed separately from estimated values.

On a small screen, swipe the table sideways to see every column.

Absolute toleranceRelative toleranceNumeric or missing-value checksWhere the comparison rule was specified
1e-081e-08102Specified separately for each compared value
0044Specified separately for each compared value

What these checks tell you

Read the historical discrepancy and both correction checks in sequence. The corrected source and installed results support this unrotated example with its fixed number of components. They do not test every PCA option.

Rotation changes component directions, and parallel analysis helps choose how many components to retain by comparison with random-data results. Neither was tested here. The numerical and chart counts describe checks within the same analysis, not separate studies.

  • The original comparison records the precision problem that prompted the correction.
  • The corrected calculation is compared with the independent full-SVD results.
  • The installed check also verifies chart positions. Earlier screenshots remain historical context.

Inspect the comparison files

The JSON report separates the original difference, the corrected calculation and the installed-app check. The CSV lets you inspect the individual values and differences for those records.

To repeat the example, you need its original data, preparation, component count, rotation choice and software versions. The downloads report completed tests and do not include the original datasets or application source code.

Download the comparison results

See the values we checked, the differences we found and the software versions used. The download also identifies the original test files.

About these tests

These are QuickPLS development comparisons. Each record identifies the reference software or mathematical calculation, the tested build and the settings used.

How to understand these comparisons · Find checks for another method