【问题标题】:Mean and Confidence interval for Groups of Variable in RR中变量组的均值和置信区间
【发布时间】:2018-02-05 16:44:28
【问题描述】:

我是 R 新手,我正在尝试做一些我认为应该非常简单但在线代码没有帮助的事情。

data <- structure(list(Group = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3), 
Time = c(1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2), mean_PctPasses = c(68.26, 
60.2666666666667, 62.05, 66.3833333333333, 59.7333333333333, 
69.7714285714286, 57.1888888888889, 63.8875, 61.1833333333333, 
59.775, 66.2666666666667, 62.12), mean_AvgPassing = c(7.3, 
7.01111111111111, 6.35, 9.26666666666667, 6.68333333333333, 
8.78571428571429, 5.87777777777778, 8.3125, 7.63333333333333, 
7.7, 8.38333333333334, 6.89), mean_AvgRush = c(0.3, -0.3, 
3.5, 0.75, 5, 1.47142857142857, 5.71111111111111, 3.3875, 
2.74, 6.6, 4.5, 5), mean_Int = c(0.2, 0.777777777777778, 
0.25, 0.5, 1.5, 0.857142857142857, 0.777777777777778, 0.75, 
0.666666666666667, 0.75, 0.833333333333333, 1.1), mean_Rate = c(99.3, 
88.5222222222222, 80.5, 106.45, 77.2333333333333, 102.885714285714, 
76.8888888888889, 100.075, 92.1166666666667, 78.55, 98.05, 
79.56)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-12L), .Names = c("Group", "Time", "mean_PctPasses", "mean_AvgPassing", 
"mean_AvgRush", "mean_Int", "mean_Rate"))

使用此数据集,我有 2 个分组变量“组”和“时间”。我想以表格格式获取变量 mean_PctPasses 到 mean_Rate 的每个组合的均值和置信区间,并将结果保存在表格中。我需要将它放在一个表格中,因为我稍后会在情节中提及它。在 SPSS 中执行此操作非常简单。

我尝试了几个功能,以下是我遇到的每个问题

library(rcompanion)    
ci.mean(mean_PctPasses~Group+Time, data = data)

library(DescTools)
MeanCI(data$mean_PctPasses)

library(Rmisc)
CI(data$mean_PctPasses,    ci=0.95)

MeanCI、ci.mean 和 CI 不允许列出多个变量并保存为表格(仅显示在控制台中)

by(data = data, data$Group, FUN = stat.desc)

这将不允许我根据组和时间对数据进行分组。下面是我希望在 R 中构建的图表示例(在 SPSS 中显示)。

SPSS Example

在这方面的任何帮助/协助都会很棒。如果需要任何澄清,请告诉我,我一定会编辑我的初始帖子。

更新

在获得了一些很好的答案(感谢 Rob 和 Steven)之后,我觉得我需要稍微澄清一下我的问题。 我想为所有统计数据(mean_PctPasses 到 mean_Rate)获取每个组(不是单独)的统计数据。下面显示了使用 Rmisc 生成我想要的一个变量的统计信息的函数示例 库(Rmisc) group.UCL(mean_PctPasses~Group+Time , 数据, FUN=CI) 这为我提供了仅针对 mean_PctPasses 的以下输出 Output Using Rmisc

但我想要的是以下内容(我已经 photoshop 过) Image of Desired Ouput

当然,这可以以其他方向显示(以下示例使用 SPSS 和 SEM)。 Alternative Orientation example in SPSS

【问题讨论】:

  • 根据您的编辑,您可以不使用dplyr 中的summarise() 函数来执行此操作吗?似乎我在下面的第一个代码块中输入的内容正是您要问的。或者,您是否正在寻找一种功能来为您完成这一切?
  • 仅作记录:我是rcompanion 包的作者。这个包中没有ci.mean 函数。但是,有一个groupwiseMean 函数可以为组生成置信区间,并提供几种不同的方法。例如。 groupwiseMean(PctPasses ~ Group + Time, data = data)

标签: r statistics hmisc desctools


【解决方案1】:

使用R 执行此操作也很容易。

另一种方式,使用来自RmiscCI()

library(dplyr)
library(Rmisc)
library(ggplot2)

data <- 
  data %>%
  group_by(Group, Time) %>%
  dplyr::summarise(avg_PctPasses = mean(mean_PctPasses), 
            uci_PctPasses = CI(mean_PctPasses)[1], 
            lci_PctPasses = CI(mean_PctPasses)[3]) %>%
  mutate(Time = Time %>% as.factor())

诚然,在致电CI() 之后,我并不是“神奇数字”的忠实粉丝。

绘制数据同样简单。

data %>%
  ggplot(aes(x = Group, y = avg_PctPasses, fill = Time)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_errorbar(aes(ymin = lci_PctPasses, ymax = uci_PctPasses), position = "dodge")

【讨论】:

  • 您不必使用“幻数”。你可以做例如CI(mean_PctPasses)['lower']
  • @RobJensen Der。谢谢。我要把它们留给后代。
  • 嘿@Steven 感谢您的回复。两种方法都很好,谢谢你的回复。这种格式的问题是需要为“数据”中的每个变量重复它​​。您是否知道可以在一个表中输出均值和 UCI/LCI 的方法?回到实验室后,我将在 SPSS 中上传此图像。
【解决方案2】:

假设您只需要通常的非合并 t 置信区间您可以做的每个组

require(dplyr)
alpha <- 0.05

data %>% 
    group_by(Group, Time) %>% 
    summarize(mean = mean(mean_PctPasses),
              lower = mean(mean_PctPasses) - qt(1- alpha/2, (n() - 1))*sd(mean_PctPasses)/sqrt(n()),
              upper = mean(mean_PctPasses) + qt(1- alpha/2, (n() - 1))*sd(mean_PctPasses)/sqrt(n()))

【讨论】:

    【解决方案3】:

    您可能有兴趣使用基本 R 图形重现 SPSS 样式。

    library(DescTools)
    
    z <- with(data, 
              aggregate(mean_PctPasses, list(Time, Group), MeanCI))
    z <- xtabs(x ~ Group.1 + Group.2, z)
    
    par(mar=c(5.1,4.1,4.1,8.1))
    b <- barplot(z[,,1], beside=TRUE, ylim=c(0, 140), 
                 col=c("royalblue3","limegreen"), las=1, 
                 xlab="Group", ylab="Mean mean_PctPasses",
                 panel.first=Bg(col="grey85", border="black"))
     
    ErrBars(from=z[,,2], to=z[,,3], pos=b)
    legend(x="topright", legend=c("1","2"), title="Time", bty="n", 
           fill=c("royalblue3","limegreen"), inset=c(-.2, 0), xpd=TRUE)
    

    尽管如此,您应该考虑使用点图来显示您的数据。

    col <- c("royalblue3","limegreen")
    PlotDot(z[,,1], args.errbars = list(from=z[,,2], to=z[,,3], mid=z[,,1]), 
            cex.pch=1.5, pch=22, bg=col, 
            lblcolor = col, lcolor = NA, 
            panel.first=abline(v=seq(0,150,10), col="grey", lty="dotted"))
    

    【讨论】:

      【解决方案4】:

      更新 tidyr 1.0.0

      作为之前给出的summarise 解决方案的优雅替代方案,很高兴知道新的tidyr 1.0.0 包含一个经常被忽视的功能:unnest_wider。 有了它,您可以将代码简化为以下内容:

      data.to.plot <- data %>% 
        nest(data = -"Group") %>%
        mutate(ci = map(data, ~ MeanCI(.x$mean_PctPasses))) %>% 
        unnest_wider(ci)
      

      给了

      # A tibble: 3 x 5
        Group data              mean lwr.ci upr.ci
        <dbl> <list>           <dbl>  <dbl>  <dbl>
      1     1 <tibble [4 × 6]>  64.2   58.3   70.1
      2     2 <tibble [4 × 6]>  62.6   53.9   71.4
      3     3 <tibble [4 × 6]>  62.3   57.9   66.8
      

      你可以很容易地绘制这个

        ggplot(aes(x = Group, y = mean)) +
        geom_bar(aes (fill = Group), stat = "identity") +
        geom_errorbar(
          aes(
            ymin = lwr.ci, ymax = upr.ci,
            width = 0.5
          ),
          size = 0.5 # line thickness
        ) + 
        coord_flip() +
        scale_fill_brewer(palette = "Set2") +
        theme_minimal() 
      

      给你

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-05
        • 1970-01-01
        相关资源
        最近更新 更多