У меня есть набор данных, в котором записан размер зрачка в разных условиях.Как и ожидалось, в данных присутствуют артефакты моргания (представленные экстремальным падением значения размера зрачка во время начала мигания и «-1», когда глаз полностью закрыт, после чего снова постепенно увеличивается размер зрачка).
Насколько я понимаю, линейная интерполяция артефактов мерцания, основанная на значениях до и после начала мигания, является приемлемым способом сглаживания миганий в данных о размере зрачка.
Пример данных:
df<-structure(list(Pupil_Avg = c(8.984, 8.984, 8.988001, 8.988001,
8.978001, 8.978001, 8.9780005, 8.9780005, 8.9780005, 8.9780005,
8.9780005, 8.9800005, 8.981, 8.9810005, 8.979, 8.979, 8.979,
8.979, 8.979, 8.979, 8.979, 8.979, 8.979, 8.979, 8.9750005, 8.964,
8.964001, 8.9660005, 8.9650005, 8.964001, 8.9610005, 8.9620005,
8.9630005, 8.9630005, 8.963001, 8.963001, 8.96, 8.96, 8.9600005,
8.962, 8.962, 8.969001, 8.9730005, 8.9670005, 8.9610005, 8.9610005,
8.9610005, 8.9610005, 8.9610005, 8.9520005, 8.949001, 8.9450005,
8.9450005, 8.9400005, 8.933001, 8.938001, 8.9510005, 8.956001,
8.956001, 8.956001, 8.956001, 8.956001, 8.943001, 8.9280005,
8.9280005, 8.9280005, 8.9280005, 8.9280005, 8.9350005, 8.9470005,
8.95, 8.9530005, 8.957001, 8.9480005, 8.946, 8.944, 8.944, 8.9460005,
8.9460005, 8.9480005, 8.9440005, 8.941, 8.938, 8.9280005, 8.9280005,
8.9280005, 8.9280005, 8.9280005, 8.9280005, 8.929, 8.929, 8.9280005,
8.9280005, 8.9210005, 8.918, 8.919, 8.92, 8.92, 8.92, 8.9170005,
8.9100005, 8.9100005, 8.92, 8.9220005, 8.9220005, 8.9100005,
8.9100005, 8.912, 8.912, 8.912, 8.912, 8.912, 8.9340005, 8.9610005,
8.958001, 8.985, 8.978, 8.9880005, 8.9880005, 9.014, 9.014, 9.014,
9.014, 9.014, 8.9740005, 8.9520005, 8.789, 8.6460005, 8.471001,
8.326, 8.129001, 7.862, 7.862, 7.862, 7.862, 7.862, 7.862, 7.174,
6.6910005, 6.518, 2.461, 2.182, 1.942, 1.942, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1.487, -1,
-1, -1, -1, 2.202, 2.202, 2.281, 2.344, 6.265, 6.378, 6.4910005,
6.8980005, 6.925, 7.04, 7.591, 7.7900005, 7.8470005, 7.978001,
7.978001, 7.978001, 7.978001, 7.978001, 8.159, 8.1300005, 8.154,
8.227, 8.281, 8.3160005, 8.353, 8.4430005, 8.4970005, 8.4970005,
8.4970005, 8.4970005, 8.5150005, 8.6390005, 8.9930005, 9.0110005,
9.0330005, 9.035, 9.0360005), BLINK_IDENTIFICATION = c(NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Blink Onset", NA, NA,
NA, "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
"Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed",
NA, "Eye Closed", "Eye Closed", "Eye Closed", "Eye Closed", "Blink Offset",
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-651L))
Как видно из столбца BLINK_IDENTIFICATION
, были определены начало (строка 141) и смещение (строка 615) мигания.Когда глаз закрыт (-1 в столбце Pupil_Avg
) также был идентифицирован между этими метками.
Моя главная цель состоит в том, чтобы линейно интерполировать данные от "начала мигания" до x числа наблюдений после "смещение "на основе значений до и после мигания начинается и заканчивается.
Может кто-нибудь предложить способ сделать это?По-видимому, в R существуют различные интерполяционные функции (например, ок ()).Я просто не уверен на 100%, как их реализовать.В идеале я бы хотел по возможности избегать использования for loop
, поскольку мой полный набор данных имеет длину в миллионы строк, но я буду работать с циклом for, если другого пути нет.
РЕДАКТИРОВАТЬ: ВотПример функции, работающей с указанным выше набором данных для интерполяции мерцания:
install.packages("zoo")
library('zoo')
library(dplyr)
# replace every '-1' value with 'NA'
df$Pupil_Avg[df$Pupil_Avg == -1] <- NA
df<-df%>%mutate(approx = na.approx(Pupil_Avg))
Вышеуказанное приводит к интерполяции с первого закрытого глаза (NA в столбце Pupil_Avg
и далее).Это начало, но мне нужно, чтобы интерполяция начиналась в строке перед «Blink Onset», как уже говорилось ранее.
Спасибо за ваше время.