I don't have any idea about the data structure you have problems with in particular, however I think I get the gist enough to help with a solution.
What you need is a transformation of the value in question, that maps the the positive values and the negative values to the same values, hopefully in a way that preserves size (that is; symmetric and monotonically increasing on the interval [0,+∞)). This can be done simply by using the abs function.
Where you can choose to do the transformation inside the aes
library(tidyverse)
tibble(value = runif(n = 20, min = -10, 10),
lat = 1:20) %>%
ggplot(aes(lat, value, size = abs(value))) +
geom_point()
or modify the data.frame you are working with
tibble(value = runif(n = 20, min = -10, 10),
lat = 1:20) %>%
mutate(size = abs(value)) %>%
ggplot(aes(lat, value, size = size)) +
geom_point()