Does anyone have details on how imputation works? By this I mean the equations behind it?
I tried a really simple data set:
I did Multivariate Normal Distribution with Shrinkage, and it nicely filled in the missing value of Y=3.
Then I did the same, with:
and the result was Y=3.584.
I'd like to know details of how the Multivariate Normal Imputation algorithm works, but I can't find any simple explanation of it anywhere. Any clues?
The routine of Multivariate Normal Impute() was created either by @chris_gotwalt1 or @clay_barker. I call this routine in Multivariate when data imputation is needed.
I guess you expect the imputed value would be identical to the value next to it. This expectation is unrealistic.
Think of the Normal in the name of this function and envision a normal CDF centered at 3 in your case, with 1 and 5 at the extremes. Only the 3 would be the exact value. The others are at the bounds. This is extremely simplistic and meant to give you a feel for it and not how it actually works.
I'm not in a position to give a detailed explanation on how Multivariate Normal Impute() works, but the imputed values are affected by mean, covariance and are bounded with min and max.
I have created the following jsl for to help demonstrate how it works.
///////////////////////////////////////// JSL explains how data is imputed by Multivariate Normal Impute ////////////////////////////////////////////////////
/***************************************************************************************
y = Multivariate Normal Impute( yVec, meanYvec, symCovMat, colMin, colMax )
Returns a response vector with imputed values for the missing values in the
[[yVec]] vector of responses. Imputations are based on a multivariate normal
distribution with mean vector [[meanYvec]] and symmetric covariance matrix [[symCovMat]].
Optional arguments [[colMin]] and [[colMax]] are the respective vectors of column minimums
and maximums. These arguments provide bounds for the imputations."
******************************************************************************************/
//Imputation example
matFull=[1 1,
2 2,
3 3,
4 4,
5 5
];
for (i=1, i<=N Row( matFull), i++,
mat=matFull;
mat[i,2]=.;
//calculate a variance
cov = Covariance(
mat,
<
Thank you @jianfeng_ding ! This is very helpful. I can "see" how it works now.
Jerry