首页 > 解决方案 > 在 R 中将数值组合为数据框以运行 EstCRM

问题描述

我正在进行一些研究并使用 R Studio(版本 3.6.1)平台来分析收集的数据。数据包含从 0 到 100 的连续项目响应。由于数据的性质是连续响应,我必须在 R 中使用 CRM 来执行项目响应理论 (IRT) 分析。所以我决定使用由 Cengiz Zpopluoglu 创建的 EstCRM 包(1.4 版)。

下面是我使用的数据示例。在这个例子中,数据集由我使用的 3 个变量或项目组成,它被命名为 PA1 到 PA3。另外,我已经设置了 5 名参与者。实际数据集由 100 多个项目和 100 多个参与者组成。

> str(Data_ManDown) Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   5 obs. of  3 variables:
$ PA1: num  100 75 20 49 90
$ PA2: num  100 75 80 100 80
$ PA3: num  0 30 40 100 80

我命名为“Data_ManDown”的数据将在这个 EstCRM 包中运行,特别是EstCRMitem.

CRM <- EstCRMitem(Data_ManDown[,1:3], 
                  max.item=c(100,100,100), 
                  min.item=c(0,0,0),
                  max.EMCycle=500, 
                  converge=.01,
                  type="Wang&Zeng",
                  BFGS=TRUE)

CRM$param

我遇到的问题是在运行EstCRMitem命令时开始的。控制台显示此通知。

The column vectors are not numeric. Please check your data

当我检查数据时,似乎我从excel上传的数据被认为是一个列表。

> class(Data_ManDown)
[1] "tbl_df"     "tbl"        "data.frame"
> typeof(Data_ManDown)
[1] "list"
> is.numeric(Data_ManDown)
[1] FALSE

然后我决定numeric通过使用强制我的数据as.numeric并将其放回数据框中,以便它可以在EstCRMitem命令中运行。我发现,数据不是必须的numeric,而是data frame

> iPA1 <- as.numeric(Data_ManDown[[1]])
> iPA2 <- as.numeric(Data_ManDown[[2]])
> iPA3 <- as.numeric(Data_ManDown[[3]])
> 
> is.numeric(iPA1)
[1] TRUE
> is.numeric(iPA2)
[1] TRUE
> is.numeric(iPA3)
[1] TRUE
> ManDown_Num <- as.data.frame(cbind(PA1 = iPA1, PA2 = iPA2, PA3 = iPA3))
> 
> is.numeric(ManDown_Num)
[1] FALSE
> class(ManDown_Num)
[1] "data.frame"
> typeof(ManDown_Num)
[1] "list"

不幸的是,list当我将数据组合为一个包含 3 个所述变量的数据框时,数据又回来了。所以运行EstCRMitem 失败。或者,我也尝试了其他一些方法,例如使用或unlist作为单独的. 它有效但相当无效,因为我必须对每个变量一一分析。考虑到获取的数据量很大,这种方法最好是最后的手段。iPA1iPA3data.frame

总而言之,主要问题是,是否存在(或可能)另一种方法,可以将这些类型的数据变成data.frame由许多元素(参与者的许多行和项目的许多列)组成的,并且也被估值numeric为同时?为了在 EstCRMitem 命令中进行分析。

在旁注中,我还在其他可能相似且可能有帮助的问题中寻找参考资料,例如:

虽然我发现在这种情况下可能有点不同,所以还没有明显的解决方案。还要感谢您花时间研究这个问题并提供帮助。

标签: rlistdataframenumeric

解决方案


推荐阅读