京公网安备 11010802034615号
经营许可证编号:京B2-20210330
使用R进行统计分析--概率计算
R语言中提供了很多概率函数,可以方便的计算事件发生的概率。如二项分布概率函数和泊松分布概率函数。本篇文章介绍如果使用R语言中的这些函数求解事件发生的概率。
概率函数和前缀
R语言中每个概率分布都有对应的函数名称,例如二项分布是binmo,泊松分布是pois,正态分布是norm等等。每个函数都分别有四个不同的前缀,加上前缀可以生成随机数,求解概率和临界值等等。下面是四个前缀对应功能的说明。
r = random = 随机
d= density = 密度
p= probability = 概率
q =quantile = 分位
二项分布概率
假设网站的Landingpage页面中共有20个入口,那么我们预估每个入口被点击的概率为1/20,即P=0.05。(实际情况会复杂一些,每个入口在页面中的位置和展现的形式都 会不一样,一般首屏的入口比后面的入口会获得更多点击,图片和按钮形式的入口比文字类的入口更容易受到关注,导航和焦点图和Action按钮比其他类型的入口更容易 被点击。如有要获得最真实的点击概率,需要参考这个页面中每个入口的历史点击概率数据,这里我们只是假设一种理想情况来说明计算过程。)那么在10000次点击中, 关键按钮获得550次的概率是多少?
先来简单介绍下R语言中的二项分布函数和其中参数的含义,二项分布函数为binom,前缀d表示求密度,前缀p表示求累计概率。参数中X表示实验的成功次数,size表示实验次数,prob表示概率值。在这个例子中成功次数是550,实验次数是10000,概率为0.05。
#点击率0.05的情况下10000次点击中关键按钮恰好被点击550次的概率 > dbinom(x = 550,size = 10000,prob = 0.05)
[1] 0.001362855
经过计算10000次点击中关键按钮恰好被点击550次的概率为0.0013,这只是550次这个事件发生的概率值,并不包含549次点击和551次点击。但实际情况中恰好获得550并不是我们实际的目标。因此我们换一种计算方法再来看下。
#点击率0.05的情况下10000次点击中关键按钮被点击1-550次的概率
> sum(dbinom(x = 1:550,size = 10000,prob = 0.05))
[1] 0.9889429
在成功次数X中从之前的550变成了1:550,然后进行sum求和。获得从1点点击到550次点击的累计概率。从结果中可以看到概率高达0.98。这能说明10000次点击中关键按钮获得550次点击的概率非常高吗?我们能信心满满的说获得550次点击是个高概率事件吗?恐怕还不行。因为这是一个累计概率值,是从1次到550次的汇总。但我们的目标是获得550次或更多的点击,那么550次以下的点击量概率其实是我们不需要的。因此实际的概率值没有这么高。
> pbinom(q = 550,size = 10000,prob = 0.05)
[1] 0.9889429
计算积累概率值还有一个更简单的方法就是在二项分布概率函数的前面加前缀p,就可以自动获得550次点击的累计概率值了。结果与前面的方法一致。
#点击率0.05的情况下10000次点击中关键按钮获得500次到550次区间的点击的概率
> sum(dbinom(x = 500:550,size = 10000,prob = 0.05))
[1] 0.4953496
前面两种方法获得的概率值一个太低,一个太高。还有一种方法是只计算某个区间的概率值,这里我们将获得点击的次数限定在500次——550次之间,来求这一区间的概率值。从结果来看10000次点击中关键按钮获得500次——550次点击的概率为0.49。
#点击率0.05的情况下10000次点击中关键按钮分别获得500次到550次点击的概率
> dbinom(x = 500:550,size = 10000,prob = 0.05)
[1] 0.018301669 0.018265138 0.018190454 0.018078155 0.017929014 0.017744025 0.017524393 0.017271524 0.016987006 0.016672594 0.016330195
[12] 0.015961845 0.015569690 0.015155968 0.014722985 0.014273095 0.013808680 0.013332131 0.012845824 0.012352105 0.011853270 0.011351550
[23] 0.010849097 0.010347966 0.009850108 0.009357356 0.008871418 0.008393869 0.007926149 0.007469553 0.007025237 0.006594211 0.006177343
[34] 0.005775361 0.005388857 0.005018291 0.004663995 0.004326183 0.004004957 0.003700313 0.003412150 0.003140280 0.002884435 0.002644275
[45] 0.002419399 0.002209352 0.002013632 0.001831702 0.001662993 0.001506913 0.001362855
以上是点击量500次——到550次分解的概率值,0.49的概率值由以上的各个概率汇总而来。
#点击率0.05的情况下10000次点击中关键按钮获得550次以上点击的概率
> sum(dbinom(x = 551:10000,size = 10000,prob = 0.05))
[1] 0.01105708
再来看最开始的问题,10000次点击中关键按钮获得550次点击的概率。550次以下的点击不是我们希望的结果,因此我们再来看下点击量超过550次的概率有多少。从结果 来看获得点击量在551次——10000次的概率仅为0.011,因此获得超过550次以上的点击的概率比较低。
#点击率0.05的情况下10000次点击中关键按钮获得550次以上点击的概率
> 1-pbinom(q = 550,size = 10000,prob = 0.05)
[1] 0.01105708
由于从0到10000次点击的所有概率为1,因此用1减550次以下的概率值也能获得相同的结果。
泊松分布概率
假设在一次市场活动中,上一个小时中有40个用户注册,那么下一个小时有50个用户注册的概率是多少?
这里需要使用泊松分布概率函数,泊松分布函数是pois,第一个参数x是下一个时间段事件发生的次数,lambda是上一个时间段事件发生的次数。在这个例子中x=50, lambda=40。
#上一小时产生40个注册用户,下一小时产生恰好50个注册用户的概率
> dpois(x = 50,lambda = 40)
[1] 0.01770702
经过计算,下一个小时恰好有50个注册用户的概率为0.017。与二项分布中的问题一样,0.017是恰好50个用户的概率。不是49个用户也不是51个用户的概率。
#上一小时产生40个注册用户,下一小时产生1-50个注册用户的概率
> sum(dpois(x = 1:50,lambda = 40))
[1] 0.947372
把下一小时注册用户的数量改为1:50,并进行求和,获得了下一个小时获得1-50个注册用户的累计概率值。这个值有0.94。但我们的目标是50个注册用户,虽然概率很高 但低于50的事件发生并不是我们的目标。
> ppois(q = 50,lambda = 40)
[1] 0.947372
这是另一种计算方法,把泊松分布函数的前缀换为p,计算50个注册用户的累计概率值,结果与前面的方法一致。
#上一小时产生40个注册用户,下一小时产生40-50个注册用户区间的概率
> sum(dpois(x = 40:50,lambda = 40))
[1] 0.4684008
前一小时40个注册用户,后一个小时目标50个注册用户,我们来看下下一个小时注册用户是40-50这个区间的概率是多少。经过计算这个区间发生的概率为0.46。
#上一小时产生40个注册用户,下一小时分别产生40-50个注册用户的概率
> dpois(x = 40:50,lambda = 40)
[1] 0.06294704 0.06141175 0.05848738 0.05440686 0.04946078 0.04396514 0.03823056 0.03253664 0.02711387 0.02213377 0.01770702
这里显示了40-50个注册用户分别的发生概率,0.46的概率值由以上各个概率值汇总计算获得。
#上一小时产生40个注册用户,下一小时产生50个注册用户以上的概率
> 1-ppois(q = 50,lambda = 40)
[1] 0.05262805
最后再来看下下一个小时注册用户数量超过50的概率。用1减去50个用户的累计概率值就是超过50个注册用户发生的概率,计算结果是0.052,因此下一个小时获得超过50个注册用户的概率不高。数据分析师培训
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据分析、业务决策、科学研究等领域,统计模型是连接原始数据与业务价值的核心工具——它通过对数据的规律提炼、变量关联分析 ...
2026-02-14在SQL查询实操中,SELECT * 与 SELECT 字段1, 字段2,...(指定个别字段)是最常用的两种查询方式。很多开发者在日常开发中,为了 ...
2026-02-14对CDA(Certified Data Analyst)数据分析师而言,数据分析的核心不是孤立解读单个指标数值,而是构建一套科学、完整、贴合业务 ...
2026-02-14在Power BI实操中,函数是实现数据清洗、建模计算、可视化呈现的核心工具——无论是简单的数据筛选、异常值处理,还是复杂的度量 ...
2026-02-13在互联网运营、产品迭代、用户增长等工作中,“留存率”是衡量产品核心价值、用户粘性的核心指标——而次日留存率,作为留存率体 ...
2026-02-13对CDA(Certified Data Analyst)数据分析师而言,指标是贯穿工作全流程的核心载体,更是连接原始数据与业务洞察的关键桥梁。CDA ...
2026-02-13在机器学习建模实操中,“特征选择”是提升模型性能、简化模型复杂度、解读数据逻辑的核心步骤——而随机森林(Random Forest) ...
2026-02-12在MySQL数据查询实操中,按日期分组统计是高频需求——比如统计每日用户登录量、每日订单量、每日销售额,需要按日期分组展示, ...
2026-02-12对CDA(Certified Data Analyst)数据分析师而言,描述性统计是贯穿实操全流程的核心基础,更是从“原始数据”到“初步洞察”的 ...
2026-02-12备考CDA的小伙伴,专属宠粉福利来啦! 不用拼运气抽奖,不用复杂操作,只要转发CDA真题海报到朋友圈集赞,就能免费抱走实用好礼 ...
2026-02-11在数据科学、机器学习实操中,Anaconda是必备工具——它集成了Python解释器、conda包管理器,能快速搭建独立的虚拟环境,便捷安 ...
2026-02-11在Tableau数据可视化实操中,多表连接是高频操作——无论是将“产品表”与“销量表”连接分析产品销量,还是将“用户表”与“消 ...
2026-02-11在CDA(Certified Data Analyst)数据分析师的实操体系中,统计基本概念是不可或缺的核心根基,更是连接原始数据与业务洞察的关 ...
2026-02-11在数字经济飞速发展的今天,数据已成为核心生产要素,渗透到企业运营、民生服务、科技研发等各个领域。从个人手机里的浏览记录、 ...
2026-02-10在数据分析、实验研究中,我们经常会遇到小样本配对数据的差异检验场景——比如同一组受试者用药前后的指标对比、配对分组的两组 ...
2026-02-10在结构化数据分析领域,透视分析(Pivot Analysis)是CDA(Certified Data Analyst)数据分析师最常用、最高效的核心实操方法之 ...
2026-02-10在SQL数据库实操中,字段类型的合理设置是保证数据运算、统计准确性的基础。日常开发或数据分析时,我们常会遇到这样的问题:数 ...
2026-02-09在日常办公数据分析中,Excel数据透视表是最常用的高效工具之一——它能快速对海量数据进行分类汇总、分组统计,将杂乱无章的数 ...
2026-02-09表结构数据作为结构化数据的核心载体,其“获取-加工-使用”全流程,是CDA(Certified Data Analyst)数据分析师开展专业工作的 ...
2026-02-09在互联网产品运营、用户增长的实战场景中,很多从业者都会陷入一个误区:盲目投入资源做推广、拉新,却忽视了“拉新后的用户激活 ...
2026-02-06