在我的数据集的子集上运行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。
任何帮助将不胜感激。
答案 0 :(得分:0)
问题是您正在尝试像t检验一样使用方差分析。
aov(ready$GDPpercapita[ready$cluster==1]
返回一个 GDPpercapita 值的向量。
aov(ready$GDPpercapita[ready$cluster==2]
返回一个不同的 GDPpercapita 值向量。
您现在有了两个向量,每个向量都包含响应变量的值。当试图比较两组观测值的平均值时,应使用2样本检验(t检验很常见)。方差分析太夸张了,它的意思是比较多个组中的均值。
代码
t.test(ready$GDPpercapita[ready$cluster==1], ready$GDPpercapita[ready$cluster==2])
将比较第1组和第2组之间的平均人均GDP 。
由于您要比较多个组的均值人均GDP ,因此可以对每个聚类进行此操作(通常称为成对t检验)。但是,您必须使用通常不理想的校正方法(例如Bonferroni)。
或者,只要使用正确,方差分析似乎是一个好的开始。
aov
函数将公式作为其第一个参数。您可以使用~
(将该运算符认为是“ by”)和+
(该运算符就像“ and”)来构建公式。
要比较每个群集的平均值人均GDP 与另一个群集,您可以调用:
aov(GDPpercapita ~ cluster, data = ready)
将其读为“在数据集就绪中,比较变量 cluster 的每个值的平均GDP人均 BY ”。
您可以添加更多这样的比较:
aov(GDPpercapita ~ cluster + CurrentHE, data = ready)
将其读为“在数据集就绪中,比较平均人均GDP BY 变量 cluster AND 变量 CurrentHE ”的每个值。
请注意,您可能必须进行事后测试,因为ANOVA仅会告诉您其中包含的变量( cluster , CurrentHE 等)对响应变量。它不会提供诸如“集群1的人均GDP高于集群2的人均GDP”的特定信息。我建议您阅读ANOVA和t检验,以及如何在R中使用它们。