Wykreślanie słupków przedziału ufności ze statystyk podsumowujących
On 14 lutego, 2021 by adminTrochę jak wykres pudełkowy. Niekoniecznie mam na myśli standardowy górny przedział ufności, dolny przedział ufności, średnią i wykresy pudełkowe pokazujące zakres danych, ale mam na myśli wykres pudełkowy z tylko trzema danymi: 95-procentowy przedział ufności i średnia .
Oto zrzut ekranu artykułu w czasopiśmie, który zawierał dokładnie to, czego chcę:
Chciałbym również wiedzieć, w jaki sposób użyłbym oprogramowania, o którym wspomina odpowiadający, do stworzenia takiego wykresu.
Komentarze
- To, co nazywasz „, standardowy górny przedział ufności, dolny przedział ufności, średnia i wykresy pudełkowe przedstawiające zakres danych ” nie są w ogóle standardowymi wykresami pudełkowymi. Standardowy wykres pudełkowy pokazuje medianę, kwartyle, minimum i maksimum oraz często inne szczegóły.
- @Nick Right: ale jak tak naprawdę nazywa się taka grafika? (Nie jestem ' nie jestem pewien.)
- Ten rodzaj wykresu jest standardowy (' nie jest ramką plot) i może być utworzony przez wszystkie główne pakiety statystyczne: Stata, SAS, R , MATLAB. Myślę, że możesz to zrobić również w Excelu.
- @COOLSerdash świetnie! Czy mógłbyś napisać odpowiedź dla MATLAB, skoro mam już MATLAB?
- Ja ' d nazwałbym te wykresy przedziału ufności, ale nie każdy wykres naprawdę wymaga odrębnej nazwy . Jednak każda fabuła zasługuje na podpis tekstowy ….
Odpowiedź
W MATLAB-ie możesz chcieć wypróbuj funkcję errorbar : http://www.mathworks.de/de/help/matlab/ref/errorbar.html
Alternatywnie, możesz może to zrobić w głupi i ręczny sposób. Na przykład, mając macierz punktów danych „a”, możesz obliczyć swoje średnie za pomocą funkcji m = średnia (a), obliczyć swoje CI (w zależności od tego, jakiego CI potrzebujesz) i ręcznie wykreślić wyniki.
Demonstracja, jeśli znasz już średnią i CI, zakładając, że CI znajdują się w macierzy CI (pierwsza i druga kolumna), a średnie w macierzy 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
Demonstracja w przypadku, gdy znasz poszczególne pomiary, dla eksperymentu z powtarzanymi pomiarami, 3+ warunki, jeden warunek na kolumnę, jeden temat na wiersz w macierzy a, brak brakujących próbek, 95% CI według 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
Komentarze
- Przeczytaj moją ostatnią edycję, ' przepraszam, ale niektórzy ludzie, którzy mnie denerwują, usunęli fakt, że znam tylko 95% CI i oznacza brak dodatkowych danych.
- @BrentonHorne czy link do funkcji paska błędów nie pomógł? Wygląda na to, że jest dokładnie tym, czego chcesz.
- Jak powiedział Peter, użyj wtedy errorbar () . Lub użyj skryptu, który napisałem, ale zignoruj pierwszą linię z ttest i po prostu podaj średnią i bezpośrednio CI. ' edytuję to chyba.
- @BrentonHorne Szczerze mówiąc, nigdy nie omawiałeś tego szczegółowo ani w ogóle nie wspominałeś o tym w treści pytanie. Wynikało to z tytułu, ale ten tytuł również omyłkowo wspomniał o wykresach pudełkowych, co jest problemem, który edycja próbowała naprawić. ' to niefortunne, że słowo „tylko” zniknęło w trakcie procesu, ale nikt celowo nie zredagował go w dużej części twojego pytania. Poza tym odpowiedź zawierała rozwiązanie, a reszta tekstu mogłaby być interesująca dla innych czytelników.
- Uruchomiłem kod, poszło dobrze, problem w tym, że chciałbym, gdyby był jakiś sposób który mógłbym połączyć z górnym CI i dolnym CI linią jak na zrzucie ekranu w moim pytaniu.
Odpowiedź
Sprawdź, czy to ci pomoże. Rozwiązanie R:
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)
Komentarze
- i jak uruchomić taki kod? Jestem zupełnie nowy w R, więc ' będę musiał mnie przez to przeprowadzić, ponieważ nie mam pojęcia.
- Mogę pomóc Ci spróbować, ale najpierw musisz wykonać dwa kroki: i) zainstalować R Studio na swoim komputerze, ii) podać odtwarzalny przykład: stackoverflow.com/questions/5963269/…
- @AndreSilva, myślę, że poszedłeś o krok dalej. Świetne wsparcie i mentoring!
- Oto, co otrzymałem za uruchomienie Twojego kodu i.stack.imgur.com/yrZaJ.png
- @BrentonHome. Dziwne. Właśnie przetestowałem i zadziałało. Paski ” ” nie pojawiają się. Czy zainstalowałeś pakiet
plotrix
? Dodałem wiersz poleceń programu w kodzie, który instaluje pakiet plotrix. Spróbuj ponownie i daj znać.
Odpowiedź
Ten typ wykresu w R używający ggplot2, chociaż być może będziesz musiał trochę majstrować przy rozmiar czcionki osi:
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")
Odpowiedź
W Stata użyj serrbar
lub ciplot
(SSC) lub eclplot
(Stata Journal, SSC).
Odpowiedź
Zakładając, że masz dostęp do oryginalnych danych, możesz to zrobić w R za pomocą funkcji lineplot.CI w sciplot biblioteka
Przykład z zestawem danych mtcars:
lineplot.CI(x.factor=gear, response=mpg, group=vs, data=mtcars)
Zwróć uwagę, że lineplot.CI domyślnie wyświetla słupki SE (można to zmienić definiując nowy funkcja z argumentem ci.fun do wykreślenia 95% przedziałów CI)
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)))
Odpowiedź
Można to zrobić w R za pomocą points()
(lub plot(..., type="p")
) i segments()
. Mogą istnieć również funkcje R przeznaczone do tworzenia elementów CI dla Ciebie, ale mogą one wymagać oryginalnych danych. Wiele paneli na tym samym rysunku zostało utworzonych za pomocą par(mfrow=c(4,1))
. Jeśli tego nie zrobisz ” Nie znasz żadnego R, byłoby to trudne do zrobienia (np. musiałbyś nauczyć się trochę więcej R lub poprosić kogoś o pomoc z twoim konkretnym zestawem danych).
Odpowiedź
GraphPad Prism może łatwo utworzyć taki wykres, wykreślając słupki błędów na podstawie wprowadzonych wartości błędów. Utwórz zgrupowaną tabelę sformatowaną dla wprowadzania średniej, – błędu i + błędu.
Komentarze
- Czy można otrzymać bezpłatną kopię, która nie jest ' a 30-dniowa wersja próbna?
- @BrentonHorne: Nie. To nie jest wolne oprogramowanie.
Dodaj komentarz