-
Notifications
You must be signed in to change notification settings - Fork 0
/
distributions.Rmd
199 lines (127 loc) · 4.6 KB
/
distributions.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
---
title: "probability distributions"
author: "liuc"
date: '2022-07-19'
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## R package for analysis probability distributions
分布无疑是统计分析的核心概念,概率分布函数、概率密度函数、概率函数.
在拿到一批次的数据时,如何快速而精准的判断其的分布呢,毕竟并非所有的数据都有先验的经验告诉你其的分布。
概率累计分布函数,顾名思义是随着x值的变化而不断变化的增加的函数,其单调递增,Y轴通常为概率的叠加。
而概率密度函数一般为对应累计分布的变化速率,也即是随着x值的不断变化Y轴概率发生变化一般Y轴为变化率或者密度。
```{r}
library(distributional)
library(distr6) # 此包提供分布的一般性操作
library(ggdist)
```
在base R中,用来生成分布的函数主要有四种:
- stats::
`[dpqr]distribution_abbreviation()`
d = Density
p = Distribution function
q = Quantile function
r = Random generation (random deviates)
### stats中二项分布:
主要记住每一个函数返回的结果是啥。
```{r}
# 在10次实验中成功2次的概率, 返回概率
dbinom(x = 2,
size = 10,
prob = 0.2 # 每次成功的概率
)
# 10次中至多成功3次的概率,返回累计概率
pbinom(q = 3,
size = 10,
prob = 0.2
)
# 90%概率下我们至多能成功的次数,返回相应分位点x(即F(x)≥0.9对应的最小x值)
qbinom(p = 0.9,
size = 10,
prob = 0.2
)
# 重复10000组,每组6次试验,每组捉住泥鳅的次数是多少,返回每组成功的次数
table(rbinom(n = 1000,
size = 10,
prob = 0.2
))
```
##### 生成多变量的silulate的数据
Pseudo-random number generation for 11 multivariate distributions: Normal, t, Uniform, Bernoulli, Hypergeometric, Beta (Dirichlet), Multinomial, Dirichlet-Multinomial, Laplace, Wishart, and Inverted Wishart.
```{r}
library(MultiRNG)
options(digits = 3)
set.seed(42)
```
```{r}
mean <- c(230.7, 146.7, 3.6)
sigma <- matrix(c(15360.8, 6721.2, -47.1, 6721.2, 4700.9,
-16.5,-47.1, -16.5, 0.3), nrow=3, ncol=3)
mydata <- draw.d.variate.normal(500, 3, mean, sigma)
mydata <- as.data.frame(mydata)
```
### distr6 包中二项式分布的操作
同样是10次事件,目标事件成功的概率亦为0.2
`distr6`包还可以提供很多其他的信息.
```{r}
B <- distr6::Binomial$new(size = 10,
prob = 0.2
)
# 10次实验中,成功2次的概率
B$pdf(2)
# 10次实验中至多成功3次的累计概率
B$cdf(3)
# 90%概率下至多能成功的次数
B$quantile(0.9)
#
table(B$rand(1000))
```
### stats中柏松分布
Poisson分布是二项式分布的极限形式,泊松概率分布描述的是在某段时间或某个空间内发生随机事件次数的概率,简而言之就是:根据过去某个随机事件在某段时间或某个空间内发生的平均次数,预测该随机事件在未来同样长的时间或同样大的空间内发生k次的概率.
由于泊松分布适用于描述某段时间(或某个空间)内随机事件发生的次数,因此它常用于预测某些事件的发生。例如:某家医院在一定时间内到达的人数;超市收银台在某段时间内的结账人数;某段时间内发生自然灾害的次数;某段时间内DNA序列的变异数;放射性原子核在一段时间内的衰变数等等。
```{r}
# 返回发生x次随机事件的概率, 已知过去某段时间某件事发生的次数为1,求未来某时间段内发生1/2/3次的概率
# lambda 为过去发生的次数
dpois(x = 1:3,
lambda = 1
)
# 返回累积概率,至多发生1次事件的概率是多少?
ppois(q = 1,
lambda = 1
)
# 返回相应分位点x, 90%概率下能发生几次事件?
qpois(p = 0.9,
lambda = 1
)
# 返回每组发生随机事件的次数
rpois(n = 10,
lambda = 1
)
```
### distr6 柏松分布
```{r}
P <- distr6::Poisson$new(rate = 1,
decorators = NULL
)
P$pdf(1)
P$cdf(1)
P$quantile(0.9)
P$summary()
```
## 检查某一数据的分布
记录几个检查数据分布的函数。
```{r}
require(MASS)
require(fitdistrplus)
```
除了正态分布外还有几个参数可以选择:
```{r}
car::qqp(recog$Aggression.t, "norm")
```
检查是否是gamma分布:
```{r}
gamma <- MASS::fitdistr(recog$Aggression.t, "gamma")
car::qqp(recog$Aggression.t, "gamma", shape = gamma$estimate[[1]], rate = gamma$estimate[[2]])
```