2016-07-20 76 views
1

我想繪製具有2個獨立變量的因變量的本質上計算的平均時間序列數據。 DV =瞳孔擴張(在多個時間點「T」)響應於執行電機任務(IV_A)並結合3種不同的噪聲信號(IV_B)。如何按因子變量繪製多個列的平均值

我想繪製穿過受試者的平均擴張在每個時間點(意味着每個T列),與單獨的行爲每個條件。對於IV_A(= 1):IV_B(= 1),IV_A(= 1):IV_B(= 2)和IV_A(= 1),x軸將是T1到T5,並且具有單獨的線: 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是言語刺激以呈現噪聲的類型。

很可能更好地「跟蹤」和「N」與「No_Tracking」代替「Y」。

我想:

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 

回答

2

我可能沒有理解你的數據結構,所以請讓我知道這是不是你腦子裏想什麼:

library(reshape2) 
library(ggplot2) 
library(dplyr) 

「融化」數據爲長格式。這將使我們每個SubjectIVTime一個觀察:

# 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%的置信度間隔。在您的樣本數據中,對於IV的每個級別,每個Time只有一個測量值,因此下面的示例圖中不包含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() 

enter image description here

相關問題