You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中生成均值为0、方差为1的标准化对数正态分布数据

生成均值为0、方差为1的对数正态分布数据(R语言)

首先明确对数正态分布的核心性质:若随机变量 ( X \sim \text{LN}(\mu, \sigma^2) )(即 ( \ln(X) ) 服从均值为 ( \mu )、方差为 ( \sigma^2 ) 的正态分布),则:

  • 算术均值:( \mu_X = \exp\left(\mu + \frac{\sigma^2}{2}\right) )
  • 算术方差:( \sigma_X^2 = \left(\exp(\sigma^2) - 1\right) \cdot \exp\left(2\mu + \sigma^2\right) )
  • 算术标准差:( \sigma_X = \sqrt{\left(\exp(\sigma^2) - 1\right) \cdot \exp\left(2\mu + \sigma^2\right)} )

要得到均值为0、方差为1的标准化变量,需对原始对数正态变量做变换:( Y = \frac{X - \mu_X}{\sigma_X} )

修正后的代码

以你最初使用的 ( \mu=0 )、( \sigma=1 )(对应rlnorm函数的meanlog=0、sdlog=1参数)为例,正确的标准化实现如下:

# 生成原始对数正态数据
x <- rlnorm(n = 100000, meanlog = 0, sdlog = 1)

# 计算原始分布的均值和标准差
mu_x <- exp(0 + 1^2 / 2)
sigma_x <- sqrt((exp(1^2) - 1) * exp(2*0 + 1^2))

# 标准化得到均值0、方差1的数据
y <- (x - mu_x) / sigma_x

# 验证结果
mean(y)  # 输出接近0
var(y)   # 输出接近1

原代码的问题

你之前的分母使用了原始分布的方差值 ( \exp(1) \cdot (\exp(1)-1) ),但标准化需要除以标准差(方差的平方根)。这会导致最终变量的方差变为 ( \frac{1}{\text{原方差}} ),远小于1,这就是样本方差达不到1的直接原因。

内容的提问来源于stack exchange,提问作者Dylan Dijk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:52:08