0

我想我的问题很简单(即使标题不是......)但我还没有找到任何明确的答案。我想在心理物理学任务中绘制反应时间的直方图。我需要将其中两个绘制在同一个图上:一个用于正确响应,另一个用于错误响应。

我不想绘制绝对计数,而是绘制对应于:

对于正确的回答:count(correct==1) / sum(count(correct==1) + count(correct==0))

对于不正确的回答:count(correct==0) / sum(count(correct==1) + count(correct==0))

现在我有:

ggplot(data, aes(x=RT, color=correct)) 
    + geom_histogram(aes(y = ..count../sum(..count..))) 
    + stat_bin(breaks = seq(5,800,by=10))

但我不确定它是否在做我想要的(总和是否对应于正确和错误响应的总和?)。我对 ..count.. 等感到不舒服,有人对这方面的文档有很好的建议吗?

提前致谢。

编辑:输入数据是:

df <- structure(list(RT = c(359L, 214L, 219L, 206L, 120L, 166L, 156L, 
       181L, 135L, 122L, 110L, 101L, 139L, 215L, 106L, 217L, 162L, 135L, 
       114L, 205L), correct = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
       1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L)), .Names = c("RT", 
       "correct"), class = "data.frame", row.names = c(NA, -20L))

这是我之前使用 base R 制作的图的链接,这正是我最后想要的输出。 https://www.dropbox.com/s/nqn83pkoq7o0stv/RTexample.png 这些是线条(但基于直方图,黄色表示正确==1,蓝色表示正确==0)。我想要的特定功能是两条线的总和为 1。

4

2 回答 2

0

如果我理解正确,position="fill"应该可以满足您的需求:

ggplot(df,aes(x=RT,fill=factor(correct,labels=c("Incorrect","Correct")))) +
 geom_bar(breaks=seq(5,800,by=10),position="fill") +
  scale_y_continuous("",labels=percent) + scale_fill_discrete("")

在此处输入图像描述

一个直方图基于(零级)在底部,另一个在顶部。

于 2013-01-25T15:04:17.490 回答
0

肖拉,

布赖恩汉森是绝对正确的。您真的应该停止尝试将您的转换作为“ggplot”功能的一部分。我知道这很诱人,但“ggplot”的图中转换方法应该更多地用于数据探索,而不是创建预先确定的图表。您可以快速使用“hist”功能获取所需数据、转换数据,然后将其输入“ggplot”以进行实际绘图。手动转换数据的最佳部分是您可以看到所有数据的运行情况,并且您不会遇到问题(如您的问题)猜测答案是否正确。

您需要确切地决定如何安排这两个图,但这都可以使用“ggplot”来完成。以下是外部转换的示例:

第 1 步:获取 [正确]=1 的直方图值。

correct_Hist <- hist(data[correct==1, 1], breaks=seq(5, 800, by=10), plot=FALSE)

第 2 步:获取 [正确]=0 的直方图值。

incorrect_Hist <- hist(data[correct==0, 1], breaks=seq(5, 800, by=10), plot=FALSE)

第 3 步:转换计数。您在问题中的解释有点模棱两可,可以采取几种不同的方式。对于这个答案,我假设您不需要直方图,而是想要一个条形图,显示不正确或正确的响应代表特定范围的 RT 值的百分比。现在我们有了计数,这很简单。

correct_Bar_Values <- correct_Hist$counts / (correct_Hist$counts + incorrect_Hist$counts)
incorrect_Bar_Values <- incorrect_Hist$counts / (correct_Hist$counts + incorrect_Hist$counts)

第 4 步:随心所欲地绘制它。现在您有了想要绘制的原始值,您可以使用各种方法来绘制它。我推荐 'geom_bar' 层,而不是 'geom_hist' 层,因为您已经完成了计算。您还必须指定您希望“ggplot”使用的两个不同的“网格”视口,但如果您需要帮助,请提交第二个问题。这是您可以快速将数据制作成条形图的方法:

# The percentage of answers that were not correct
qplot(incorrect_Hist$mids,y=incorrect_Bar_Values, geom="bar", stat="identity", ylim=c(0,1))

# The percentage of answers that were correct
qplot(correct_Hist$mids,y=correct_Bar_Values, geom="bar", stat="identity", ylim=c(0,1))
于 2013-01-25T15:16:03.613 回答