LM_GAGA {GAGAs} | R Documentation |
Fit a linear model via the GAGA algorithm
Description
Fit a linear model with a Gaussian noise via the Global Adaptive Generative Adjustment algorithm
Usage
LM_GAGA(
X,
y,
alpha = 3,
itrNum = 50,
thresh = 0.001,
QR_flag = FALSE,
flag = TRUE,
lamda_0 = 0.001,
fix_sigma = FALSE,
sigm2_0 = 1,
fdiag = TRUE,
frp = TRUE
)
Arguments
X |
Input matrix, of dimension nobs*nvars; each row is an observation.
If the intercept term needs to be considered in the estimation process, then the first column of |
y |
Quantitative response vector. |
alpha |
Hyperparameter. The suggested value for alpha is 2 or 3. When the collinearity of the load matrix is serious, the hyperparameters can be selected larger, such as 5. |
itrNum |
The number of iteration steps. In general, 20 steps are enough.
If the condition number of |
thresh |
Convergence threshold for beta Change, if |
QR_flag |
It identifies whether to use QR decomposition to speed up the algorithm. Currently only valid for linear models. |
flag |
It identifies whether to make model selection. The default is |
lamda_0 |
The initial value of the regularization parameter for ridge regression. The running result of the algorithm is not sensitive to this value. |
fix_sigma |
It identifies whether to update the variance estimate of the Gaussian noise or not.
|
sigm2_0 |
The initial variance of the Gaussian noise. |
fdiag |
It identifies whether to use diag Approximation to speed up the algorithm. |
frp |
Identifies whether pre-processing is performed by the OMP method to reduce the number of parameters |
Value
Coefficient vector.
Examples
# Gaussian
set.seed(2022)
p_size = 30
sample_size=300
R1 = 3
R2 = 2
ratio = 0.5 # The ratio of zeroes in coefficients
# Set the true coefficients
zeroNum = round(ratio*p_size)
ind = sample(1:p_size,zeroNum)
beta_true = runif(p_size,0,R2)
beta_true[ind] = 0
X = R1*matrix(rnorm(sample_size * p_size), ncol = p_size)
y=X%*%beta_true + rnorm(sample_size,mean=0,sd=2)
# Estimation
fit = GAGAs(X,y,alpha = 3,family="gaussian")
Eb = fit$beta
#Create testing data
X_t = R1*matrix(rnorm(sample_size * p_size), ncol = p_size)
y_t=X_t%*%beta_true + rnorm(sample_size,mean=0,sd=2)
#Prediction
Ey = predict.GAGA(fit,newx=X_t)
cat("\n err:", norm(Eb-beta_true,type="2")/norm(beta_true,type="2"))
cat("\n acc:", cal.w.acc(as.character(Eb!=0),as.character(beta_true!=0)))
cat("\n perr:", norm(Ey-y_t,type="2")/sqrt(sample_size))