我試圖通過retain_PC的
我已經讀過,要從PCA空間返回X空間,你需要計算:
預測=得分*負荷'
每當我查看“保存預測”輸出的公式時,這個線性方程是否代表上述概念?
謝謝
PS我知道PCA不適用於預測建模,我最終使用Hotelling的T2和SPE輸出進行故障檢測。我的SPE(平方預測誤差)將取決於預測的輸出。
看起來PCA平台不允許您直接訪問分數矩陣。但是下面的代碼可能有助於確保預測公式符合預期。它為三個變量生成隨機多元高斯數據,並且當使用三個主成分(即沒有降維)時,預測與原始數據相同。
Names Default To Here( 1 );
// Function to generate n independant samples from a multivariate Gaussian
// m is the row vector of means
// v is the (square) variance-covariance matrix
// (Dimensions of m and v have to conform)
randomMultiGaussian = Function( {m, v, n},
{Default Local},
nDim = N Row( m );
If( (N Row( v ) != nDim) | (N Col( v ) != nDim),
Beep();
Print( "ERROR in randomMultiGaussian" );
Throw();
);
// Simulate random values . . .
t = Cholesky( v );
d = J( n, nDim, Random Normal() ) * t`;
// Build mean values columnwise . . .
mu = [];
For( i = 1, i <= nDim, i++,
mu ||= J( n, 1, m[i] )
);
// . . . and add the mean to get the final result
d = mu + d;
);
// Make some data
nPts = 100;
m = [0, 0, 0];
v = [1.0 0.2 0.8, 0.2 1.0 0.5, 0.8 0.5 1.0];
dMat = randomMultiGaussian(m, v, nPts);
dt = AsTable(dMat, << Column Names({"x1", "x2", "x3"}));
dt << setName("Sample from Multvariate Gaussian");
// Use PCA
pca = dt << Principal Components(Y( Eval(dt << getColumnNames) ));
// Save predictions
pca << savePredicteds(1); // Predictions with 1 PC
pca << savePredicteds(2); // Predictions with 2 PCs
pca << savePredicteds(3); // Predictions with 3 PCs
// See how the predicted x1 value varies with the number of PCs
dt << Graph Builder(
Show Control Panel( 0 ),
Variables(
X( :x1 ),
Y( :Predicted x1 3 ),
Y( :Predicted x1 2 ),
Y( :Predicted x1 )
)
);
// For 3 PCs compare the predicted values with the original data values
Print(
Maximum(
Maximum(Column(dt, "x1")[1::nPts] - Column(dt, "Predicted x1 3")[1::nPts]),
Maximum(Column(dt, "x2")[1::nPts] - Column(dt, "Predicted x2 3")[1::nPts]),
Maximum(Column(dt, "x3")[1::nPts] - Column(dt, "Predicted x3 3")[1::nPts])
)
);