前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言数据分布检验的小例子

R语言数据分布检验的小例子

作者头像
用户7010445
发布2020-03-03 15:14:20
2.2K0
发布2020-03-03 15:14:20
举报

今天在B站看了毕导的《我给自己发了2亿个红包,才发现先抢和后抢的差距这么大!》的视频,非常有意思,大家感兴趣也可以到B站观看。

视频地址

https://www.bilibili.com/video/av84581638?from=search&seid=2721954210688527324

娱乐之余,记录一下视频中涉及到的统计学知识点。

首先是试验设计

5个人,发150次红包,每次50块,为了排除其他变量的干扰比如人品等因素,每抢30次调换一下顺序。然后对数据进行统计。

第一步对数据可视化展示,观察数据的规律

因为没有原始数据,看完整个视频后根据毕导总结的规律模拟数据 数据的基本规律是

  • 第一个抢红包的金额符合0.01~20的均匀分布
  • 第二个抢红包的金额符合0.01~24.99的均匀分布
  • 第三个抢红包的金额符合0.01~33.32的均匀分布
  • 第四五个抢红包的金额符合0.01~49.96的均匀分布
代码语言:javascript
复制
df<-data.frame(Group=c(rep("A",150),rep("B",150),rep("C",150),rep("D",150),rep("E",150)),
               Money=c(runif(150,0.01,20),runif(150,0.01,24.99),
                       runif(150,0.01,33.32),runif(150,0.01,49.96),
                       runif(150,0.01,49.96)))
df
library(ggplot2)
library(RColorBrewer)
ggplot(df,aes(x=Group,y=Money,color=Group))+
  geom_jitter(width=0.15,size=1.5)+
  theme_bw()+
  scale_color_manual(values=rainbow(5))+
  scale_x_discrete(labels=c("First","Second","Third","Fourth","Fifth"))+
  labs(x="")+
  theme(legend.position = "None")

image.png

  • 第一个小知识点:R语言里产生符合均匀分布的随机数的函数是runif() https://stat.ethz.ch/R-manual/R-devel/library/stats/html/Uniform.html

通过散点图观察第一个抢红包的人的金额分布可以初步推断数据符合0~20的均匀分布

代码语言:javascript
复制
df1<-df[1:150,]
ggplot(df1,aes(x=Group,y=Money))+
  geom_point(color="red",alpha=0.6)+
  theme_bw()

image.png

为了验证这个想法使用Kolmogorov-Smirnov Test检验(简称K-S检验)验证数据是否符合均均分布
  • 第二个知识点:R语言只中K-S检验的函数是ks.test() https://stat.ethz.ch/R-manual/R-devel/library/stats/html/ks.test.html

假设检验的原假设H0是数据符合指定分布,P值小于0.05拒绝原假设

代码语言:javascript
复制
> ks.test(df1$Money,"punif")

    One-sample Kolmogorov-Smirnov test

data:  df1$Money
D = 0.96667, p-value = 1.221e-15
alternative hypothesis: two-sided

这里不知道什么原因计算出来的P值竟然小于0.05,说明结果不符合均匀分布

搜索原因的时候找到了 https://stats.stackexchange.com/questions/137408/low-p-value-in-test-of-uniformity-of-uniformly-distributed-data 暂时还没看懂

也找到了一个函数

代码语言:javascript
复制
install.packages('swfscMisc')
library('swfscMisc')
uniform.test(hist(runif(100,0.01,20)), B = 1000)

这个函数计算出来的P值是大于0.05的。

接下来是k样本Anderson-Darling检验

主要作用是检验几个样本是否来自同一总体 R语言里的实现函数是ad.test()

代码语言:javascript
复制
install.packages("nortest")
library(nortest)            
ad.test(rnorm(100))

输入一个参数可以检验数据是否符合正态分布,原假设是数据符合正态分布 https://www.statology.org/how-to-conduct-an-anderson-darling-test-in-r/

多样本检验 https://rdrr.io/cran/kSamples/man/ad.test.html

代码语言:javascript
复制
x<-rnorm(10)
y<-rnorm(10)
z<-rnorm(10)
install.packages("kSamples")
kSamples::ad.test(list(x,y,z),method="exact")



 Anderson-Darling k-sample test.

Number of samples:  3
Sample sizes:  10, 10, 10
Number of ties: 0

Mean of  Anderson-Darling  Criterion: 2
Standard deviation of  Anderson-Darling  Criterion: 0.99539

T.AD = ( Anderson-Darling  Criterion - mean)/sigma

Null Hypothesis: All samples come from a common population.

Based on Nsim = 10000 simulations

              AD  T.AD  asympt. P-value  sim. P-value
version 1: 6.949 4.972         0.001924        0.0013
version 2: 7.020 5.046         0.001787        0.0013

接下来的视频内容还提到了

  • 贝叶斯估计
  • 蒙特卡罗算法

这两个算法如何用R语言来实现可是真的不会了!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先是试验设计
  • 第一步对数据可视化展示,观察数据的规律
  • 为了验证这个想法使用Kolmogorov-Smirnov Test检验(简称K-S检验)验证数据是否符合均均分布
  • 接下来是k样本Anderson-Darling检验
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档