Skip to contents

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.

Value

Calculated C with attributes alpha and viaQR (when CalculateC)

Details

When epsAlpha=NULL calculations are performed directly (alpha=1) and alpha is not attribute.

Author

Øyvind Langsrud

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