在R中绘制概率分布
Introduction
无耻的学校竟然提出校园网按流量收费的计划 真是想钱想疯了
于是 一个问题变得很重要了:我每月的流量在全校范围内算什么水平?
或者换一个国产逗逼软件经常使用的说法:你的流量击败了全国98%的用户
Methods
可惜这种数据我是拿不到的 但我们可以研究方法啊
既然是统计分析 肯定要用GNU R 我感觉我想要的东西应该叫「概率分布」 在R里面一般用柱状图(histograms)表示
首先我们生成一万个数据 假定它们是正态分布的 平均数是8 标准偏差是3
1 | flow <- rnorm(10000, m = 8, sd = 3) |
我们先用默认的试试
1 | hist(flow) |
参考[1]中的效果我们弄的好看一点
1 | a <- hist(flow, breaks = 30, xlab = "Network traffic (Gb)", ylab = "People", main = "Network traffic", col = "lightgreen", xlim = c(0, 20), ylim = c(0, 1500)) |
从图里可以看出 7到8Gb和8到9Gb的用户是最多的
但参考[1]中添加的是正态分布的趋势线 这个不太好:我怎么知道它就是正态分布的呢
这里其实应该用density()
函数 我们还是用默认的好了
1 | den <- density(flow) |
但怎么从den
里面获得类似「你击败了多少用户」我倒是有点糊涂了
den
是个曲线 就是一堆(x,y)
那么我们可以用which()
来实现 我不知道有没有更好的方法
1 | sum(den$y[which(den$x <= 8.5)]) / sum(den$y) |
解释一下 假设我的流量是8.5Gb 那么我就在den的x值里面找小于等于8.5的值 看看对应的y
是多少 再除以总的密度 就是流量小于等于8.5 Gb
占的比例了
我得到的结果是0.5672
Update:
或者 我直接求出个数就可以了 不用什么统计分析
1 | b <- which(flow <= 8.5); length(b) |
这算两种实现方式罢 在这里第二种方法的结果是0.5663
很接近
如果数据量特别大 明显第二种方法不合适 这也算统计学威力了罢
另外 以前对R大都关注那些统计方面的 没想到一个小小的which()
还挺有意思 看来R不仅是个软件 更是一种语言 此言不虚
或者您可以把评论发在别处,添加指向本页的连接,然后把网址告诉我:
本文标题:在R中绘制概率分布
文章作者:Chris
发布时间:2015-08-26
最后更新:2022-03-23
原始链接:https://chriszheng.science/2015/08/26/Probability-distribution-in-R/
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!
分享