2016-04-20 9 views
0

Ich habe ein Streudiagramm in R, und ich möchte die 90% -Konfidenzintervalle für jeden Wert hinzufügen. Ich habe bereits alle Werte der Intervalle. Ich brauche nur Anleitung, wie man sie in den Bildern darstellt.Manuelles Importieren des Konfidenzintervalls in r-Plot

Zum Beispiel habe ich einen Punkt mit der Koordinate (1, 2), das Konfidenzintervall dafür ist [1.9,2.1 (vertikal). Wie kann ich dieses Intervall für diesen Punkt zeichnen?

Antwort

2

Hier ist eine Implementierung, die Ihnen helfen könnte.

data <- structure(list(growth = c(12L, 10L, 8L, 11L, 6L, 7L, 2L, 3L, 
3L), tannin = 0:8), .Names = c("growth", "tannin"), class = "data.frame", row.names = c(NA, 
-9L)) 

attach(data) 
names(data) 


plot(tannin,growth,pch=16,ylim=c(0,12)) 
model<-lm(growth ~ tannin) 
abline(model) 


ci.lines<-function(model,conf= .95 ,interval = "confidence"){ 
    x <- model[[12]][[2]] 
    y <- model[[12]][[1]] 
    xm<-mean(x) 
    n<-length(x) 
    ssx<- sum((x - mean(x))^2) 
    s.t<- qt(1-(1-conf)/2,(n-2)) 
    xv<-seq(min(x),max(x),(max(x) - min(x))/100) 
    yv<- coef(model)[1]+coef(model)[2]*xv 

    se <- switch(interval, 
     confidence = summary(model)[[6]] * sqrt(1/n+(xv-xm)^2/ssx), 
     prediction = summary(model)[[6]] * sqrt(1+1/n+(xv-xm)^2/ssx) 
      ) 
    # summary(model)[[6]] = 'sigma' 

    ci<-s.t*se 
    uyv<-yv+ci 
    lyv<-yv-ci 
    limits1 <- min(c(x,y)) 
    limits2 <- max(c(x,y)) 

    predictions <- predict(model, level = conf, interval = interval) 

    insideCI <- predictions[,'lwr'] < y & y < predictions[,'upr'] 

    x_name <- rownames(attr(model[[11]],"factors"))[2] 
    y_name <- rownames(attr(model[[11]],"factors"))[1] 

    points(x[!insideCI],y[!insideCI], pch = 16, col = 'red') 

    lines(xv,uyv,lty=2,col=ifelse(interval=="confidence",3,4)) 
    lines(xv,lyv,lty=2,col=ifelse(interval=="confidence",3,4)) 
} 

ci.lines(model, conf= .95 , interval = "confidence") 

enter image description here

+0

Hübsch. Ich habe das als nützlich aufgewertet, aber ich glaube nicht, dass es die Frage beantwortet hat. –

0

Zum Beispiel habe ich einen Punkt mit der Koordinate (1,2), das Konfidenzintervall für dieses ist [1.9,2.1] (Vertically)

segments(0.9, 1.9, 1.1, 1.9, col="red") # lower bound 
    segments(0.9, 2.1, 1.1, 2.1, col="red") # upper 
    segments(1 , 1.9, 1, 2.1, col="red", type=3) # vertical dashed line connecting 

Arbeitete Beispiel:

plot(rnorm(20, 1), rnorm(20,2)) 
points(1,2, col="blue", cex=2) 

segments(0.9, 1.9, 1.1, 1.9, col="red") # lower limit 
segments(0.9, 2.1, 1.1, 2.1, col="red") # upper 
segments(1 , 1.9, 1, 2.1, col="red", lty=3) # dashed vertical line connecting