首页 > 解决方案 > 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。

任何帮助将不胜感激。

标签: ranova

解决方案


问题是您正在尝试像 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 只会告诉您哪些包含的变量(clusterCurrentHE等)似乎对响应变量有显着影响。它不会提供特定信息,例如“集群 1 的人均 GDP比集群 2 更高”。我建议阅读 ANOVA 和 t 检验,以及如何在 R 中使用它们。


推荐阅读