0

次のデータフレームがあります

 Op.1 Op.2 Site diet Horse ICS
 35   25    a    1     1  10
 32   31    a    1     2  10
 19   32    a    1     3  10
 17   26    a    1     4  10
 25   19    a    1     5  10
 25   17    a    1     6  10
 #... to 432 observations

次の関数を使用して Bland-Altman プロットを作成しました。

 BAplot <- function(x,y,yAxisLim=c(-50,50),xlab="Average", ylab="Difference") {
   d <- ((x + y)/2)
   diff <- x - y        
   plot(diff ~ d,ylim=yAxisLim,xlim=c(0,60),xlab=xlab,ylab=ylab)
   abline(h=(mean(na.omit(diff))-c(-0.96,0,0.96)*sd(na.omit(diff))),lty=2)
 }

得られたプロットは問題ありません。今、data$Site (4 レベル: 0,1,2,3) に従って色を指定し、data$ICS のレベル (6 レベル: 10,11,12,13,14,15) に従って形状を指定しようとしています。

次のコードを書きました。

 clr   <- c("a"="red","b"="blue","c"="green","d"="yellow")[data$Site]
 shape <- c("10"="0","11"="1","12"="2","13"="3","14"="4","15"="5")[data$ICS]
 plot.ops<-BAplot(data$Op.1,data$Op.2,xlab="(Op1 vs Op 2)/2", ylab="Op1-mean of aOp1+Op2",col=clr,pch=shape)

しかし、それはエラーを与えます

 Error in BAplot(data$Op.1, data$Op.2, xlab = "(Op1 vs Op 2)/2", ylab = "Op1-mean of Op1+Op2",  : 
    unused arguments (col = clr, pch = shape)

私も形状を変更しようとしました <- c(10=0,11=1,12=2...) 1,2,3 は pch の異なる形状タイプですが、それでも機能しません。clrについても同じことが言えます。

私が最終的に望んでいるのは、「サイト」の色と「ICS」の形状が異なるプロットです。

これは非常に単純なものであることを意図していますが、基本的な概念上のエラーがある可能性があると思いますが、行き詰まっています。

また、塗りつぶされた形状または空の形状を使用してダイエット (2 レベル) を追加しますが、最初にこれを並べ替えるまで、その段階に到達できません!

どうもありがとう、M

4

2 に答える 2

0

これが最終的に私のためにそれを作ったものです:

a<-ifelse(data$ICS==10,"a",ifelse(data$ICS==11,"b",ifelse(data$ICS==12,"c",ifelse(data$ICS==13,"d",ifelse(data$ICS==14,"e","f"))))) #ICS as characters
cls<-c(2,"orange",7,3,6,4) [factor(a)] #10-11-12-13-14-15: red,orange,yellow,green,purple,blue
b<-data$Site
shapes<-c(0,1,2,8)[factor(b)] #Square is RDC liv, Circle is RDC V, Triangle is RVC V, Star is RVC CCJ
BAplot <- function(x,y,yAxisLim=c(-50,50),xlab="Average", ylab="Difference",col=cls,pch=shapes) {
  d <- ((x + y)/2)
  diff <- x - y        
  plot(diff ~ d,ylim=yAxisLim,xlim=c(0,60),xlab=xlab,ylab=ylab,col=cls,pch=shapes)
  abline(h=(mean(na.omit(diff))-c(-0.96,0,0.96)*sd(na.omit(diff))),lty=2)
}
plot.ops<-BAplot(data$Op.1,data$Op.2,xlab="(Op1 vs Op 2)/2", ylab="Op1-mean of Op1+Op2",col=cls,pch=shapes)
title(main="Bland-Altman plots of Op1 vs Op2")
legend (34,53,legend=c("RDC Liver","RDC V","RVC V","RVC CCJ"), pch=c(0,1,2,8), pt.cex=2, y.intersp=0.8) #legend for shape
legend (49,53,legend=c("10th ICS","11th ICS","12th ICS","13th ICS","14th ICS","15th ICS"), pch=22, pt.cex=2, pt.bg=c(2,"orange",7,3,6,4), y.intersp=0.6) #legend for the colours

理由はわかりませんが、私が書いた場合は機能しません

shapes<-c(0,1,2,8)[factor(data$Site)]

私が作成した場合にのみ機能しました

b<-data$Site
shapes<-c(0,1,2,8)[factor(b)]

とにかく、今ソート!

どうもありがとう、マルコ

于 2013-11-11T16:22:35.177 に答える
0

あなたのコードを複製しようとしましたが、問題は形状がすべてNA.

これはdata$ICS、文字列ではなく数値であるためです。

これを使用して問題を解決できます(数字から引用符を削除したことに注意してください。そうしないと、数字自体が形状として使用され、非常に見苦しくなります:

shapes <- c("10"=0,"11"=1,"12"=2,"13"=3,"14"=4,"15"=5)[as.character(data$ICS)]

または、はるかに単純です

shapes <- (1:5)[data$ICS-10]
于 2013-11-10T20:36:26.877 に答える