微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在R中计算合并的标准偏差/或如何在Rstudio中使用函数pooled.sd

如何解决如何在R中计算合并的标准偏差/或如何在Rstudio中使用函数pooled.sd

如何计算R中的合并标准偏差?

下面是我的数据集的代码(由于我的数据集包含很多条目,因此我无法在此处复制粘贴)

install.packages("Sleuth3")
 library(Sleuth3)
 View(ex0126)

要分别查找每个组的均值和标准差(即,各个组分别是R和D方),我使用下面的R代码得到了它。

library(Sleuth3)
ex0126
View(ex0126)
#Average of each group individually for party (R,D)
meanOfR <- subset(aggregate(ex0126[,4:10],list(ex0126$Party),mean,na.rm=TRUE),Group.1=='R')
meanOfR
meanOfD <- subset(aggregate(ex0126[,Group.1=='D')
meanOfD
#Sample standard deviation for party (R,D)
sdOfR <- subset(aggregate(ex0126[,sd,Group.1=='R')
sdOfR
sdOfD <- subset(aggregate(ex0126[,Group.1=='D')
sdOfD

但是如何找到上述 R和D缔约方的样本标准偏差的合并标准偏差

解决方法

这取决于您想要的汇总估算值。使用分组大小不相等的最一般的估计

data(ex0126,package = Sleuth3)
library(dplyr)
#' Calculate pooled variance given a data.frame with columns (var,n) for each group.
#' All other columns are ignored
pooled_var <- function(df){
  var <- if('sd' %in% names(df)) df$sd^2 else df$var
  d <- dim(var)
  if(d[1] != (n <- nrow(df)))
    stop('inconsistent size of variance and n')
  if(length(d) == 2)
    colSums(sweep(var,1,df$n - 1,'*')) / (sum(df$n) - n)
  else 
    sum(var * ( df$n - 1 )) / (sum(df$n) - nrow(df))
}
ex0126 %>% 
  select(4:10,Party) %>%
  group_by(Party) %>% 
  na.omit() %>%
  summarise(var = across(1:6,var),n = n()) %>%
  pooled_var() %>% 
  sqrt()

请注意

  1. select选择我要使用的列
  2. na.omit用于避免在方差计算中包括缺失值
  3. group_by告诉我的管道,Party中的每个组都需要完成所有工作
  4. summarise / summarize用于跨行聚合函数
    1. across用于对多个列执行相同的操作。
    2. across的输出本身就是tibble(类似data.frame的结构),因此df$var成为pooled_var中的小标题
    3. 默认情况下,summarize最后会调用ungroup。接下来的所有呼叫不再在每个“组”中。
  5. pooled_var中,
  6. 假设存在列varn的列,并且只需使用标准公式来计算合并方差。
    1. pooled_var内,我根据df$var是否具有多个维度来处理单个向量和多个列。
  7. 最后调用sqrtpooled_var到合并的标准偏差。
,

使用sample.decomp包中的utilities函数

由于您可以访问基础数据集,因此可以直接在基础合并数据上计算合并标准差。但是,您也可以根据池化矩和组大小计算池化标准差。这是在 utilities packagesample.decomp 函数中实现的。该函数可以从子组矩计算合并样本矩,或者从其他子组矩和合并矩计算缺失的子组矩。它适用于四阶分解——即样本大小、样本均值、样本方差/标准差、样本偏度和样本峰度的分解。


如何使用该函数:我将假设除了计算矩之外,您还可以计算两组的大小,我将其指定为 sizeRsizeG。您可以使用sample.decomp函数从子组样本矩中获取合并样本矩。

#Input the sample statistics for subgroups
N    <- c(sizeR,sizeG)
MEAN <- c(meanOfR,meanOfG)
SD   <- c(sdOfR,sdOfG)

#Compute sample decomposition
library(utilities)
sample.decomp(n = N,sample.mean = MEAN,sample.sd = SD,include.sd = TRUE)

由于您没有给出您的时刻和组大小的值,我无法向您展示您作为输出获得的合并标准差。但是,上面的代码将为您提供一个表格,显示输入组和合并样本的时刻。这将包括合并的标准偏差。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。