r - model.frame.default 中的错误:运行方差分析时可变长度不同
问题描述
在我的数据集的一个子集上运行 ANOVA 分析时,会显示此错误:
Error in model.frame.default(formula = ready$GDPpercapita[ready$cluster == : variable lengths differ (found for 'ready$GDPpercapita[ready$cluster == 3]')
以下是我的代码:
for(a in 1:6){
for(b in a+1:6){
result=paste("GDPpercapita CLusters ",a,"&",b)
print( result)
first<-subset(ready,ready$cluster==a)
second<-subset(ready,ready$cluster==b)
x<-summary(aov(first$GDPpercapita~second$GDPpercapita))
print(x)
}
}
这是我的数据的一瞥:
该错误不是因为循环或因为创建了子集,因为以下代码也返回相同的错误:
x<-summary(aov(ready$GDPpercapita[ready$cluster==1]~ready$GDPpercapita[ready$cluster==2]))
print(x)
列簇是一个因子变量。我的目标是为所有集群对的每个变量(例如 GDPpercapita)运行 ANOVA。
任何帮助将不胜感激。
解决方案
问题是您正在尝试像 t 检验一样使用 ANOVA。
ready$GDPpercapita[ready$cluster==1]
返回GDPpercapita值的向量。
ready$GDPpercapita[ready$cluster==2]
返回不同的GDPpercapita值向量。
您现在有两个向量,每个向量都保存响应变量的值。当试图比较两组观察值的平均值时,应使用 2 样本检验(t 检验非常常见)。ANOVA 是多余的,它实际上是为了比较许多组的平均值。
编码
t.test(ready$GDPpercapita[ready$cluster==1], ready$GDPpercapita[ready$cluster==2])
将比较集群 1 和集群 2 之间的人均 GDP 。
由于您正在尝试比较多个组的平均GDPpercapita,因此您可以为每个集群执行此操作(通常称为成对 t 检验)。但是,您必须使用通常不理想的校正(如 Bonferroni)。
或者,只要使用正确,ANOVA 似乎是一个好的开始。
该aov
函数将公式作为其第一个参数。~
您使用(将此运算符视为“by”)和+
(此运算符类似于“and”)构建公式。
要将每个集群的平均GDPpercapita与其他集群进行比较,您可以调用:
aov(GDPpercapita ~ cluster, data = ready)
将其读作“在准备好的数据集内,通过变量集群的每个值比较平均 GDPpercapita ”。
您可以像这样添加更多比较:
aov(GDPpercapita ~ cluster + CurrentHE, data = ready)
将其读作“在准备好的数据集内,通过变量集群的每个值和变量CurrentHE的每个值来比较平均 GDPpercapita ”。
请注意,您可能必须进行事后测试,因为 ANOVA 只会告诉您哪些包含的变量(cluster、CurrentHE等)似乎对响应变量有显着影响。它不会提供特定信息,例如“集群 1 的人均 GDP比集群 2 更高”。我建议阅读 ANOVA 和 t 检验,以及如何在 R 中使用它们。
推荐阅读
- python - 在字符串之前创建带有“b”前缀的字节时,python使用什么编码?
- c++ - 可变参数模板的类型推导
- javascript - 在对象上动态调用方法名
- sql - 如何连接多个表以获取收入超过经理的员工姓名?
- java - @Sql 用于在 Spring 中填充数据库的测试
- python-3.x - Server.sendmail() 将我的收件人设置为密件抄送
- flutter - 可以使用 flutter_beacon 包在 Flutter 中制作 Social Distancing 应用程序吗?
- dart - 如何在 dart 中通过 CookieManager 使用 Dio 添加默认 cookie
- flutter - 仅着色 TextForm 文本的一部分
- swift - 导航链接中的选择器选择会导致奇怪的行为