【问题标题】:R plot logit transformed data on normal axis (logistic transformed)R在法线轴上绘制logit转换数据(逻辑转换)
【发布时间】:2020-06-30 10:23:13
【问题描述】:

我想以易于理解的方式绘制 logit 转换数据(最初是百分比),即在带有逻辑转换 y 轴的图中。

library(tidyverse)

set.seed(123)

# Logit transformation function
logit <- function(x){
  x <- x/100
  log(x/(1-x))
}

# Create sample data
df <- data.frame(x = seq(1,10,1), 
           y = runif(10, 0, 10)) %>% 
  mutate(y = logit(y))

# Plot
ggplot(df, aes(x,y)) +
  geom_point()

我注意到scale_y_continuous 函数有一个trans 参数,它应该能够完成这项工作。但是,logit 函数是内置的,但与 logistic 相对的函数不是。

如何正常绘制 logit 转换数据(即,使用逻辑转换 y 轴)?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    如果数据是百分比,并且您希望 y 轴进行 logit 转换,并且 y 轴标签保持为百分比,您可以从 scales 创建一个新的 trans 类,在下面的示例中,我使用与logit 函数等效的 qlogis:

    library(scales)
    logit_perc <- trans_new("logit perc",
    transform = function(x)qlogis(x/100),
    inverse = function(x)100*plogis(x)
    )
    
    set.seed(1001)
    df <- data.frame(x = seq(1,10,1),y = runif(10, 0, 10)) 
    
    ggplot(df,aes(x,y)) + geom_point() + coord_trans(y = logit_perc)
    

    如果您已经有 logit 中的值,并且您想使用 logit 比例绘制百分比标签:

    df = df %>% mutate(y=logit(y))
    
    # Plot
    ggplot(df, aes(x,y)) + geom_point() + 
    scale_y_continuous(labels=function(x)round(100*plogis(x),digits=1))
    

    而原来的情节是这样的:

    ggplot(df, aes(x,y)) + geom_point()
    

    【讨论】:

    • 嗨@user213544,如果我让你正确的话,你的y值在logit中,你想将它们显示为概率吗?你的意思是可解释的?
    • 是的:)!因此,例如,原始值为 4.5%。我 logit 将其转换为 -3.055049。但我希望轴将值显示为 4.5%。因此,转换应该保持存在,但标签应该是“原始的”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多