R语言中dim函数_在R语言中使用概率分布:dnorm,pnorm,qnorm和rnorm
原文链接:
在R语言中使用概率分布:dnorm,pnorm,qnorm和rnormtecdat.cn

在此段落中讨论的是一些用于处理正态分布问题的关键函数:dnorm、pnorm、qnorm以及rnorm等。这些函数在统计学分析中具有重要地位,并且被广泛应用于数据分析与模拟过程中。
R中的分布函数
有四个关联的函数, 四个正态分布函数是:
- d范数:衡量正态分布的概率密度。
- p范数:反映正态分布在某一点之前的累计概率。
- q范数:用于计算正态分布在特定概率水平下的关键分位点。
- r范數: 完成從服从 正態分佈 的總體中隨機 抽取 样本 的過程。
概率密度函数:dnorm


使用密度,可以确定事件的概率。例如,您可能想知道: 一个人的IQ恰好为140的可能性是多少? 。在这种情况下,您将需要检索IQ分布在值140处的密度。可以用100的平均值和15的标准差对IQ分布进行建模。相应的密度为:
sample.range <- 50:150 iq.mean <- 100 iq.sd <- 15 iq.dist <- dnorm(sample.range, mean = iq.mean, sd = iq.sd) iq.df <- data.frame("IQ" = sample.range, "Density" = iq.dist) library(ggplot2) ggplot(iq.df, aes(x = IQ, y = Density)) + geom_point()



通过这些数据集的分析结果, 我们能够有效解答初始问题以及扩展性问题. # 智力商为140的概率是多少? pp(iq.df$Density[iq.df$IQ == 140])

## [1] "0.076%"
likelihood of IQ >= 140?

## [1] "0.384%"
likelihood of 50 < IQ <= 90?

## [1] "26.284%"
累积密度函数:pnorm
累积密度(CDF)函数是单调增加的函数,因为它通过


为了更直观地认识CDF,请通过为IQ数据绘制一个图来展示累积分布函数的形态:ggplot(iq.df, aes(x = IQ, y = CDF_LowerTail)) + geom_point()



从图中可以看出,在绘图中展示出的累积分布函数(CDF)反映了智商不超过某一特定值的概率。这是因为R中的pnorm函数默认计算左尾部区域(即P(X ≤ x))。基于这一理解,在回答相关问题时我们可以采取不同的方法:我们需要确定智商介于50到90之间的概率是多少?

## [1] "25.249%"
specify lower.tail=FALSE indicating P[X>=x]
Probability for an IQ of at least 140 is the same when using dnorm()

## [1] "0.383%"
请注意, pnorm 的结果与手动汇总通过 dnorm 所获得的概率所得的结果相同。此外,通过设置lower.tail = FALSE,dnorm可用于直接计算p值,该p值用于衡量观察值的可能性至少与获得的值一样高。分位数功能:qnorm
分位数函数仅作为累积密度函数(ICDF)的反函数存在。它将概率映射到对应的值上。让我们详细分析分位数函数P[ X< = x ]P[X<=X]:
输入至qnorm的是一个概率向量 ggplot(icdf.df, aes(x = Probability, y = IQ)) + geom_point()



通过分位数函数这一工具, 我们可以解答与分位数相关的问题: # which represents the 25th IQ percentile.

## [1] 89.88265
what is the 75 IQ percentile?

## [1] 110.1173
note: this is the same results as from the quantile function

## 0% 25% 50% 75% 100% ## -Inf 89.88265 100.00000 110.11735 Inf
随机采样函数:rnorm
当您想从正态分布中抽取随机样本时,可以使用rnorm。例如,我们可以rnorm用来模拟IQ分布中的随机样本。
show one facet per random sample of a given size ggplot() + geom_histogram(data = my.df, aes(x = IQ)) + facet_wrap(.~SampleSize, scales = "free_y")



ggplot(my.sample.df, aes(x = IQ)) + geom_histogram()



为此,请注意我们通过调用set.seed来保证随机数生成器能够产生相同的数字序列以便实现结果的一致性
