我有这个函数来获取IRT包sirt返回的对象和用户可以指定的一组项目的绘图项响应函数:
plotRaschIRF <- function(x,items=NULL,thl=-5,thu=5,thi=.01,D=1.7) {
if (!class(x)=="rasch.mml") stop("Object must be of class rasch.mml")
thetas <- seq(thl,thu,thi)
N <- length(thetas)
n <- length(x$item$b)
tmp <- data.frame(item=rep(1:n,each=N),theta=rep(thetas,times=n),b=rep(x$item$b,each=N))
probs <- exp(D*(tmp[,2]-tmp[,3]))/(1+exp(D*(tmp[,2]-tmp[,3])))
dat <- data.frame(item=rep(1:n,each=N),theta=rep(thetas,times=n),b=rep(x$item$b,each=N),p=probs)
#dat$item <- factor(dat$item,levels=1:n,labels=paste0("Item",1:n))
if (is.null(items)) {
m <- min(10,n)
items <- 1:m
if (10<n) warning("By default, this function will plot only the first 10 items")
}
if (length(items)==1) {
title="Item Response Function"
} else {
title="Item Response Functions"
}
dat2 <- subset(dat,eval(quote(eval(item,dat) %in% items)))
dat2$item <- factor(dat2$item,levels=unique(dat2$item),labels=paste0("Item",unique(dat2$item)))
out <- ggplot(dat2,aes(x=theta,y=p,group=item)) +
geom_line(aes(color=dat2$item),lwd=1) + guides(col=guide_legend(title="Items")) +
theme_bw() + ggtitle(title) + xlab(expression(theta)) +
ylab("Probability") + scale_x_continuous(breaks=seq(thl,thu,1))
print(out)
}
但是在我开始使用ggplot2(我将一列dat2转换为一个因子)或ggplotting本身之前,它似乎陷入了任何一条线 - 不确定哪个。我收到错误消息"Error in eval(expr, envir, enclos) : object 'dat2' not found".
我按照建议this尝试阅读here,但要么这是另一个问题,要么就是我没有得到它。当我逐行逐行时,该功能正常工作。非常感谢任何帮助!
答案 0 :(得分:2)
根据您的评论,错误几乎肯定在geom_line(aes(color=dat2$item))
。摆脱dat2$
它应该可以正常工作(即geom_line(aes(color=item))
)。 aes
中的资料在data
参数(此处为dat2
)中进行评估,并将全局环境作为附件。值得注意的是,这意味着aes
无法使用函数环境中的内容,除非它是data
(dat2
此处)的一部分。由于dat2
中不存在dat2
,并且全局环境中不存在dat2
,因此您会收到该错误。