Sto cercando di capire la tecnica alla base dell'utilizzo di un modello PCA per restituire i valori previsti delle variabili di input originali, con il valore
Ho letto che, per tornare dallo spazio PCA allo spazio X, devi calcolare:
predicti = punteggi * caricamenti
Ogni volta che analizzo la formula per l'output 'save predicteds', è questa equazione lineare rappresentativa del concetto precedente?
Grazie
PS So che la PCA non è pensata per la modellazione predittiva, in definitiva la sto usando per il rilevamento dei guasti con l'uscita T2 e SPE di Hotelling. Il mio SPE (errore di previsione quadratico) si baserebbe su questo output previsto.
Sembra che la piattaforma PCA non ti dia accesso diretto alla matrice punteggio. Ma il codice sotto può aiutare a dare una certa sicurezza che le formule di predizione sono come dovrebbero essere. Genera dati Gaussiani multivariati casuali per tre variabili e quando si utilizzano tre componenti principali (ovvero senza riduzione della dimensionalità) le previsioni sono le stesse dei dati originali.
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])
)
);