View source: R/logistic_GAGA.R
| logistic_GAGA | R Documentation | 
Fit a logistic model via the Global Adaptive Generative Adjustment algorithm
logistic_GAGA(
  X,
  y,
  alpha = 1,
  itrNum = 30,
  thresh = 0.001,
  flag = TRUE,
  lamda_0 = 0.001,
  fdiag = TRUE,
  subItrNum = 20
)
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 | 
 should be either a factor with two levels.  | 
alpha | 
 Hyperparameter. The suggested value for alpha is 1 or 2. 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   | 
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.  | 
fdiag | 
 It identifies whether to use diag Approximation to speed up the algorithm.  | 
subItrNum | 
 Maximum number of steps for subprocess iterations.  | 
Coefficient vector.
# binomial
set.seed(2022)
cat("\n")
cat("Test binomial GAGA\n")
p_size = 30
sample_size=600
test_size=1000
R1 = 1
R2 = 3
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,R2*0.2,R2)
beta_true[ind] = 0
X = R1*matrix(rnorm(sample_size * p_size), ncol = p_size)
X[1:sample_size,1]=1
t = 1/(1+exp(-X%*%beta_true))
tmp = runif(sample_size,0,1)
y = rep(0,sample_size)
y[t>tmp] = 1
fit = GAGAs(X,y,family = "binomial", alpha = 1)
Eb = fit$beta
#Generate test samples
X_t = R1*matrix(rnorm(test_size * p_size), ncol = p_size)
X_t[1:test_size,1]=1
t = 1/(1+exp(-X_t%*%beta_true))
tmp = runif(test_size,0,1)
y_t = rep(0,test_size)
y_t[t>tmp] = 1
#Prediction
Ey = predict(fit,newx = X_t)
cat("\n--------------------")
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 pacc:", cal.w.acc(as.character(Ey),as.character(y_t)))
cat("\n")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.