I know that it is calculated by multiplying the transaction size in virtual bytes (vBytes) by the fee rate in satoshis per vByte.
It's accurate.
The fee rate is determined by two main factors:
Three factors, you forgot that a Bitcoin user is free to choose a fee rate. It's a missing factor in your post.
Transaction size: Larger transactions require more data and result in higher fees per byte.
Again, you use vague word, I don't know what is larger transaction in your post.
A Bitcoin transaction has its size, that depends on its number of inputs, outputs and its type. You can reduce your transaction size by using less inputs, set less outputs, and choose better input script type like using Segwit.
Larger transaction in this context is not about its value in either
BTC or $.
Network demand: During periods of high activity, fees increase due to more competition for block space.
If you are experienced, you can avoid these times. No need to join these crazy fee rate races when you can have other better times to move your bitcoin with cheaper fee rate.