@@ -51,7 +51,6 @@ MddsPLS_core <- function(Xs,Y,lambda=0,R=1,mode="reg",
51
51
weight = FALSE ,
52
52
id_na = NULL ,
53
53
NZV = 1e-9 ){
54
-
55
54
my_scale <- function (a ){
56
55
if (! is.matrix(a )){
57
56
a <- as.matrix(a ,ncol = 1 )
@@ -181,6 +180,12 @@ MddsPLS_core <- function(Xs,Y,lambda=0,R=1,mode="reg",
181
180
u_t_r = u_t_r_0 <- list ()
182
181
t_r <- list ()
183
182
z_t = t_t <- list ()
183
+ for (k in 1 : K ){
184
+ z_t [[k ]]= t_t [[k ]] <- matrix (NA ,n ,R )
185
+ }
186
+ for (r in 1 : R ){
187
+ t_r [[r ]] <- matrix (NA ,n ,K )
188
+ }
184
189
# BETA_r <- list()
185
190
for (k in 1 : K ){
186
191
if (norm(Ms [[k ]])== 0 ){
@@ -215,24 +220,37 @@ MddsPLS_core <- function(Xs,Y,lambda=0,R=1,mode="reg",
215
220
}else {
216
221
svd_k <- list (v = matrix (0 ,nrow = ncol(Ms [[k ]]),ncol = R ),
217
222
d = rep(0 ,R ))
223
+ Phi_r <- list ()
218
224
for (r in 1 : R ){
219
225
if (r == 1 ){
220
226
X_0 <- Xs [[k ]]
221
227
Y_0 <- Y
228
+ Phi_r [[k ]] <- diag(ps [k ])
222
229
}
223
230
# # Solve optimisation problem
224
231
svd_ms_f_def <- svd(Ms [[k ]],nu = 0 ,nv = 1 )
225
232
u_r_def <- svd_ms_f_def $ v
226
- norm_st_sc <- svd_ms_f_def $ d [1 ]
227
- if (norm_st_sc < NZV ){
233
+ norm_th_sc <- svd_ms_f_def $ d [1 ]
234
+ if (norm_th_sc < NZV ){
228
235
u_r_def <- u_r_def * 0
229
236
}
230
- svd_k $ v [,r ] <- u_r_def
231
237
t_r_def <- mmultC(X_0 ,u_r_def )
238
+ t_r [[r ]][,k ] <- t_r_def
239
+ z_t [[k ]][,r ] <- mmultC(Ms [[k ]],u_r_def )
240
+ t_t [[k ]][,r ] <- mmultC(X_0 ,u_r_def )
241
+ if (norm_th_sc > NZV ){
242
+ nrom_t_r_2 <- sum(t_r_def ^ 2 )
243
+ bXr <- crossprod(t_r_def ,X_0 )/ nrom_t_r_2
244
+ if (r > 1 ){
245
+ u_r_def <- mmultC(Phi_r [[k ]],u_r_def )
246
+ }
247
+ Phi_r [[k ]] = mmultC(Phi_r [[k ]],diag(ps [k ])- mmultC(u_r_def ,bXr ))
248
+ }
249
+ svd_k $ v [,r ] <- u_r_def
232
250
# # Perform deflation
233
251
norm_sc <- sum(t_r_def ^ 2 )
234
252
svd_k $ d [r ] <- sqrt(norm_sc )
235
- if (norm_st_sc != 0 ){
253
+ if (norm_th_sc != 0 ){
236
254
X_0 <- X_0 - mmultC(t_r_def ,crossprod(t_r_def ,X_0 ))/ norm_sc
237
255
if (mode == " reg" ){
238
256
Y_0 <- Y_0 - mmultC(t_r_def ,crossprod(t_r_def ,Y_0 ))/ norm_sc
@@ -252,21 +270,23 @@ MddsPLS_core <- function(Xs,Y,lambda=0,R=1,mode="reg",
252
270
if (weight & svd_k $ d [1 ]!= 0 ){
253
271
u_t_r [[k ]] <- u_t_r [[k ]]/ length(which(rowSums(abs(u_t_r [[k ]]))> NZV ))
254
272
}
255
- if (k == 1 ){
256
- for (r in 1 : R ){
257
- t_r [[r ]] <- matrix (0 ,n ,K )
273
+ if (! deflat & is.null(mu )){
274
+ if (k == 1 ){
275
+ for (r in 1 : R ){
276
+ t_r [[r ]] <- matrix (0 ,n ,K )
277
+ }
258
278
}
259
- }
260
- for ( r in 1 : R ){
261
- if ( svd_k $ d [ r ] != 0 ){
262
- t_r [[ r ]][, k ] <- mmultC( Xs [[ k ]], u_t_r [[ k ]][, r , drop = F ])
279
+ for ( r in 1 : R ){
280
+ if ( svd_k $ d [ r ] != 0 ){
281
+ t_r [[ r ]][, k ] <- mmultC( Xs [[ k ]], u_t_r [[ k ]][, r , drop = F ])
282
+ }
263
283
}
284
+ z_t [[k ]] <- mmultC(Ms [[k ]],u_t_r [[k ]])
285
+ # if(weight & svd_k$d[1]!=0){
286
+ # z_t[[k]] <- z_t[[k]]/length(which(rowSums(abs(u_t_r[[k]]))>NZV))
287
+ # }
288
+ t_t [[k ]] <- mmultC(Xs [[k ]],u_t_r [[k ]])# crossprod(Y,Xs[[k]]%*%u_t_r[[k]])
264
289
}
265
- z_t [[k ]] <- mmultC(Ms [[k ]],u_t_r [[k ]])
266
- # if(weight & svd_k$d[1]!=0){
267
- # z_t[[k]] <- z_t[[k]]/length(which(rowSums(abs(u_t_r[[k]]))>NZV))
268
- # }
269
- t_t [[k ]] <- mmultC(Xs [[k ]],u_t_r [[k ]])# crossprod(Y,Xs[[k]]%*%u_t_r[[k]])
270
290
}
271
291
U_t_super = beta_list <- list ()
272
292
if (is.null(mu )){
@@ -355,7 +375,8 @@ MddsPLS_core <- function(Xs,Y,lambda=0,R=1,mode="reg",
355
375
count_reg <- count_reg + 1
356
376
}
357
377
}
358
- Q <- mmultC(solve(crossprod(T_super_reg )+ n * mu * diag(1 ,R * K )),
378
+ regulMat_Inv <- solve(crossprod(T_super_reg )+ n * mu * diag(1 ,R * K ))
379
+ Q <- mmultC(regulMat_Inv ,
359
380
crossprod(T_super_reg ,Y ))
360
381
count_reg <- 1
361
382
for (k in 1 : K ){
0 commit comments