I have asked a similar question before, actually the damage is calculated via "steps". https://forums.obsidian.net/topic/98571-damage-calculation-with-multiple-modifiers/
Seems like they have treated action speed / recovery time in the same way. Every action speed bonuses are converted into -% time and caltulated together with +% time penalties.
Whenever a negative "step" exists, the exact result of multiple modifier will be quite confusing.
What I can say is:
1.Negative modifiers are stronger than positive modifiers if both of them are calculated together and the negative ones will be much more stronger the bigger the number is(closer to -1).
Example: just create a low dex heavy armor character and use pistol modal, you will find that the -50 recovery time makes all penalties completely insignificant. (So single weapon style + pistol modal is much better than dual wielding. This -50% recovery time is as strong as damage reduction of a graze.)
Example2: severely underarmorpenatration(-75% damage) is effectively -300% if calculated with other positive modifers. If u had 100% bonus, the final damage will be -1/(-1+(-300%+100%)) = 1/3. Congratulations! Your 100% bonus makes damage from 1/4 to 1/3 of BASE!
2.Multiple positve modifers stack additively, obviously weaker than multiplicative.
Multiple negative modifers stack neither additively nor multiplicatively, they are calculated in a inverse-related way. Also, the effect is weaker than treated multiplicative.
You can consider -x% damage as +(1/(1-x%) - 1) effective health, it is similiar like how armor works in WarCraft3 or Dota. It is logical because the devs wanted to make the return linear to investiment like additive bonuses, but direct combination with positive modifiers is not logical(If you want to mix them together anyway, the positive modifiers +x% damage will work as -x% effective health, which is not intended since it has not been converted from +x% damage to -y% effective health, that means a multiplication or inverse calculation with positive modifiers is not avoidable). I think some of those modifiers should be multiplied separately, at least they should calculate all positve modifers together and all negative modifiers together and then do a multiplication.