Ошибка в model.frame.default: переменные длины различаются при запуске ANOVA - PullRequest
0 голосов
/ 05 июля 2019

Во время выполнения анализа 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)

Кластер столбцов является факторной переменной.Моя цель - запустить ANOVA для каждой переменной (например, GDPpercapita) для всех пар кластеров.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 05 июля 2019

Проблема в том, что вы пытаетесь использовать ANOVA как t-критерий.


aov(ready$GDPpercapita[ready$cluster==1] возвращает вектор значений GDPpercapita .

aov(ready$GDPpercapita[ready$cluster==2] возвращает другой вектор значений GDPpercapita .

Теперь у вас есть два вектора, каждый из которых содержит значения вашей переменной ответа.При попытке сравнить средние значения двух групп наблюдаемых значений следует использовать тест с 2 выборками (t-критерий очень распространен).ANOVA является излишним, и он действительно предназначен для сравнения средств во многих группах.


Код

t.test(ready$GDPpercapita[ready$cluster==1], ready$GDPpercapita[ready$cluster==2])

будет сравнивать среднее значение GDPpercapita между кластерами 1 и 2.

Поскольку вы пытаетесь сравнить среднее значение GDPpercapita по многим группам, вы можете сделать это для каждого кластера (обычно называемого парным t-тестированием),Однако вам придется использовать коррекцию (например, Бонферрони), которая, как правило, не идеальна.


В качестве альтернативы ANOVA может показаться хорошим началом, если она используется правильно.

Функция aov принимает формулу в качестве первого параметра.Вы строите формулу, используя ~ (думайте об этом операторе как "по") и + (этот оператор похож на "и").

Для сравнения среднего GDPpercapita каждогокластер друг против друга кластер, вы бы назвали:

aov(GDPpercapita ~ cluster, data = ready)

Прочитайте это как "в наборе данных готов , сравните среднее GDPpercapita BY каждое значение переменной cluster".


Вы можете добавить больше сравнений, например так:

aov(GDPpercapita ~ cluster + CurrentHE, data = ready)

Читать это как"в наборе данных готов сравните среднее значение GDPpercapita BY каждое значение переменной cluster AND каждое значение переменной CurrentHE".


Обратите внимание, что вам, возможно, придется выполнить специальное тестирование, поскольку ANOVA скажет вам только, какие включенные переменные ( cluster , CurrentHE и т. д.), по-видимому, существенно влияет на переменную ответа.Это не даст конкретной информации, такой как «кластер 1 связан с более высоким ВВП на 10 * *, чем кластер 2».Я бы порекомендовал прочитать о ANOVA и t-тестировании, а также о том, как их использовать в R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...