【问题标题】:Plotting cumulative distributions with y-axis scaled to normal distribution in R在 R 中绘制 y 轴缩放为正态分布的累积分布
【发布时间】:2016-08-03 00:38:34
【问题描述】:

这是我第一次遇到在 Stack Overflow 上找不到的 R 问题 - 如果我没有找到任何东西的原因是我正在寻找的事物类型的特定术语,请原谅我我不知道(有吗?)。

我想将数据显示为累积频率。由于我更关注分布的边缘,因此将 y 轴缩放到正态分布会很有帮助。结果应如下所示:

我读过分位数-分位数图,但老实说,如果我想保留 X 轴,我不知道如何应用它们。

我尝试了base 图形和ggplot2,但无法弄清楚。因此,我目前的解决方案是,例如

plot(ecdf(trees$Volume))

ggplot(data=trees, aes(Volume)) + stat_ecdf()

【问题讨论】:

  • 也许你正在寻找这样的东西:plot(trees$Volume, cumsum(dnorm(trees$Volume, mean = mean(trees$Volume), sd = sd(trees$Volume))))?
  • 嗯,不,解决方案不起作用 - 曲线的形状大致可以,但同时 y 轴仍然是线性的,并且值的顺序似乎不正确。奇怪。

标签: r plot cumulative-frequency


【解决方案1】:

Peter Filzmoser 的 StatDA 包中的 qpplot.das 函数可能是您的“base R”方式。

library(StatDA) 
qpplot.das(trees$Volume, qdist = qnorm, xlab = "Volume", line = FALSE) 

output

StatDA 包用于 Reimann、Filzmoser、Garret 和 Dutter 所著Statistical Data Analysis Explained一书的所有计算和图形。所有R scripts 都在线,还有the QP plots 的示例。

【讨论】:

    【解决方案2】:

    我认为您正在寻找 scales 包和 probability_trans() 函数:

    不转换 y 比例:

    require(ggplot2)
    
    ggplot(data = trees,
           aes(Volume)) + 
        stat_ecdf()
    

    随着y轴的变换:

    ggplot(data = trees,
           aes(Volume)) + 
        stat_ecdf() + 
        scale_y_continuous(trans = scales::probability_trans("norm"))
    

    您可以在?probability_trans 的文档中阅读有关这些内容的更多信息。 probability_trans() 函数采用标准 R 概率名称来缩放您的轴。 如果您需要完全自定义的内容,还可以使用 trans_new() 创建新的转换。

    【讨论】:

    • 谢谢!这差不多。使用breaks = c(...) 和通过coord_cartesian() 指定的ylim,我得到的y 轴与上面的示例完全相同。
    • @Bearheart 很棒。很高兴听到我能提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2015-01-04
    • 2010-10-23
    • 2013-01-28
    相关资源
    最近更新 更多