gpt4 book ai didi

r - 用 R 在对数尺度上转换可变密度

转载 作者:行者123 更新时间:2023-12-04 11:49:26 25 4
gpt4 key购买 nike

我想绘制其范围如下的变量的密度:

 Min.   :-1214813.0  
1st Qu.: 1.0
Median : 40.0
Mean : 303.2
3rd Qu.: 166.0
Max. : 1623990.0

密度的线性图导致 [0,1000] 范围内的高柱,有两个非常长的尾部,朝向正无穷大和负无穷大。
因此,我想将变量转换为对数刻度,以便我可以看到均值附近发生了什么。
例如,我在想这样的事情:
log_values = c( -log10(-values[values<0]), log10(values[values>0]))

这导致:
Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-6.085 0.699 1.708 1.286 2.272 6.211

主要问题是它不包括 0值。
当然,我可以将所有值从 0 移开与 values[values>=0]+1 ,但这会在数据中引入一些失真。

将此变量转换为对数刻度的公认且科学可靠的方法是什么?

最佳答案

你所拥有的本质上就是@James 所建议的。这对于 (-1,1) 中的值是有问题的,尤其是那些接近原点的值:

x <- seq(-2, 2, by=.01)
plot(x, sign(x)*log10(abs(x)), pch='.')

enter image description here

像这样的事情可能会有所帮助:
y <- c(-log10(-x[x<(-1)])-1, x[x >= -1 & x <= 1], log10(x[x>1])+1)

plot(x, y, pch='.')

enter image description here

这是连续的。可以通过使用区间 (-1/log(10), 1/log(10)) 来强制 C^1,这是通过求解 d/dx log10(x) = 1 找到的:
z <- c( -log10(-x[x<(-1/log(10))]) - 1/log(10)+log10(1/log(10)),
x[x >= -1/log(10) & x <= 1/log(10)],
log10(x[x>1/log(10)]) + 1/log(10)-log10(1/log(10))
)
plot(x, z, pch='.')

enter image description here

关于r - 用 R 在对数尺度上转换可变密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14010332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com