Plottar konfidensintervallstaplar från sammanfattningsstatistik
On februari 14, 2021 by adminLite som en ruttdiagram. Jag menar inte nödvändigtvis standard övre konfidensintervall, lägre konfidensintervall, medelvärde och dataintervall som visar rutor, men jag menar som en rutplott med bara de tre bitarna: 95% konfidensintervall och medelvärde .
Detta är en skärmdump av en tidningsartikel som hade exakt vad jag vill ha:
Jag skulle också vilja veta hur jag skulle använda programvaran som svararen nämner för att skapa en sådan plot.
Kommentarer
- Vad du kallar ” standard övre konfidensintervall, lägre konfidensintervall, medelvärde och rutor för visning av dataintervall ” är inte standardrutor alls. Standardrutan visar median, kvartiler, minimum och maximum och ofta andra detaljer.
- @Nick Right: men vad heter sådan grafik egentligen? (Jag ’ är inte säker.)
- Denna typ av plot är standard (det ’ är inte en ruta tomt) och kan produceras av alla större statistiska paket: Stata, SAS, R , MATLAB. Jag antar att du också kunde göra det med Excel.
- @COOLSerdash bra! Kan du skriva upp ett svar för MATLAB eftersom jag redan har MATLAB?
- Jag ’ Jag kallar dessa konfidensintervalldiagram, men inte varje plot behöver verkligen ett distinkt namn . Varje plot förtjänar dock en texttextning ….
Svar
I MATLAB kanske du vill prova felfältet -funktionen: http://www.mathworks.de/de/help/matlab/ref/errorbar.html
Alternativt kan du kan göra det dumt och manuellt. Till exempel, med en matris av datapunkter ”a”, kan du beräkna dina medel med funktionen m = medelvärde (a), beräkna dina CI: er (beroende på vilken CI du behöver) och rita resultaten för hand.
Demonstration om du redan vet medelvärdet och CI, förutsatt att CI finns i en matris CI (första och andra kolumnen) och medel finns i en matris a :
plot(1:length(CI),a,"o","markersize", 10) % plot the mean hold on; plot(1:length(CI),CI(1,:),"v","markersize", 6) % plot lower CI boundary hold on; plot(1:length(CI),CI(2,:),"^","markersize", 6) % plot upper CI boundary hold on; for I = 1:length(CI) % connect upper and lower bound with a line line([I I],[CI(1,I) CI(2,I)]) hold on; end; axis([0 length(CI)+1 min(CI(1,:))*0.75 max(CI(2,:))*1.25]) % scale axis
Demonstration om du känner till enskilda mätningar, för ett experiment med upprepade mått, 3+ villkor, ett villkor per kolumn, ett ämne per rad i matris a, inga prover saknas, 95% CI som av MATLAB ”s ttest () :
[H,P,CI] = ttest(a); % calculate 95% CIs for every column in matrix a % CIs are now in the matrix CI! plot(1:length(CI),[mean(a)],"o","markersize", 10) % plot the mean hold on; plot(1:length(CI),CI(1,:),"v","markersize", 6) % plot lower CI boundary hold on; plot(1:length(CI),CI(2,:),"^","markersize", 6) % plot upper CI boundary hold on; for I = 1:length(CI) % connect upper and lower bound with a line line([I I],[CI(1,I) CI(2,I)]) hold on; end; axis([0 length(CI)+1 min(CI(1,:))*0.75 max(CI(2,:))*1.25]) % scale axis
Kommentarer
- Läs min senaste redigering, jag ’ ledsen men vissa människor som irriterar helvetet i mig, redigerade det faktum att jag bara känner till 95% CI och betyder inga ytterligare data.
- @BrentonHorne hjälpte inte länken till felfältfunktionen? Det ser ut att vara exakt vad du vill.
- Som Peter sa, använd sedan errorbar () . Eller använd skriptet jag skrev, men ignorera den första raden med ttestet och mata bara det menar och CI direkt. Jag ’ Jag kommer att redigera det antar jag.
- @BrentonHorne För att vara rättvis har du aldrig diskuterat punkten noggrant eller ens nämnt det alls i kroppens kropp fråga. Det antyddes av titeln men den här titeln nämnde också felaktigt rutor, vilket är problemet som redigeringen försökte fixa. Det ’ är olyckligt att ordet ”bara” försvann under processen men ingen redigerade det medvetet en stor del av din fråga. Dessutom innehöll svaret en lösning och resten av texten kan vara intressant för andra läsare.
- Jag sprang koden, det gick bra, problemet är att jag skulle vilja ha det om det fanns några medel genom som jag kunde gå med i övre CI och nedre CI med en rad som i skärmdumpen i min fråga.
Svar
Titta om detta hjälper dig. R-lösning:
par(mfrow=c(2,1)) # to stack the charts on column #Dataset 1 upperlimit = c(10,12,8,14) lowerlimit = c(5,9,4,7) mean = c(8,10,6,12) df = data.frame(cbind(upperlimit,lowerlimit,mean)) plot(df$mean, ylim = c(0,30), xlim = c(1,4)) install.packages("plotrix") require(plotrix) plotCI(df$mean,y=NULL, uiw=df$upperlimit-df$mean, liw=df$mean-df$lowerlimit, err="y", pch=20, slty=3, scol = "black", add=TRUE) #Dataset 2 upperlimit_2 = upperlimit*1.5 lowerlimit_2 = lowerlimit*0.8 mean_2 = upperlimit_2-lowerlimit_2 df_2 = data.frame(cbind(upperlimit_2,lowerlimit_2,mean_2)) plot(df$mean_2, ylim = c(0,30), xlim = c(1,4)) plotCI(df_2$mean_2,y=NULL, uiw=df_2$upperlimit_2-df_2$mean_2, liw=df_2$mean_2- df_2$lowerlimit_2, err="y", pch=20, slty=3, scol = "black", add=TRUE) rm(upperlimit,lowerlimit,mean,df,upperlimit_2,lowerlimit_2,mean_2,df_2) #remove the objects stored from workspace par(mfrow=c(1,1)) # go back to default (one graph at a time)
Kommentarer
- och hur kör jag en sådan kod? Jag är helt ny på R så att du ’ måste gå igenom det för att jag är oklart.
- Jag kan hjälpa dig att ge ett skott, men först du måste följa två steg: i) installera R Studio på din dator, ii) ge ett reproducerbart exempel: stackoverflow.com/questions/5963269/…
- @AndreSilva, jag tror att du gick en extra mil där. Bra stöd och mentorskap!
- Det här är vad jag fick för att köra din kod i.stack.imgur.com/yrZaJ.png
- @BrentonHome. Konstig. Jag testade bara och det fungerade. ” -felet ” staplar visas inte. Installerade du paketet
plotrix
? Jag lade till en programkommandorad i koden som installerar plotrix-paketet. Snälla, försök igen och meddela det.
Svar
Denna typ av plot i R med ggplot2, även om du kanske måste göra lite med axelteckenstorlek:
library(ggplot2) data.estimates = data.frame( var = c("1", "2", "3", "4", "5", "6", "7", "8", "9"), par = c(1.12210,0.18489,1.22011,1.027446235,0.43521,0.53464,1.93316,-0.43806,-0.12029), se = c(0.42569,0.32162,0.58351,0.771608551,0.24803,0.65372,0.92717,0.45939,0.51558)) data.estimates$idr <- exp(data.estimates$par) data.estimates$upper <- exp(data.estimates$par + (1.96*data.estimates$se)) data.estimates$lower <- exp(data.estimates$par - (1.96*data.estimates$se)) p2 <- ggplot(data.estimates, aes(var,idr, size=10)) + theme_bw(base_size=10) p2 + geom_point() +geom_errorbar(aes(x = var, ymin = lower, ymax = upper, size=2), width = 0.2) + scale_y_log10(limits=c(0.1, 50), breaks=c(0.1, 0.5, 1, 5, 10, 25, 50)) + xlab("Site") + ylab("RR")
Svar
I Stata använd serrbar
eller ciplot
(SSC) eller eclplot
(Stata Journal, SSC).
Svar
Förutsatt att du har tillgång till originaldata kan du göra detta i R med linjeplott.CI-funktionen i sciplot bibliotek
Exempel med mtcars dataset:
lineplot.CI(x.factor=gear, response=mpg, group=vs, data=mtcars)
Observera att lineplot.CI som standard plottar SE-staplar (det kan ändras för att definiera en ny funktion med argumentet ci.fun för att plotta 95% CI-intervall)
lineplot.CI(x.factor=gear, response=mpg, group=vs, data=mtcars, ci.fun=function(x) c(mean(x)-1.96*se(x), mean(x)+1.96*se(x)))
Svar
Detta kan göras i R med points()
(eller plot(..., type="p")
) och segments()
. Det kan också finnas R-funktioner som är utformade för att skapa CI: er för dig, men de kan kräva originaldata. De flera panelerna i samma figur skapade med par(mfrow=c(4,1))
. Om du inte ” inte känner till någon R, det skulle vara svårt att göra lätt (som i, du måste lära dig lite mer R eller få någon att hjälpa till med din specifika datamängd).
Svar
GraphPad Prism kan enkelt skapa denna typ av diagram genom att plotta felstaplar från felvärden du anger. Skapa en grupperad tabell formaterad för entery av medelvärde, – fel och + fel.
Kommentarer
- Är det möjligt att få en gratis kopia av den som inte är ’ t bara en 30 dagars testversion?
- @BrentonHorne: Nej. Det är inte gratis programvara.
Lämna ett svar