The limit calculated by FindAlpha
is used when alpha =1 cannot be chosen (warning produced).
In output, alpha is attribute.
Usage
CalculateCdirect(a, b, epsAlpha = 1e-07, AlphaHandler = warning, alpha = NULL)
CalculateC(a, b, ..., viaQR = NULL, returnAlpha = FALSE)
Arguments
- a
matrix E in paper
- b
matrix Eg in paper
- epsAlpha
Precision constant for alpha calculation
- AlphaHandler
Function (warning or stop) to be used when alpha<1
- alpha
Possible with alpha as input instead of computing
- ...
Arguments to CalculateCdirect
- viaQR
When TRUE QR is involved. This may be needed to handle colinear data. When NULL viaQR is set to TRUE if ordinary computations fail.
- returnAlpha
When TRUE alpha (1 or value below 1) is returned instead of C. Attribute viaQR is included.
Details
When epsAlpha=NULL calculations are performed directly (alpha=1) and alpha is not attribute.
Examples
x <- 1:10
y <- matrix(rnorm(30) + 1:30, 10, 3)
a <- residuals(lm(y ~ x))
b <- residuals(lm(2 * y + matrix(rnorm(30), 10, 3) ~ x))
a1 <- a
b1 <- b
a1[, 3] <- a[, 1] + a[, 2]
b1[, 3] <- b[, 1] + b[, 2]
alpha <- FindAlpha(a, b)
FindAlphaSimple(a, b) # Same result as above
#> [1] 0.3470664
CalculateC(a, b)
#> Warning: alpha = 0.347066398752635
#> [,1] [,2] [,3]
#> [1,] 1.840137 -1.407390 0.897151875
#> [2,] 0.000000 2.082907 -0.380262716
#> [3,] 0.000000 0.000000 0.000955271
#> attr(,"alpha")
#> [1] 0.3470664
#> attr(,"viaQR")
#> [1] FALSE
CalculateCdirect(a, b) # Same result as above without viaQR attribute
#> Warning: alpha = 0.347066398752635
#> [,1] [,2] [,3]
#> [1,] 1.840137 -1.407390 0.897151875
#> [2,] 0.000000 2.082907 -0.380262716
#> [3,] 0.000000 0.000000 0.000955271
#> attr(,"alpha")
#> [1] 0.3470664
CalculateCdirect(a, b, alpha = alpha/(1 + 1e-07)) # Same result as above since epsAlpha = 1e-07
#> [,1] [,2] [,3]
#> [1,] 1.840137 -1.407390 0.897151875
#> [2,] 0.000000 2.082907 -0.380262716
#> [3,] 0.000000 0.000000 0.000955271
#> attr(,"alpha")
#> [1] 0.3470664
CalculateCdirect(a, b, alpha = alpha/2) # OK
#> [,1] [,2] [,3]
#> [1,] 2.986353 -1.496060 1.76726650
#> [2,] 0.000000 2.874595 0.04488436
#> [3,] 0.000000 0.000000 1.70010235
#> attr(,"alpha")
#> [1] 0.1735332
# CalculateCdirect(a,b, alpha = 2*alpha) # Not OK
FindAlpha(a, b1)
#> [1] 0.2683611
# FindAlphaSimple(a,b1) # Not working since b1 is collinear
CalculateC(a, b1, returnAlpha = TRUE) # Almost same alpha as above (epsAlpha cause difference)
#> Warning: alpha = 0.26836103483308
#> [1] 0.268361
#> attr(,"viaQR")
#> [1] FALSE
FindAlpha(b, a)
#> [1] 1.913342
CalculateC(b, a, returnAlpha = TRUE) # 1 returned (not same as above)
#> [1] 1
#> attr(,"viaQR")
#> [1] FALSE
CalculateC(b, a)
#> [,1] [,2] [,3]
#> [1,] 7.104527 -2.208985 4.737671
#> [2,] 0.000000 5.433107 1.479732
#> [3,] 0.000000 0.000000 4.872169
#> attr(,"alpha")
#> [1] 1
#> attr(,"viaQR")
#> [1] FALSE
FindAlpha(b1, a) # alpha smaller than epsAlpha is set to 0 in CalculateC
#> [1] 0
CalculateC(b1, a) # When alpha = 0 C is calculated by GenQR insetad of chol
#> Warning: alpha = 0
#> [,1] [,2] [,3]
#> [1,] 7.825387 -2.656425 5.168962
#> [2,] 0.000000 6.263964 6.263964
#> attr(,"alpha")
#> [1] 0
#> attr(,"viaQR")
#> [1] FALSE