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

R语言中使用手动指定的已知均值计算分组标准差的方法

实现方法

方法1:直接在summarise中写计算逻辑(无需自定义函数)

已知均值固定为0时,标准差的计算可以直接基于平方和完成,天然适配dplyr的分组运算规则,写法和你之前用内置sd()的逻辑几乎一致:

  • 如需计算总体标准差(分母为样本量n,均值已知无需估计时常用):
ans <- temp %>% 
  group_by(permno) %>% 
  summarise(std_fixed = sqrt(sum(ret^2, na.rm = TRUE)/n()))
  • 如需和内置sd()保持一致的无偏估计逻辑(分母为n-1):
ans <- temp %>% 
  group_by(permno) %>% 
  summarise(std_fixed_unbiased = sqrt(sum(ret^2, na.rm = TRUE)/(n()-1)))

方法2:封装自定义函数复用

如果需要频繁使用固定均值计算标准差,可以先封装自定义函数,后续分组调用和内置函数用法完全一致:

  1. 先定义函数:
# 参数说明:
# x: 要计算标准差的向量
# mu: 已知的固定均值,默认设为0
# unbiased: 是否使用无偏估计(分母n-1),默认开启
# na.rm: 是否自动忽略NA值,默认关闭
sd_fixed_mean <- function(x, mu = 0, unbiased = TRUE, na.rm = FALSE) {
  if(na.rm) x <- na.omit(x)
  n <- length(x)
  if(n == 0) return(NA_real_)
  sum_sq <- sum((x - mu)^2)
  denominator <- ifelse(unbiased, n - 1, n)
  return(sqrt(sum_sq / denominator))
}
  1. 分组调用,和你之前用sd()的写法完全一致:
ans <- temp %>% 
  group_by(permno) %>% 
  summarise(std = sd_fixed_mean(ret, mu = 0, na.rm = TRUE))

注意事项

如果你的ret列存在缺失值,记得传入na.rm = TRUE参数,否则计算结果会返回NA,行为和R内置的sd()函数一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:06:02