- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究 Richard McElreath 的 Statistical Rethinking 并且对他在 p.84 上使用的一些代码的工作方式感到困惑。该代码使用贝叶斯网格近似来推导两个模型参数,mu
和 sigma
, 来估计样本中的高度分布。
这是代码
首先我们列出候选人 mu
值(value)观
mu.list <- seq(from = 140, to = 160, length.out = 200)
然后是候选人名单sigma
值(value)观
sigma.list <- seq(from = 4, to = 9, length.out = 200) # grid of candidate sigma values
然后我们用 mu
的所有可能组合制作一个数据框和 sigma
.
post <- expand.grid(mu = mu.list, sigma = sigma.list) # expand grid so every mu is matched with every sigma
这是一个有 40000 行的数据集。
nrow(post)
[1] 40000
现在假设我们有一个测量高度的样本,其中包含 5 个测量值。
heights <- c(151.76, 139.70, 136.52, 156.84, 145.41)
现在对于我不明白的部分,合理的复杂度sapply
为 mu
的 40000 个候选组合中的每一个计算对数似然的循环和 sigma
, 基于五次高度测量的样本。
postVec <- sapply(1:nrow(post), function (i) sum( dnorm(
heights, # vector of heights
mean = post$mu[i], # candidate mean height value from corresponding position in grid
sd = post$sigma[i], # candidate sigma value from corresponding position in the grid
log = TRUE) ) # make values logs
)
我们从这个循环中得到的是一个 40000 个值长的向量,post
的每一行一个值。数据框。
length(postVec)
[1] 40000
我不明白的是,如果我们采用 dnorm()
跳出循环并为均值和标准差使用单个值,但在第一个参数中传递相同的 5 值样本向量高度,就像这样
dnorm( heights, mean = 140, sd = 4, log = TRUE )
我们得到五个值
[1] -6.627033 -2.308045 -2.683683 -11.167283 -3.219861
所以我的问题是:为什么 sapply 循环会传入 postVec
上面的向量产生 40000 个值,而不是 5 x 40000 = 200000 个值?
为什么 dnorm()
函数返回 sapply()
之外的五个值循环但(看似)其中只有一个值?
最佳答案
您在 dnorm
之前缺少 sum
:在 40000 个案例中的每一个案例中,它都会将这 5 个值相加以计算整个 heights< 的对数似然
而不仅仅是个人观察。
例如,如果没有 sum
我们确实有两个组合
sapply(1:2, function (i) dnorm(
heights,
mean = post$mu[i],
sd = post$sigma[i],
log = TRUE)
)
# [,1] [,2]
# [1,] -6.627033 -6.553479
# [2,] -2.308045 -2.310245
# [3,] -2.683683 -2.705858
# [4,] -11.167283 -11.061820
# [5,] -3.219861 -3.186194
使用 sum
时,我们得到了上述矩阵的列总和:
sapply(1:2, function (i) sum(dnorm(
heights,
mean = post$mu[i],
sd = post$sigma[i],
log = TRUE)
))
# [1] -26.00591 -25.81760
关于r - dnorm() 如何在 sapply 循环中处理分位数向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54271029/
我对统计和 R 很陌生。也许这是一个非常微不足道的问题,但我真的不明白这是如何工作的。 假设我使用 dnorm(5, 0, 2.5) .这意味着什么? 我看到一些资源,他们说这个函数计算密度曲线中点的
x % ggplot(aes(x, f)) + geom_line() 恕我直言,这应该给出与此完全相同的情节: x % ggplot() + geom_density
我正在研究 Richard McElreath 的 Statistical Rethinking 并且对他在 p.84 上使用的一些代码的工作方式感到困惑。该代码使用贝叶斯网格近似来推导两个模型参数,
我正在将一些 R 代码转换为 Rcpp 代码,并且需要在给定均值向量和标准差向量的情况下计算观察向量的可能性。如果我假设平均值为 0 且标准差为 1,我可以编写此函数(运行此函数需要加载“inline
这可能是关于 R 中“dnorm”函数的一些基本/基本问题。假设我通过 z 变换创建了一些 z 分数,并尝试从“dnorm”中求和。 data=c(232323,4444,22,2220929,22
在 R 中,我正在尝试在此文件上运行 sourceCpp: #include // [[Rcpp::depends(RcppArmadillo)]] using namespace arma; us
我正在探索一些数据,所以我想做的第一件事就是尝试拟合正态(高斯)分布。这是我第一次在 R 中尝试这个,所以我一次一步地尝试。首先,我预先对数据进行了分类: myhist = data.frame(si
我试图计算期望值为 200 和标准差为 20 的正态分布密度的积分。从 -Inf 到 Inf 这应该是 1。 我得到以下信息: > integrate(dnorm, mean=200, sd=20,-
在尝试将 R 包 stats 中的 dnorm() 和 pnorm() 函数导入 Rcpp 时,我遇到了以下奇怪的行为。我将均值为 0 且标准差为 1 的 dnorm() 和 pnorm() 应用于观
我是一名优秀的程序员,十分优秀!