如何解决从一系列注视眼动; R计算到第一次注视的时间,第一次注视的持续时间和探视时间
希望大家都过得很好。
我目前正在使用眼睛跟踪数据集。我已经使用R包“ gazepath”处理了注视。这为我提供了x / y平面上特定坐标的注视输出。
我的目标是计算:与每个试验的x-y坐标范围相对应的一系列感兴趣区域的首次注视持续时间,首次注视时间和总访问持续时间。
对于本研究,我有两个主要的兴趣领域-眼睛和嘴巴。 例如,假设眼睛位于x1 – .200至x2 – .300和y1 – .500至y1 – .600 并且脸部的位置从x1-.100到x2-.500和y1 .100到y2 .800。
因此,在下面的示例中,对于试验1,看着脸部,它应该输出如下内容: 首次固定时间= 1;第一固定持续时间= 250;总固定持续时间= 2116.667
我想针对每个试验和每个AOI进行此操作。也将不胜感激,帮助您为一系列主题文件创建循环并保存每个主题的输出。
感谢您的时间和考虑!保重,卡罗琳
df1 <- data.frame(Participant = c('A','A','A' ),Trial = c(1,1,2,2),FixationDuration = c(250,950,250,666.6666667,216.6666667,383.3333333,433.3333333,500,550),StartTimeforFixation= c(1,301,1284,1584,2301,2567,3001,3484,4034,4451),EndTimeforFixation = c(250,1250,1533,2250,2516,2950,3433,3983,4416,5000),mean_x = c(0.464453,0.499141,0.491302,0.496063,0.491435,0.494063,0.498093,0.487845,0.492093,0.497614),mean_y = c(0.638584,0.515769,0.604171,0.685817,0.546331,0.70222,0.528106,0.615643,0.551993,0.661424),POGsdSacAmp = c(4.84E-05,0.000103,6.69E-05,0.000111,0.000118,0.000108,7.15E-05,7.31E-05,6.76E-05,7.10E-05),RMS = c(6.61E-05,0.000128,7.89E-05,8.27E-05,0.000156,0.000151,7.85E-05,6.91E-05,8.86E-05,9.17E-05))
解决方法
使用dplyr
,可以很容易地通过分组来实现。
library(tidyverse)
df1 <- tibble(Participant = c('A','A','A' ),Trial = c(1,1,2,2),FixationDuration = c(250,950,250,666.6666667,216.6666667,383.3333333,433.3333333,500,550),StartTimeforFixation= c(1,301,1284,1584,2301,2567,3001,3484,4034,4451),EndTimeforFixation = c(250,1250,1533,2250,2516,2950,3433,3983,4416,5000),mean_x = c(0.464453,0.499141,0.491302,0.496063,0.491435,0.494063,0.498093,0.487845,0.492093,0.497614),mean_y = c(0.638584,0.515769,0.604171,0.685817,0.546331,0.70222,0.528106,0.615643,0.551993,0.661424),POGsdSacAmp = c(4.84E-05,0.000103,6.69E-05,0.000111,0.000118,0.000108,7.15E-05,7.31E-05,6.76E-05,7.10E-05),RMS = c(6.61E-05,0.000128,7.89E-05,8.27E-05,0.000156,0.000151,7.85E-05,6.91E-05,8.86E-05,9.17E-05))
首先,我们需要计算各个持续时间:
df1 %>%
mutate(fix_time = EndTimeforFixation - StartTimeforFixation)
# A tibble: 10 x 10
# Participant Trial FixationDuration StartTimeforFixat~ EndTimeforFixati~ mean_x mean_y POGsdSacAmp RMS fix_time
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 A 1 250 1 250 0.464 0.639 0.0000484 6.61e-5 249
# 2 A 1 950 301 1250 0.499 0.516 0.000103 1.28e-4 949
# 3 A 1 250 1284 1533 0.491 0.604 0.0000669 7.89e-5 249
# 4 A 1 667. 1584 2250 0.496 0.686 0.000111 8.27e-5 666
...
请注意,当您有250毫秒时,我的第一个会得到249毫秒。
然后您可以定义组,在此参与者和试验应该是相关的组。然后,在每个组中,您可以计算所需的任何统计信息:
df1 %>%
mutate(fix_time = EndTimeforFixation - StartTimeforFixation) %>%
group_by(Participant,Trial) %>%
summarize(tot_duration = sum(fix_time))
# A tibble: 2 x 3
# Groups: Participant [1]
# Participant Trial tot_duration
# <chr> <dbl> <dbl>
#1 A 1 2113
#2 A 2 2460
当然,在summarize
语句中,您还可以计算mean()
,var()
,sd()
或您感兴趣的任何内容。
现在,您应该怎么做才能只计算正确区域中的试验统计信息?您可以在计算之前使用filter
:
df1 %>%
mutate(fix_time = EndTimeforFixation - StartTimeforFixation,AOI_face = (mean_x >= .100 & mean_x <= .500 & mean_y >= .100 & mean_y <= .800),AOI_eyes = (mean_x >= .200 & mean_x <= .300 & mean_y >= .500 & mean_y <= .600)) %>%
filter(AOI_face) %>%
group_by(Participant,Trial) %>%
summarize(tot_duration = sum(fix_time))
在这里,我假设一个试验可以在多个AOI中进行。如果您为每个试验分配一个AOI,则希望创建一个单独的AOI
列,其值分别为“ face”,“ eyes”,...和group_by(Participant,Trial,AOI)
,以计算每个平均值
最后,要将结果保存到磁盘,我建议使用write_csv()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。