【问题标题】:Rescale a variable with median 1, minimum value 0 and no limit on the maximum value重新调整中位数为 1、最小值为 0 且最大值没有限制的变量
【发布时间】:2019-04-18 18:08:02
【问题描述】:

我是统计新手,如果这个问题是微不足道的,请原谅

我有一个正态分布的变量,范围在 -15 到 +15 之间,如下所示:

 df <- data.frame("weight" = runif(1000, min=-15, max=15), stringsAsFactors = FALSE)

这个变量的中位数和平均值为0。

我需要转换此变量以将其用作回归中的权重。出于实质性原因,在我的变量中包含负值没有任何意义(它本身是先前转换的结果)。 我的变量的负值应该简单地减少我的主要解释变量的影响(因此应该在 0 和 1 之间),而正值应该对我的解释变量产生乘法效应(大于 1)。虽然接近我体重 0 的值对我的解释变量(接近 1)没有影响。

因此我想将我的变量居中,使我的体重的最小值为 0,中值变为 1,而我不想限制最大值认为这必然改变平均值(它将变得大于 1)。只要中位数保持在 1,我就不会担心这一点。

到目前为止,我已经考虑将 0 到 2 之间的变量标准化

 library(BBmisc)
 df$normalizedweight <- normalize(df$weight, method = "range",
        range = c(0, 2)) 

但是,此操作对我的标准化变量施加了不必要的约束,因为我的体重的影响可能大于两倍,而

澄清一下,在实际数据中,权重的负值完全反映了权重的正值。理想情况下,一旦我对数据进行了标准化,我希望将相同的数字乘以权重的最大值和最小值,以相同的比例增加/减少值。 例如,对于我的体重的最大值(10)和最小值,取响应变量的值 5,最小值应该是 0.1,这样 5*10 和 5*0.1 将是成比例的增加/减少是我原来价值的 10 倍。

提前感谢您提供的所有帮助

最好的

【问题讨论】:

    标签: r range rescale


    【解决方案1】:

    一种选择是使用指数变换。你所有的负值都在 0 和 1 之间,你所有的正值都将超过 1。你的中值将接近 1。 此外,由于exp() 会产生非常大的值(exp(15) = 3 269 017),您可以先将值除以其最大值。

    sample <- runif(10000, min=-15, max=15)
    
    sample_transform = exp(sample / max(sample))
    median(sample_transform)
    # [1] 0.9930663
    hist(sample_transform)
    

    【讨论】:

    • 太好了,这很有用!!
    • 进一步澄清一下,您对我如何才能从本质上解释我除以样本的最大值这一事实有什么建议吗?
    • 我不确定你能不能理解它,它只是一种扩展数据和改变应用领域的方法。
    猜你喜欢
    • 2021-07-10
    • 2019-12-08
    • 1970-01-01
    • 2015-10-15
    • 2012-08-09
    • 1970-01-01
    • 2018-05-30
    • 2010-12-26
    • 2013-04-10
    相关资源
    最近更新 更多