n试验必须更大......联合设计问题

问题描述 投票:0回答:2

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

我该如何解决这个问题?

r analysis
2个回答
1
投票

您收到此错误是因为

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

我不熟悉

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

您可以通过突出显示函数名称(例如

caFactorialDesign
)并点击 Command-Return(在 Mac 上 - 可能在 PC 上类似)来查看加载到 RStudio 命名空间中的函数的源代码。您也可以直接查看 GitHub 上的源代码。

caFactorialDesign
here实现。该链接突出显示了为您引发错误的行 (26):

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

回想一下错误信息:

nTrials 不得大于数据中的行数

您已传入

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

nrow(experiment) # 144

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

n试验次数不得大于 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()
中使用如此大的值,除非您的数据中有大量的总观测值。


0
投票

将您的费用变量转换为字符串以避免该错误: '''费用 = c("1000","500","100")

© www.soinside.com 2019 - 2024. All rights reserved.