我试图绘制具有2个独立变量的因变量的基本计算的平均时间序列数据。 DV =瞳孔扩张(在多个时间点“T”)响应于执行电动机任务(IV_A)并结合3个不同的噪声信号(IV_B)。
我想绘制每个时间点受试者的平均扩张(每个T列的平均值),每个条件都有单独的行。
因此,x轴将为T1至T5,并且具有用于IV_A(= 1)的单独线:IV_B(= 1),IV_A(= 1):IV_B(= 2)和IV_A(= 1):IV_B (= 3)
根据外观,我可能希望在单独的图上使用IV_A(= 2)行。但是,所有在一个图表中都可以进行简单的视觉比较。
我想知道我是否需要融化数据,使其非常长(大约有110 T列),或者如果没有重组数据框就可以完成我想要的工作。
数据看起来像这样:
Subject IV_A IV_B T1 T2 T3 T4 T5
1 1 1 0.2 0.3 0.5 0.6 0.3
1 1 2 0.3 0.2 0.3 0.4 0.4
1 1 3 0.2 0.4 0.5 0.2 0.3
1 2 1 0.3 0.2 0.3 0.4 0.4
1 2 2 0.2 0.3 0.5 0.6 0.3
1 2 3 0.2 0.4 0.5 0.2 0.3
2 1 1 0.2 0.3 0.5 0.6 0.3
2 1 2 0.3 0.2 0.3 0.4 0.4
2 1 3 0.2 0.4 0.5 0.2 0.3
2 2 1 0.3 0.2 0.3 0.4 0.4
2 2 2 0.2 0.3 0.5 0.6 0.3
2 2 3 0.2 0.4 0.5 0.2 0.3
3 1 1 0.2 0.3 0.5 0.6 0.3
3 1 2 0.3 0.2 0.3 0.4 0.4
3 1 3 0.2 0.4 0.5 0.2 0.3
3 2 1 0.3 0.2 0.3 0.4 0.4
3 2 2 0.2 0.3 0.5 0.6 0.3
3 2 3 0.2 0.4 0.5 0.2 0.3
编辑:
不幸的是,我不能将@ eipi10的代码改编为我的实际数据框,如下所示:
Subject Trk_Y.N NsCond X.3 X.2 X.1 X0 X1 X2 X3
1 N Pink 0.3 0.4 0.6 0.4 0.8 0.6 0.6
1 N Babble 0.3 0.4 0.6 0.4 0.8 0.6 0.6
1 N Loss 0.3 0.4 0.6 0.4 0.8 0.6 0.6
1 Y Pink 0.3 0.4 0.6 0.4 0.8 0.6 0.6
1 Y Babble 0.3 0.4 0.6 0.4 0.8 0.6 0.6
1 Y Loss 0.3 0.4 0.6 0.4 0.8 0.6 0.6
Trk_Y.N表示具有或不具有辅助电机跟踪任务的块(“是”或“否”)。 NsCond是语音刺激所呈现的噪声类型。
将“Y”替换为“跟踪”,将“N”替换为“No_Tracking”可能更好。
我试过了:
test_data[test_data$Trk_Y.N == "Y",]$Trk_Y.N = "Tracking"
但得到了一个错误:
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = c("Tracking", "Tracking", :
invalid factor level, NA generated
答案 0 :(得分:2)
我可能没有理解您的数据结构,所以如果这不是您的想法,请告诉我:
library(reshape2)
library(ggplot2)
library(dplyr)
“融化”数据到长格式。这将为每个Subject
,IV
和Time
提供一个观察点:
# Convert the two `IV` columns into a single column
df.m = df %>% mutate(IV = paste0("A",IV_A,":","B",IV_B)) %>% select(-IV_A,-IV_B)
# Melt to long format
df.m = melt(df.m, id.var=c("Subject","IV"), variable.name="Time", value.name="Pupil_Dilation")
head(df.m)
Subject IV Time Pupil_Dilation 1 1 A1:B1 T1 0.2 2 1 A1:B2 T1 0.3 3 1 A1:B3 T1 0.2 4 1 A2:B1 T1 0.3 5 1 A2:B2 T1 0.2 6 1 A2:B3 T1 0.2
现在,我们可以绘制一条线,为每个Pupil_Dilation
级别的每个Time
点提供IV
的平均值,加上95%的置信区间。在您的示例数据中,每个Time
级别的每个IV
只有一个度量值,因此下面的示例图表中不包含95%的置信区间。但是,如果您在实际数据中有多个度量值,则可以使用下面的代码来包含置信区间:
pd=position_dodge(0.5)
ggplot(df.m, aes(Time, Pupil_Dilation, colour=IV, group=IV)) +
stat_summary(fun.data=mean_cl_boot, geom="errorbar", width=0.1, position=pd) +
stat_summary(fun.y=mean, geom="line", position=pd) +
stat_summary(fun.y=mean, geom="point", position=pd) +
scale_y_continuous(limits=c(0, max(df.m$Pupil_Dilation))) +
theme_bw()