# Pro tips for fully exploiting the potential of musclesyneRgies

    library(musclesyneRgies)

## Pro tips

### Parallel computation

For data sets bigger than the built-in ones, it might be worth it to run the synergy extraction in parallel (i.e., using more than one processor core or thread at once). This can be done with the following code, requiring the package “parallel”.

    # Load the built-in example data set
    data("FILT_EMG")

    # Create cluster for parallel computing if not already done
    clusters <- objects()

    if (sum(grepl("^cl$", clusters)) == 0) {
      # Decide how many processor threads have to be excluded from the cluster
      # It is a good idea to leave at least one free, so that the machine can be
      # used during computation
      cl <- parallel::makeCluster(max(1, parallel::detectCores() - 1))
    }
    # Extract synergies in parallel (will speed up computation only for larger data sets)
    # with a useful progress bar from `pbapply`
    SYNS <- pbapply::pblapply(FILT_EMG, musclesyneRgies::synsNMF, cl = cl)

    parallel::stopCluster(cl)

### Fractal analysis

When conducting fractal analysis of motor primitives for cyclic activities, the Higuchi’s fractal dimension (HFD) and the Hurst exponent (H) need to be calculated with care, as reported in Santuz & Akay (2020). In particular, HFD should be calculated by using only the most linear part of the log-log plot, while H should be calculated by using a minimum window length >= than the period. In the built-in example, the motor primitive has 30 cycles of 200 points each and a proper fractal analysis could be as follows.

    # Thirty-cycle locomotor primitive from Santuz & Akay (2020)
    data(primitive)

    # HFD with k_max = 10 to consider only the most linear part of the log-log plot
    # (it's the default value for this function anyway)
    Higuchi_fd <- HFD(primitive$signal, k_max = 10)$Higuchi
    message("Higuchi's fractal dimension: ", round(Higuchi_fd, 3))
    #> Higuchi's fractal dimension: 1.047

    # H with min_win = 200 points, which is the length of each cycle
    Hurst_exp <- Hurst(primitive$signal, min_win = max(primitive$time))$Hurst
    message("Hurst exponent: ", round(Hurst_exp, 3))
    #> Hurst exponent: 0.338