nTrials должно быть больше …. проблема с совместным дизайном

#r #analysis

#r #анализ

Вопрос:

Я пытаюсь создать список совместных карт, используя R.

Я следил за введением профессора со своим собственным набором данных, но я застрял в этой проблеме, о которой я понятия не имею.

 library(conjoint)
experiment<-expand.grid(
  ServiceRange = c("RA", "Active", "Passive","Basic"),
  IdentProce = c("high", "mid", "low"),
  Fee = c(1000,500,100),
  Firm = c("KorFin","KorComp","KorStrt", "ForComp")
) 
print(experiment)

design=caFactorialDesign(data=experiment, type="orthogonal")
print(design)
  

в строке «дизайн» я продолжаю получать следующее сообщение об ошибке:

 Error in optFederov(~., data, nTrials = i, approximate = FALSE, nRepeats = 50) :    
nTrials must not be greater than the number of rows in data
  

Как мне решить эту проблему?

Ответ №1:

Вы получаете эту ошибку, потому что у вас 144 строки experiment , но nTrials упомянутая в ошибке становится больше 144. Это вызывает ошибку for optFederov() , которая вызывается внутри caFactorialDesign() . Проблема связана с тем, что ваш Fee столбец имеет относительно большие значения.

Я не знаком с тем, как conjoint настроен пакет, но я могу показать вам, как устранить эту ошибку. Вы можете прочитать conjoint документацию для получения дополнительной информации о том, как выбрать подходящие экспериментальные данные.
(Обратите внимание, что данные примера в документации всегда имеют очень низкие числовые значения, обычно значения от 1 до 10. Сравните это с вашим Fee вектором, который имеет значения до 1000.)

Вы можете увидеть исходный код функции, загруженной в ваше пространство имен RStudio, выделив имя функции (например caFactorialDesign ) и нажав Command-Return (на Mac — возможно, что-то подобное на ПК). Вы также можете просто посмотреть исходный код на GitHub.

caFactorialDesign Здесь реализовано. Эта ссылка выделяет строку (26), которая выдает ошибку для вас:

 temp.design<-optFederov(~., data, nTrials=i, approximate=FALSE, nRepeats=50)
  

Напомним сообщение об ошибке:

nTrials не должно быть больше, чем количество строк в данных

Вы передали в experiment качестве data параметра, поэтому nrow(experiment) сообщите нам, каков верхний предел nTrials :

 nrow(experiment) # 144
  

На самом деле мы можем просто представить ошибку для этого набора данных как:

nTrials не должно быть больше 144

Хорошо, итак, как определяется значение для nTrials ? Мы можем видеть nTrials , что на самом деле является аргументом optFederov() , и его значение задается как i — часто признак того, что операция завершается циклом for. И на самом деле, это то, что мы видим:

 for (i in ca.number: profiles.number)
{
   temp.design<-optFederov(~., data, nTrials=i, approximate=FALSE, nRepeats=50)
   ...
}
  

Это говорит нам о том, что optFederov() будет вызываться для каждого значения i в цикле, которое начнется с ca.number и будет увеличиваться до profiles.number (включительно).

Как назначаются эти две переменные? Если мы посмотрим немного выше в caFactorialDesign() определении, ca.number определяется в строках 5-9:

 num <- data.frame(data.matrix(data))
vars.number<-length(num)
levels.number<-0
for (i in 1:length(num)) levels.number<-levels.number max(num[i])
ca.number<-levels.number-vars.number 1
  

Вы можете запускать эти вычисления вне функции — просто помните об этом data == experiment . Так что просто измените эту первую строку на num <- data.frame(data.matrix(experiment)) , а затем запустите этот фрагмент кода. Вы можете это видеть ca.number == 1008 !!

Другими словами, самое первое значение i в цикле for, которое вызывается optFederov() , уже намного больше максимального предела : 1008 >> 144 .

Возможно, вы можете включить эти числовые значения в качестве факторов или строк в свое определение experiment — я не уверен, что это подходящий способ выполнить этот анализ. Но я надеюсь, что ясно, что вы не сможете использовать такие большие значения caFactorialDesign() , если у вас нет гораздо большего количества общих наблюдений в ваших данных.