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

R语言pnorm计算比例结果一致,未调用指定数据集问题求助

问题原因与解决方法

你两次计算结果相同,不是R没使用子集数据,而是误用了pnorm()函数:

  • pnorm(a, mu, sigma)计算的是理论正态分布中数值小于等于a的概率。当你计算pnorm(μ+σ, μ, σ) - pnorm(μ-σ, μ, σ)时,本质是求正态分布中落在均值±1标准差范围内的理论概率,这个值是固定的0.6826895——这是正态分布的固有性质,和你输入的具体数据集的均值、标准差无关,不管用全体数据还是子集的μ和σ,结果都一样。

如果你想计算实际数据中落在该区间的比例,应该统计数据中符合条件的样本数占总样本数的比例,而非调用理论正态分布的概率函数。

修正后的代码

全体体重数据的实际比例计算

library(dplyr)
bodyweights <- dat$Bodyweight
mean_bodyweights <- mean(bodyweights)
sd_bodyweight <- sd(bodyweights)
lower_bound <- mean_bodyweights - sd_bodyweight
upper_bound <- mean_bodyweights + sd_bodyweight
# 用mean()统计逻辑向量的占比(TRUE=1,FALSE=0)
proportion_with1sd <- mean(bodyweights >= lower_bound & bodyweights <= upper_bound)
print(proportion_with1sd)

雄性对照饮食小鼠的实际比例计算

library(dplyr)

male_chow_data <- dat %>%
  filter(Sex == "M" & Diet == "chow")
y <- male_chow_data$Bodyweight
mean_weight_chow <- mean(y)
sd_weight_chow <- sd(y) # 若需要总体标准差,可改用popsd(y),需确保加载matrixStats等对应包
lower_bound <- mean_weight_chow - sd_weight_chow
upper_bound <- mean_weight_chow + sd_weight_chow
# 统计实际落在区间内的样本占比
proportion_within1sd <- mean(y >= lower_bound & y <= upper_bound)
print(proportion_within1sd)

补充说明

如果你的数据近似正态分布,实际比例会接近0.68,但不会完全等于理论值——只有完美的正态分布样本才会和理论值完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:32:25