r - 从已经汇总的数据中生成方差分析
问题描述
我有一个看起来像这样的表:
我正在尝试在上表中运行 aov(),但我只能创建部分输出。我不确定如何在计算中包含标准偏差。
现在我正在连接并重复每个组,如下所示:
groups <- c(rep('LHS', 121), rep('HS', 546), rep('Jr', 97), rep('Bachelors', 253), rep('Graduate', 155))
然后对手段做同样的事情(因为我无权访问原始数据表):
means <- c(rep(38.67, 121), rep(39.6, 546), rep(41.39, 97), rep(42.55, 253), rep(40.85, 155))
此时我可以创建一个数据名,然后在其上运行 aov:
df <- data.frame(groups, means)
groups.aov <- aov(means ~ groups, data = df)
不幸的是summary(groups.aov)
,只给了我一个部分结果。
Df Sum Sq Mean Sq F value Pr(>F)
groups 4 2004 501 4.247e+27 <2e-16 ***
Residuals 1167 0 0
我可以走的任何其他方式,我可以在哪里考虑 SD?
解决方案
我们模拟一些数据,以便我们知道计算是正确的:
set.seed(100)
df = data.frame(
groups=rep(letters[1:4],times=seq(20,35,by=5)),
value=rnorm(110,rep(1:4,times=seq(20,35,by=5)),1))
我们会返回类似于您在上面看到的表格的内容:
library(dplyr)
res <- df %>% group_by(groups) %>% summarize_all(c(mean=mean,sd=sd,n=length))
total <- data.frame(groups="total",mean=mean(df$value),sd=sd(df$value),n=nrow(df))
rbind(res,total)
# A tibble: 5 x 4
groups mean sd n
<fct> <dbl> <dbl> <int>
1 a 0.937 1.14 20
2 b 1.91 0.851 25
3 c 3.01 0.780 30
4 d 4.01 0.741 35
5 total 2.70 1.42 110
我们总是使用方差分析中的平方和。所以从 sd 回到平方和,你通常乘以 n-1,然后你可以从那里得到 F 值。详细计算:
# number of groups
ngroups=nrow(res)# number of groups
# total sum of squares
SST = (total$sd^2)*(total$n-1)
#error within groups
SSE = sum((res$sd^2)*(res$n-1))
aovtable = data.frame(
Df = c(ngroups-1,total$n-ngroups-1),
SumSq = c(SST-SSE,SSE)
)
aovtable$MeanSq = aovtable$SumSq / aovtable$Df
aovtable$F = c(aovtable$MeanSq[1]/aovtable$MeanSq[2],NA)
aovtable$p = c(pf(aovtable$F[1],aovtable$Df[1],aovtable$Df[2],lower.tail=FALSE),NA)
我们可以比较两个结果:
aovtable
Df SumSq MeanSq F p
1 3 140.55970 46.8532330 62.62887 2.705082e-23
2 105 78.55147 0.7481092 NA NA
summary(aov(value~groups,data=df))
Df Sum Sq Mean Sq F value Pr(>F)
groups 3 140.56 46.85 63.23 <2e-16 ***
Residuals 106 78.55 0.74
推荐阅读
- xml - Powershell 数组“-contains = true”...但获取索引
- c++ - 乘积为偶数的子数组的数量?
- c# - 从 C# 执行的 Powershell 以管理 ActiveDirectory 组
- matlab - Matlab:虽然操作较少,但执行速度较慢
- lua - 如何遍历集合中的结果?
- java - Java SSL Socket 问题:ServerSocket 不接收数据,握手失败
- php - HTML AJAX 不执行 PHP
- reactjs - 如何隐藏按钮,仅当 React 的输入标签中有值时
- sql - 将 PagingAndSortingRepository.findAll(Pageable pageable) 与未排序的可分页一起使用是否可靠?
- php - 如何将 php 文件中的 Json 数据解码为另一个 php 文件?