2017-03-23 11 views
1

편집 : 아래의 의견을 토대로 좀 더 명확히하기로 결정했습니다. 그래서 제가 여기서 일하는 데이터의 예가 있습니다.R의 기본 그래픽을 사용하여 SEM 오류 막대가있는 그룹화 된 막대 그림

> example_data 
    A  B  outcome 
1 2.31 1.47  Y 
2 2.14 1.32  N 
3 3.49 1.00  Y 
4 2.12 0.62  Y 
5 0.47 0.55  N 
6 3.36 0.50  N 
7 3.50 0.33  Y 
8 1.97 0.39  Y 
9 3.12 0.99  N 
10 2.04 0.89  Y 
11 2.78 0.36  Y 
12 1.83 0.70  N 
13 3.53 0.77  N 
14 2.25 0.39  N 
15 1.67 0.43  N 
16 3.09 1.10  Y 

그래서, 나는 두 변수 AB 있습니다. 그것들은 더 큰 변수의 하위 그룹이므로 동일한 y 축에서 표현 될 수 있습니다. 두 개의 레벨이있는 ​​다른 변수 outcome으로 그룹화하려고합니다.

나는 다음과 같은

> dataset <- example_data 
> attach(dataset) 
> means1<- tapply(A,outcome,function(x) mean(x,na.rm=TRUE)) 
> means2<- tapply(B,outcome,function(x) mean(x,na.rm=TRUE)) 
> std.err1<- tapply(A,outcome,function(x)sd(x,na.rm=TRUE)/sqrt(length(na.omit(x)))) 
> std.err2<- tapply(B,outcome,function(x)sd(x,na.rm=TRUE)/sqrt(length(na.omit(x)))) 
> matrix_means<- matrix(c(means1,means2),byrow = TRUE) 
> graph<- barplot(matrix_means, beside=TRUE, space=c(0.2,0,0.2,0), axes=FALSE, ann=FALSE, col=c("white","black","red","blue"),ylim=c(0,4), names=c("Outcome-N","Outcome-Y","Outcome-N","Outcome-Y"), xpd=FALSE) 
> axis(2, cex.axis=1.5) 

지금 나는 또한 평균과 각 그룹의 mean+sem 사이의 SEM 줄을 그리는 기능을 화살표를 사용해야합니까.

tapply을 사용하여 SEM을 얻을 수 있지만 4 개의 막대 각각에 화살표를 배치하는 방법을 알지 못합니다.

> arrows(graph, means1, graph, means1 + std.err1, graph, means2, graph, means2 + std.err2, code=3, angle=90, length=0.1) 

이것은 플롯에 화살표를 추가하지 않습니다.

그래픽을 사용하고 ggplot2이 아닌 그래픽을 사용하면 어떻게해야합니까? 누군가 도울 수 있습니까? 내 모든 다른 그래프는 RGrapheR 패키지를 사용하여 이루어 졌으므로 기본 그래픽을 사용하여이 작업을 수행하려고합니다. 따라서 모든 내용이 내 원고와 동일하게 보입니다.

감사합니다.

+0

재현 예를 제공하십시오, 예를 들어, 당신은'dput (matrix_means)'의 출력이나 하위 샘플을 붙여 넣을 수 있습니다. – Djork

답변

0

R.S. 당신이 MCVE을 만들면 우리가 당신의 문제를 이해하고 어떻게 도와야하는지 쉽게 이해할 수 있습니다. 데이터 세트가 매우 크고 합리적인 하위 세트를 만드는 것이 어렵다면 미리로드 된 데이터 세트가 유용 할 수 있습니다. data(package="datasets")을 실행하여 사용 가능한 항목의 목록을 가져올 수 있습니다.

이 경우 귀하의 질문은 꽤 일반적이며, 귀하가 작성한 글에서 이미 절반 이상이 남았습니다. 개체에는 관련 x 값이 포함되어 있습니다. 평균 및 SEM 값을 통해 화살표를 시작해야하는 위치와 연장해야 할 위치를 이미 알고 있으므로이 정보를 벡터로 사용하여 arrow 함수에 전달하면 금색입니다.

데이터를 제공하지 않으므로 mtcars 데이터 세트를 사용하여 시연합니다. 업데이트
에 대한 응답에서

barplot with error bars (1 SE)

data(mtcars) summ.df <- data.frame( mean=tapply(mtcars$hp, mtcars$cyl, mean), sd=tapply(mtcars$hp, mtcars$cyl, sd), n=tapply(mtcars$hp, mtcars$cyl, length)) summ.df$sem <- summ.df$sd/sqrt(summ.df$n) par(mar=c(2.5, 2.5, 2, 1.5)) bplt <- barplot(summ.df$mean, col="white") arrows(bplt, summ.df$mean+summ.df$sem, bplt, summ.df$mean-summ.df$sem, angle=90, code=3, xpd=NA, length=0.1) 

arrows에 대한 호출은 당신에게 문제를 일으키는 무슨. 문서 (?arrows)를 읽으면 네 개의 첫 번째 인수가 화살표의 시작 및 끝점에 대한 x 및 y 좌표임을 알 수 있습니다. 각 화살표에 대해 시작과 끝 x 값은 동일하고 (전체적으로 수직입니다) 으로 주어지며, 끝 y 시작 값은 평균 ± SEM으로 표시됩니다.호출하여 올바른 결과를 얻을 수 있습니다 이와 같이

arrows(graph, c(means1, means2) + c(std.err1, std.err2), 
     graph, c(means1, means2) - c(std.err1, std.err2), 
     code=3, angle=90, length=0.1) 
+0

매력처럼 작동했습니다. 감사. – jaydoc