我正在使用eRm软件包来估计Rasch模型。 RM()函数返回一个Rasch模型,我可以使用summary()函数进行汇总。但是,当我尝试存储结果时,R会创建一个空对象。
library(eRm)
my_data <- matrix(sample(0:1, 100, replace = TRUE), nrow = 10)
my_model <- RM(X = my_data)
summary(my_model)
my_summary <- summary(my_model)
为什么此操作在这种情况下不起作用,但在存储线性模型的摘要时有效?是否有另一种方法来存储eRm模型的摘要?
答案 0 :(得分:3)
正如@Imo推测的那样,看起来summary.eRm
只是打印到控制台,而不是返回一个对象。您可以通过运行summary.eRm
来检查getAnywhere(summary.eRm)
的代码。 summary
是&#34;泛型&#34;功能,意味着它的作用取决于什么&#34;方法&#34;调用函数时调用。
对于lm
模型对象,当您键入summary(my_model)
时,将调度summary.lm
函数。但是,当您键入summary(my_model)
并且my_model
是eRm
对象时,会调度summary.eRm
方法。 summary.lm
返回一个对象,但summary.eRm
只是打印到控制台。运行methods(summary)
以查看为不同类型的对象分派的各种汇总函数。
解决方法是使用模型对象本身创建自己的摘要对象(或创建此类对象的函数)。您可以使用str(my_model)
检查模型对象的组件。您还可以查看summary.eRm
的代码,以查看它打印到控制台的每个组件的位置。
这是一个简单的示例,从summary.eRm
提升代码以创建汇总函数:
RMsmry = function(obj) {
cols = c("Estimate", "Std. Error", "lower CI", "upper CI")
# Create difficulty summary
ci = confint(obj, "eta")
tbl1 = as.data.frame(cbind(round(obj$etapar, 3),
round(obj$se.eta, 3), round(ci, 3)))
names(tbl1) = cols
# Create easiness summary
ci <- confint(obj, "beta")
tbl2 = as.data.frame(cbind(round(obj$betapar, 3),
round(obj$se.beta, 3), round(ci, 3)))
names(tbl2) = cols
return(list(Difficulty=tbl1, Easiness=tbl2))
}
my_summary = RMsmry(my_model)
my_summary
$Difficulty Estimate Std. Error lower CI upper CI I2 -1.191 0.658 -2.480 0.098 I3 -1.191 0.658 -2.480 0.098 I4 0.078 0.627 -1.150 1.306 I5 -0.750 0.623 -1.971 0.471 I6 0.078 0.627 -1.150 1.306 I7 1.079 0.748 -0.386 2.544 I8 -0.339 0.614 -1.543 0.865 I9 0.078 0.627 -1.150 1.306 I10 1.079 0.748 -0.386 2.544 $Easiness Estimate Std. Error lower CI upper CI beta I1 -1.079 0.748 -2.544 0.386 beta I2 1.191 0.658 -0.098 2.480 beta I3 1.191 0.658 -0.098 2.480 beta I4 -0.078 0.627 -1.306 1.150 beta I5 0.750 0.623 -0.471 1.971 beta I6 -0.078 0.627 -1.306 1.150 beta I7 -1.079 0.748 -2.544 0.386 beta I8 0.339 0.614 -0.865 1.543 beta I9 -0.078 0.627 -1.306 1.150 beta I10 -1.079 0.748 -2.544 0.386