nTrials 必须更大....关于联合设计的问题

nTrials must be be greater.... issue on conjoint design

我正在尝试使用 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

我该如何解决这个问题?

您收到此错误是因为 experiment 中有 144 行,但错误中提到的 nTrials 大于 144。这会导致 optFederov() 出现错误,在 caFactorialDesign() 中调用。问题源于您的 Fee 列具有相对较大的值。

我不熟悉 conjoint 包的设置方式,但我可以向您展示如何解决此错误。您可以阅读 conjoint documentation 以了解有关如何 select 适当实验数据的更多信息。
(请注意,文档中的示例数据始终具有非常低的数值,通常值在 1-10 之间。将其与您的 Fee 向量进行比较,其值最大为 1000。)

您可以通过突出显示函数名称(例如 caFactorialDesign)并点击 Command-Return(在 Mac - 可能是什么来查看加载到 RStudio 命名空间的函数的源代码PC 上类似)。您也可以只查看 GitHub.

上的源代码

实现了caFactorialDesignhere。 link 突出显示为您抛出错误的第 (26) 行:

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

回顾错误信息:

nTrials must not be greater than the number of rows in data

您已将 experiment 作为 data 参数传入,因此 nrow(experiment) 将告诉我们 nTrials 的上限是多少:

nrow(experiment) # 144

我们实际上可以将此数据集的错误视为:

nTrials must not be greater than 144

好的,那么nTrials的值是如何确定的呢?我们可以看到 nTrials 实际上是 optFederov() 的一个参数,它的值被设置为 i - 通常表明有一个 for-loop 包装了一个操作。事实上,这就是我们所看到的:

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!!

换句话说,调用 optFederov() 的 for-loop 中 i 的第一个值已经远远大于最大限制:1008 >> 144.

您可以在 experiment 的定义中将这些数值作为因子或字符串包括在内 - 我不确定这是否是进行此分析的合适方法。但我希望很清楚,您将无法在 caFactorialDesign() 中使用如此大的值,除非您的数据中有更多的总观测值。