The first run of struct-lmm takes more than 4s no matter how small the input is.
Example
from struct_lmm import StructLMM
import numpy as np
from time import time
tests = ["inter", "assoc"]
rhos = [0.0, 0.1 ** 2, 0.2 ** 2, 0.3 ** 2, 0.4 ** 2, 0.5 ** 2, 0.5, 1.0]
def run(n, k):
random = np.random.RandomState(0)
y = random.randn(n, 1)
E = random.randn(n, k)
G = random.randn(n, 3)
M = np.ones((y.shape[0], 1))
print("y.shape: {}".format(y.shape))
print("E.shape: {}".format(E.shape))
print("G.shape: {}".format(G.shape))
print()
start_time = time()
if "inter" in tests:
slmi = StructLMM(y, E, W=E, rho_list=[0])
if "assoc" in tests:
slmm = StructLMM(y, E, W=E, rho_list=rhos)
slmm.fit_null(F=M, verbose=False)
_pvi = np.zeros(G.shape[1])
_pva = np.zeros(G.shape[1])
for snp in range(G.shape[1]):
x = G[:, [snp]]
if "inter" in tests:
# interaction test
M1 = np.hstack((M, x))
slmi.fit_null(F=M1, verbose=False)
_pvi[snp] = slmi.score_2_dof(x)
if "assoc" in tests:
# association test
_pva[snp] = slmm.score_2_dof(x)
elapsed_time = time() - start_time
print("Elapsed time: {:.2f}s".format(elapsed_time))
print()
if __name__ == "__main__":
n = 5
k = 3
run(n, k)
n = 1000
k = 3
run(n, k)
n = 5
k = 3
run(n, k)
on my machine. That slow start-up is slowing down limix tests quite a lot as tests often require clean start-up, which amounts to >4s. It also makes debugging limix package regarding struct-lmm run a slow process as most of the time is spent in that start-up.
The first run of struct-lmm takes more than 4s no matter how small the input is.
Example
The above code outputs
on my machine. That slow start-up is slowing down limix tests quite a lot as tests often require clean start-up, which amounts to >4s. It also makes debugging limix package regarding struct-lmm run a slow process as most of the time is spent in that start-up.