如何重新调整我的变量,使其中位数为 0,最小值不超过 -1,最大值不超过 +1?
How can I rescale my variable so that its median is 0, its min does not exceed -1 and its max does not exceed +1?
我正在尝试创建箱线图,其中我的变量的中位数在 0 处对齐。它们的范围不必固定在 [-1, 1],但我希望它们的最小值和最大值落在这个范围内范围。有我可以使用的操作吗?
我能够在 [-1, 1] 中标准化我的变量,但我的目标是让中位数对齐到 0,并且它们的范围刚好落在(不固定在)[-1, 1] 内.
这是执行此操作的函数。它找到哪个极端距离中位数更远,然后使用中位数和与中位数的最大距离将所有内容缩放到 -1 到 1 之间的范围内,中位数位于中心。如果数据没有范围(即最小值 = 中值 = 最大值),这将中断,因为这将导致无限的重新缩放因子,但我不确定在这种情况下预期的行为应该是什么。
rescale_center_median <- function(my_numbers) {
my_median = median(my_numbers, na.rm = TRUE)
my_range = range(my_numbers, na.rm = TRUE)
scale_factor = max(abs(my_range-my_median))
(my_numbers - my_median) / scale_factor
}
测试:
set.seed(42)
rescale_center_median(rnorm(10))
# [1] 0.60393025 -0.58015650 -0.01258313 0.15241963 0.01258313 -0.29963620 0.68991628
# [8] -0.29262249 1.00000000 -0.27308102
median(scaled_numbers)
#[1] 0
> range(scaled_numbers)
[1] -0.4922334 1.0000000
我正在尝试创建箱线图,其中我的变量的中位数在 0 处对齐。它们的范围不必固定在 [-1, 1],但我希望它们的最小值和最大值落在这个范围内范围。有我可以使用的操作吗?
我能够在 [-1, 1] 中标准化我的变量,但我的目标是让中位数对齐到 0,并且它们的范围刚好落在(不固定在)[-1, 1] 内.
这是执行此操作的函数。它找到哪个极端距离中位数更远,然后使用中位数和与中位数的最大距离将所有内容缩放到 -1 到 1 之间的范围内,中位数位于中心。如果数据没有范围(即最小值 = 中值 = 最大值),这将中断,因为这将导致无限的重新缩放因子,但我不确定在这种情况下预期的行为应该是什么。
rescale_center_median <- function(my_numbers) {
my_median = median(my_numbers, na.rm = TRUE)
my_range = range(my_numbers, na.rm = TRUE)
scale_factor = max(abs(my_range-my_median))
(my_numbers - my_median) / scale_factor
}
测试:
set.seed(42)
rescale_center_median(rnorm(10))
# [1] 0.60393025 -0.58015650 -0.01258313 0.15241963 0.01258313 -0.29963620 0.68991628
# [8] -0.29262249 1.00000000 -0.27308102
median(scaled_numbers)
#[1] 0
> range(scaled_numbers)
[1] -0.4922334 1.0000000