Skip to content

inefficient inverse #1

@jun-yan

Description

@jun-yan

Estls <- function(X, Y) {
M <- cbind(X, Y)
lambda <- tail(eigen(t(M) %% M)$values, 1)
sigma2.hat <- lambda / n
Delta.hat <- (t(X) %
% X - lambda * diag(m)) / n
## beta.hat for the tls regression for adjusted X and Y with equal variance
beta.hat <- as.vector(solve(t(X) %% X - lambda * diag(m)) %% t(X) %% Y)
## [I|beta.hat]
I.b <- cbind(diag(m), beta.hat)
## var.hat for beta.hat
Var.hat <- sigma2.hat * (1 + sum(beta.hat^2)) *
(solve(Delta.hat) + sigma2.hat * solve(Delta.hat) %
%
solve(I.b %% t(I.b)) %% solve(Delta.hat)) / n
list(beta.hat = beta.hat, Var.hat = Var.hat)
}

  • invese of delta.hat is used in beta.hat
  • inverse of delta is used multiple times in Var.hat; so it makes sense to store it.
  • solve(I.b %*% t(I.b)) could be done with Woodbury's formula (more efficient for large m)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions