我正在 mirt 包中处理名为residuals
的此功能。
当您使用df.p = TRUE
作为参数时,此函数默认打印输出。
我尝试了什么:
library(mirt)
data(LSAT7)
LSAT7=expand.table(LSAT7)
x <- mirt(LSAT7, 1, '3PL')
ss=residuals(x, df.p=TRUE)
我的输出为:
Degrees of freedom (lower triangle) and p-values:
Item.1 Item.2 Item.3 Item.4 Item.5
Item.1 NA 0.474 0.346 0.097 0.162
Item.2 1 NA 0.269 0.547 0.192
Item.3 1 1.000 NA 0.871 0.873
Item.4 1 1.000 1.000 NA 0.991
Item.5 1 1.000 1.000 1.000 NA
我想存储此输出,但遗憾的是我无法做到这一点。
有没有人知道如何在不修改主要功能即residuals
P.S。 :在控制台上键入ss
打印:
Item.1 Item.2 Item.3 Item.4 Item.5
Item.1 NA -0.023 -0.030 0.052 0.044
Item.2 -0.512 NA 0.035 -0.019 -0.041
Item.3 -0.889 1.222 NA -0.005 -0.005
Item.4 2.755 -0.362 -0.026 NA 0.000
Item.5 1.952 -1.705 -0.026 0.000 NA
与自动打印的输出不同。
答案 0 :(得分:0)
如果您查看getMethod("residuals", "ExploratoryClass")
,您会看到如果df.p
为TRUE
,则矩阵打印而不是返回。由于您不想修改代码,使用capture.output
可以快速获得输出 - 但如果您愿意妥协/稍微使用代码,您可以编写一个小函数来提取表从mirt
结果中没有太多麻烦。
使用residuals
代码,您可以导出表格和打印结果(不是每个选项都包含在下面)
extractFun <- function(mirtObject)
{
res = residuals(mirtObject)
J <- ncol(mirtObject@Data$data)
df <- (mirtObject@K - 1) %o% (mirtObject@K - 1)
diag(df) <- NA
colnames(df) <- rownames(df) <- colnames(res)
for (i in 1:J) {
for (j in 1:J) {
if (i < j) {
df[i, j] <- pchisq(abs(res[j, i]),
df = df[j, i], lower.tail = FALSE)
}
}
}
df
}
x <- mirt(LSAT7, 1, '3PL')
(e <- extractFun(x))
答案 1 :(得分:0)
如果您查看x
的残差方法的来源,您可以看到如何计算和打印此矩阵。
自由度是:
df <- (object@K - 1) %o% (object@K - 1)
,元素是:
df[i, j] <- pchisq(abs(res[j, i]), df = df[j,
i], lower.tail = FALSE)
所以我们效仿......
dfp <- function(object, res){
df <- (object@K - 1) %o% (object@K - 1)
diag(df)=NA
df[upper.tri(df)] <- t(pchisq(abs(res), df = df, lower.tail = FALSE))[upper.tri(df)]
df
}
看看我们得到了什么:
> dfp(x,ss)
[,1] [,2] [,3] [,4] [,5]
[1,] NA 0.4742744 0.3457484 0.09695082 0.1623715
[2,] 1 NA 0.2689685 0.54739758 0.1916354
[3,] 1 1.0000000 NA 0.87190032 0.8719003
[4,] 1 1.0000000 1.0000000 NA 1.0000000
[5,] 1 1.0000000 1.0000000 1.00000000 NA
由于residuals
对返回值进行舍入,因此存在一些细微差别。哎哟。
> ss10=residuals(x, df.p=TRUE, digits=10)
打印:
Degrees of freedom (lower triangle) and p-values:
Item.1 Item.2 Item.3 Item.4 Item.5
Item.1 NA 0.4744862 0.3456212 0.09694774 0.1623190
Item.2 1 NA 0.2690456 0.54726048 0.1916342
Item.3 1 1.0000000 NA 0.87124548 0.8725782
Item.4 1 1.0000000 1.0000000 NA 0.9906174
Item.5 1 1.0000000 1.0000000 1.00000000 NA
我的函数计算:
> dfp(x,ss10)
[,1] [,2] [,3] [,4] [,5]
[1,] NA 0.4744862 0.3456212 0.09694774 0.1623190
[2,] 1 NA 0.2690456 0.54726048 0.1916342
[3,] 1 1.0000000 NA 0.87124548 0.8725782
[4,] 1 1.0000000 1.0000000 NA 0.9906174
[5,] 1 1.0000000 1.0000000 1.00000000 NA
更好。
答案 2 :(得分:0)
如果我理解正确的问题,这是将输出作为data.frame
返回的一种方式。
read.table(text=capture.output(ss))