2017-10-11 8 views
0

모든 피험자 (총 20 개)와 조건 별 반응 시간 (총 3 개)이있는 data.frame이 있습니다. 예를 들어 아래를보십시오.데이터 프레임에서 이상 치를 제거했습니다. (+ 2SD)

나는 각 과목

이 코드 사용에 대한 각 조건의 평균에서 이상 치를 제거 할 것 :

dat<- do.call(rbind,by(dat,dat$condition,function(x) x[!abs(scale(x$rt_raw)) > 2,])) 

을하지만 그렇지 않은 조건 주제로, 상태에 따라 그룹에 각 행 보인다 . 다른 방법이 있습니까? 아니면 내가 틀렸어?

rt_raw  subject condition 

0.9193426  1  L   
0.7985855  1  C   
0.7000456  1  S   
0.8501735  2  C   
0.715198  2  S   
0.7865169  2  L 

미리 감사

+1

예상되는 출력은 어떻습니까? 나는 '홍채 (iris)'데이터 세트로 시도해 보았고 코드가 정상적으로 작동하는 것 같습니다. – ANG

+0

코드가 평균보다 2.0 SD 높은 재판을 제거하기 위해 조건 당 각 과목의 평균을 고려하는지 또는 조건 당 모든 과목의 평균을보고 위에있는 시행을 제거하는지 여부는 확실하지 않습니다. – Tre

+0

감사합니다. Ang. 나는 그렇게 생각했다. 조건 당 각 과목의 평균을보고 그러한 방식으로 실험을 제거 할 수있는 방법을 알고 있습니까? – Tre

답변

0

에이 거친 솔루션을 시도 할 수 있습니다. 여기에서의 아이디어는 "조건 별 각 피험자의 평균"을 고려하기 위해 조건의 평균 및 표준 편차에 대한 두 변수를 만드는 것입니다. 다음 조건은 조건 당 각 과목의 평균에 따라 시행이 제거됩니다.

dat <- data.frame(rt_raw = runif(12, 1, 10), 
        subject = sort(rep(1:3, 4)), 
        condition = rep(c("L", "C", "S"), 4)) 

# mean and sd per condition, for each subject (each row) 
dat$mean.condition <- by(dat$rt_raw, dat$condition, mean) 
dat$sd.condition <- by(dat$rt_raw, dat$condition, sd) 
# remove outliers 
dat2 <- dat[!(abs(dat$rt_raw - dat$mean.condition)/dat$sd.condition) > 1, ] 
dat3 <- dat[!(abs(dat$rt_raw - dat$mean.condition)/dat$sd.condition) > 1.5, ] 
dat4 <- dat[!(abs(dat$rt_raw - dat$mean.condition)/dat$sd.condition) > 2, ]