model.frame.default中的错误:运行ANOVA时变量长度不同

时间:2019-07-05 02:55:24

标签: r anova

在我的数据集的子集上运行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)
  }
}

以下是我的数据:

enter image description here

该错误不是由于循环或创建子集引起的,因为以下代码也返回相同的错误:

x<-summary(aov(ready$GDPpercapita[ready$cluster==1]~ready$GDPpercapita[ready$cluster==2]))
print(x)

列簇是一个因子变量。 我的目标是对所有成对集群的每个变量(例如GDPpercapita)进行ANOVA。

任何帮助将不胜感激。

1 个答案:

答案 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中使用它们。