Estoy tratando de entender la técnica detrás del uso de un modelo de PCA para devolver los valores pronosticados de sus variables de entrada originales, con
He leído que, para volver del espacio PCA al espacio X, deberá calcular:
pronosticados = puntajes * cargas '
Siempre que busco en la fórmula de la salida 'guardar predicciones', ¿es esta ecuación lineal representativa del concepto anterior?
Gracias
PD: Sé que la PCA no está diseñada para el modelado predictivo, en última instancia, la uso para la detección de fallas con la salida T2 y SPE de Hotelling. Mi SPE (error de predicción al cuadrado) dependería de esta salida predicha.
Parece que la plataforma PCA no le da acceso directo a la matriz de puntuación. Pero el código a continuación puede ayudar a dar cierta confianza de que las fórmulas de predicción son como deberían ser. Genera datos gaussianos multivariados aleatorios para tres variables, y cuando se usan tres componentes principales (es decir, sin reducción de dimensionalidad) las predicciones son las mismas que las de los datos originales.
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])
)
);