Jak poprawnie kreślić trendy


45

Tworzę wykres, aby pokazać trendy śmiertelności (na 1000 osób) w różnych krajach, a historia, która powinna pochodzić z fabuły, jest taka, że ​​Niemcy (jasnoniebieska linia) są jedynymi, których trend rośnie po 1932 roku. moja pierwsza (podstawowa) próba

wprowadź opis zdjęcia tutaj

Moim zdaniem ten wykres pokazuje już to, co chcemy powiedzieć, ale nie jest zbyt intuicyjny. Czy masz jakieś sugestie, aby wyraźniej odróżnić trendy? Myślałem o planowaniu stóp wzrostu, ale próbowałem i nie jest tak lepiej.

Dane są następujące

year     de     fr      be       nl     den      ch     aut     cz       pl
1927    10.9    16.5    13      10.2    11.6    12.4    15      16      17.3
1928    11.2    16.4    12.8    9.6     11      12      14.5    15.1    16.4
1929    11.4    17.9    14.4    10.7    11.2    12.5    14.6    15.5    16.7
1930    10.4    15.6    12.8    9.1     10.8    11.6    13.5    14.2    15.6
1931    10.4    16.2    12.7    9.6     11.4    12.1    14      14.4    15.5
1932    10.2    15.8    12.7    9       11      12.2    13.9    14.1    15
1933    10.8    15.8    12.7    8.8     10.6    11.4    13.2    13.7    14.2
1934    10.6    15.1    11.7    8.4     10.4    11.3    12.7    13.2    14.4
1935    11.4    15.7    12.3    8.7     11.1    12.1    13.7    13.5    14
1936    11.7    15.3    12.2    8.7     11      11.4    13.2    13.3    14.2
1937    11.5    15      12.5    8.8     10.8    11.3    13.3    13.3    14

2
Porównywalne byłyby dane z Włoch i Hiszpanii. W tamtym czasie mieli także rządy faszystowskie.
asmaier

1
oprócz dobrych pomysłów podanych w odpowiedziach, proszę rozpocząć wykres od 0 (oś y), aby względne wielkości zmian były bardziej widoczne.
WoJ,

2
@ WoJ Rozumiem twój punkt widzenia, ale w praktyce zakres wynosi od około 9 do około 18 na 1000, więc połowa miejsca na wykresie zostałaby wydana pokazując, że śmiertelność nie jest równa zero. Myślę, że właśnie dlatego większość ludzi (w tym ja) nie chciała tego robić w swoich odpowiedziach. Zastanów się, gdzie kończy się twoje kryterium, np. Czy nalegałbyś, aby wykresy historycznych różnic wysokości dorosłych zaczynały się od zera? Więcej dyskusji na stronie np. Stats.stackexchange.com/questions/184525/...
Nick Cox

1
Zamiast myśleć o wykresie, najpierw zastanawiałbym się, co leży u podstaw danych i analizy. Jakie czynniki są związane ze śmiertelnością? Czy śmiertelność spada szybciej, jeśli jest już wysoka (np. Polska)? Czy poziom śmiertelności utrzymuje się na pewnym poziomie? Czy ten efekt plateau (który jest silniejszy dla Niemiec) może sprawić, że wzrost dla Austrii (w ostatnich latach) będzie silniejszy? Wykres jest rodzajem surowych danych (nadal wymaga analizy), a jednocześnie jest wyprowadzany (liczby nie są prostymi pomiarami, ale wyprowadzanymi), co utrudnia wyróżnienie 1 efektu.
Sextus Empiricus

1
Ponadto lepiej pokazać dłuższy okres niż zaledwie 10 lat. Nacisk na te dziesięć lat jest sprawiedliwy tylko wtedy, gdy pokażesz otoczenie. Tak często widać zbliżenia, które w szerszej perspektywie mają znacznie mniej sensu. Kiedy te krzywe poruszają się w górę iw dół jak fale podczas burzy, musisz pokazać całe morze, a nie tylko jedną falę, która akurat koreluje z ładną historią. (Jestem pewien, że istnieje przykład Tufte'a pokazujący tę zasadę)
Sextus Empiricus

Odpowiedzi:


53

Czasami mniej znaczy więcej. Dzięki mniej szczegółowym informacjom o zmianach z roku na rok i różnicach między krajami możesz podać więcej informacji o trendach. Ponieważ pozostałe kraje poruszają się głównie razem, można się obejść bez oddzielnych kolorów.

Używając wygładzacza, potrzebujesz od czytelnika zaufania, że ​​nie wygładziłeś żadnej interesującej odmiany.

wprowadź opis zdjęcia tutaj

Zaktualizuj po otrzymaniu kilku próśb o kod :

Zrobiłem to w interaktywnym programie budującym grafy JMP . Skrypt JMP to:

Graph Builder(
Size( 528, 456 ), Show Control Panel( 0 ), Show Legend( 0 ),
// variable role assignments:
Variables( X( :year ), Y( :Deaths ), Overlay( :Country ) ),
// spline smoother:
Elements( Smoother( X, Y, Legend( 3 ) ) ),
// customizations:
SendToReport(
    // x scale, leaving room for annotations
    Dispatch( {},"year",ScaleBox,
        {Min( 1926.5 ), Max( 1937.9 ), Inc( 2 ), Minor Ticks( 1 )}
    ),
    // customize colors and DE line width
    Dispatch( {}, "400", ScaleBox, {Legend Model( 3,
        Properties( 0, {Line Color( "gray" )}, Item ID( "aut", 1 ) ),
        Properties( 1, {Line Color( "gray" )}, Item ID( "be", 1 ) ),
        Properties( 2, {Line Color( "gray" )}, Item ID( "ch", 1 ) ),
        Properties( 3, {Line Color( "gray" )}, Item ID( "cz", 1 ) ),
        Properties( 4, {Line Color( "gray" )}, Item ID( "den", 1 ) ),
        Properties( 5, {Line Color( "gray" )}, Item ID( "fr", 1 ) ),
        Properties( 6, {Line Color( "gray" )}, Item ID( "nl", 1 ) ),
        Properties( 7, {Line Color( "gray" )}, Item ID( "pl", 1 ) ),
        Properties( 8, {Line Color("dark red"), Line Width( 3 )}, Item ID( "de", 1 ))
    )}),
    // add line annotations (omitted)

));


4
Z mojego doświadczenia, wygładzanie serii jest bardzo rzadką praktyką w naukach społecznych.
luchonacho

6
Może to jest powód, aby pokazać im coś nowego i przydatnego?
kjetil b halvorsen

9
Niezależnie od norm w naukach społecznych wygładzanie ukrywa spadek, który ma miejsce w 1930 r., I wzrost, który ma miejsce w 1935 r. Skok w wielu krajach występujący w 1929 r. Jest również zasłonięty. W przeciwnym razie bardzo podoba mi się to uproszczone podejście.
Underminer

7
+1 za użycie tylko dwóch kolorów (być może sprawi, że szary będzie jeszcze jaśniejszy?) I unikanie legendy poprzez umieszczenie nazw krajów po prawej stronie. -1 dla wygładzania, które odrzuca informacje bez uzasadnionego powodu. Nie muszę więc głosować ;-)
S. Kolassa - Przywróć Monikę

10
@StephanKolassa Myślę, że Xan ma dobry powód, aby odrzucić informacje: skupić się na ogólnych trendach, a nie z roku na rok zmienności „szumu”. W pewnym stopniu już „odrzucasz informacje” - patrzysz na liczby roczne. Wątpię, czy wykres zostałby ulepszony poprzez wykreślenie dziennych stawek, czyli tam, gdzie zabiera cię „nie odrzucaj informacji”, ad absurdum . - To prawda, że ​​niektóre trendy są zaciemnione przez wygładzanie, ale inne (np. Zmiany sezonowe) są zaciemnione przez wybór stawek rocznych. Istnieje pewne zaufanie, że odpowiednia odmiana jest nadal wyświetlana.
RM

39

Tutaj są dobre odpowiedzi. Pozwól, że zabiorę cię za słowo, że chcesz pokazać, że trend w Niemczech różni się od reszty. Poziomy a zmiany to powszechne rozróżnienie w ekonomii. Twoje dane są na różnych poziomach , ale twoje pytanie brzmi: szukanie zmian . Można to zrobić, ustawiając poziom odniesienia (tutaj 1932) na . Stamtąd każdy kolejny rok jest ułamkiem poprzedniego. (Powszechne jest przyjmowanie dzienników, aby zmiany były bardziej stabilne i symetryczne. To nieco zmienia znaczenie dokładnych liczb, jeśli naprawdę chcesz, aby ktoś dostał to z fabuły, ale zwykle w tym celu ludzie chcą być widząc wzór). Otrzymujesz sumę bieżącą dla każdej serii i pomnóż ją przez1100umownie. Tak właśnie knujesz. Twój przypadek jest nieco mniej powszechny, ponieważ punkt odniesienia znajduje się w środku serii, więc uruchomiłem go w obu kierunkach od 1932 r. Poniżej znajduje się prosty przykład zakodowany w R (będzie wiele sposobów na zrobienie kodu i działka ładniejsza, ale to powinno bezpośrednio pokazać pomysł). Zrobiłem grubszą linię dla Niemiec, aby wyróżnić ją w legendzie, i dodałem linię odniesienia na . Łatwo zauważyć, że Niemcy wyróżniają się na tle innych. Widać również, że wszystkie inne kraje kończą na niższych stawkach w 1937 r. Niż w 1932 r., A ich zmiany z roku na rok zmieniają się znacznie mniej w latach po 1932 r. Niż w latach poprzedzających ten okres. 100

d = read.table(text="
year     de     fr      be       nl     den      ch     aut     cz       pl
1927    10.9    16.5    13      10.2    11.6    12.4    15      16      17.3
...
1937    11.5    15      12.5    8.8     10.8    11.3    13.3    13.3    14",
header=T)

d2          = d  # we'll end up needing both
d2[6,2:10]  = 1  # set 1932 as 1
for(j in 2:10){   
  for(i in 7:11){
      # changes moving forward from 1932:
    d2[i,j] = log( d[i,j]/d[i-1,j] )
      # running sum moving forward from 1932:
    d2[i,j] = d2[i,j]+d2[i-1,j]
  }
  for(i in 5:1){
      # changes moving backward from 1932:
    d2[i,j] = log( d[i,j]/d[i+1,j] )
      # running sum moving forward from 1932:
    d2[i,j] = d2[i+1,j]+d2[i,j]
  }
}
d2[,2:10]   = d2[,2:10]*100  # multiply all values by 100

windows()  # plot of changes
  plot(1,1, xlim=c(1927,1937), ylim=c(82,118), xlab="Year", 
       ylab="Change from 1932", main="European death rates")
  abline(h=100, col="lightgray")
  for(j in 2:10){
    lines(1927:1937, d2[,j], col=rainbow(9)[j-1], lwd=ifelse(j==2,2,1))
  }
  legend("bottomleft", legend=colnames(d2)[2:10], lwd=c(2,rep(1,8)), lty=1, 
         col=rainbow(9), ncol=2)

windows()  # plot of levels
  plot(1,1, xlim=c(1927,1937), ylim=c(8,18.4), xlab="Year", 
       ylab="Deaths per thousand", main="European death rates")
  abline(h=d[6,2:10], col="gray90")
  points(rep(1932,9), d[6,2:10], col=rainbow(9), pch=16)
  for(j in 2:10){
    lines(1927:1937, d[,j], col=rainbow(9)[j-1], lwd=ifelse(j==2,2,1))
  }
  legend("topright", legend=colnames(d)[2:10], lwd=c(2,rep(1,8)), lty=1, 
         col=rainbow(9), ncol=2)

wprowadź opis zdjęcia tutaj

Natomiast poniżej znajduje się odpowiedni wykres danych w poziomach. Mimo to starałem się, aby zobaczyć, że same Niemcy idą w górę po 1932 roku na dwa sposoby: w 1932 roku postawiłem wyraźny punkt na każdej serii i na tych poziomach narysowałem słabą szarą linię na wykresie w tle.

wprowadź opis zdjęcia tutaj


+1 naprawdę świetne rozwiązanie
Repmat

2
Jest wystarczająco dużo miejsca, aby zgubić legendę (zabić klucz) i oznaczyć każdą krzywą bezpośrednio w treści wykresu.
Nick Cox,

3
Istnieje wiele sposobów na ulepszenie kodu i fabuły. Moim głównym celem było rozróżnienie b / t idei poziomów i zmian oraz zapewnienie podstawowej demonstracji sposobu wizualizacji zmian.
gung - Przywróć Monikę

17

Istnieje wiele dobrych pomysłów w innych odpowiedziach, ale nie wyczerpują one dobrych możliwych rozwiązań. Pierwszy wykres w tej odpowiedzi zakłada, że ​​różne poziomy śmiertelności można omawiać i wyjaśniać osobno. Umożliwiając każdej serii wypełnienie dużej ilości dostępnego miejsca, koncentruje uwagę czytelników na wzorcach względnych zmian.

Porządek alfabetyczny według kraju jest zwykle niedokładnym ustawieniem domyślnym i nie jest tu nalegany. Na szczęście i na szczęście Niemcy de są w centrum tego wyświetlacza 3 x 3. Prosta narracja - patrz! Wzorzec Niemiec jest wyjątkowy z poprawą z 1932 r. - jest możliwy i wiarygodny.

wprowadź opis zdjęcia tutaj

Na szczęście, ale na szczęście, 9 krajów wystarczy, aby uzasadnić wypróbowanie oddzielnych paneli, ale nie zbyt wiele, aby uczynić ten projekt niepraktycznym (powiedzmy 30, a na pewno 300 paneli, może być (byłoby) zbyt wielu paneli do skanowania, z których każdy jest zbyt mały, aby lustrować).

Widocznie jest tu dużo miejsca na pełniejsze nazwy krajów. (W niektórych innych odpowiedziach legendy zajmują dużą część dostępnej przestrzeni, pozostając nieco tajemniczymi. W praktyce ludzie zainteresowani takimi danymi uważają, że skróty kraju są łatwe do odkodowania, ale to, jak dalece potrzebna jest legenda, jest często irytujący problem w projektowaniu graficznym).

Kod Stata dla rekordu:

clear
input int year double(de fr be nl den ch aut cz pl)
1927 10.9 16.5   13 10.2 11.6 12.4   15   16 17.3
1928 11.2 16.4 12.8  9.6   11   12 14.5 15.1 16.4
1929 11.4 17.9 14.4 10.7 11.2 12.5 14.6 15.5 16.7
1930 10.4 15.6 12.8  9.1 10.8 11.6 13.5 14.2 15.6
1931 10.4 16.2 12.7  9.6 11.4 12.1   14 14.4 15.5
1932 10.2 15.8 12.7    9   11 12.2 13.9 14.1   15
1933 10.8 15.8 12.7  8.8 10.6 11.4 13.2 13.7 14.2
1934 10.6 15.1 11.7  8.4 10.4 11.3 12.7 13.2 14.4
1935 11.4 15.7 12.3  8.7 11.1 12.1 13.7 13.5   14
1936 11.7 15.3 12.2  8.7   11 11.4 13.2 13.3 14.2
1937 11.5   15 12.5  8.8 10.8 11.3 13.3 13.3   14
end

rename (de-pl) (death=)
reshape long death, i(year) j(country) string
set scheme s1color 
line death year, by(country, yrescale note("")) xtitle("") xla(1927(5)1937)

EDYTOWAĆ:

Jednym prostym ulepszeniem tego wykresu sugerowanym przez Tima Morrisa jest podkreślenie roku, w którym wystąpiło maksimum:

wprowadź opis zdjęcia tutaj

egen max = max(death) , by(country)
replace max = max == death
twoway line death year || scatter death year if max, ms(O)  ///
by(country, yrescale note("") legend(off)) xtitle("") xla(1927(5)1937)  

EDYCJA 2 (poprawiona, aby pokazać prostszy kod):

Alternatywnie, ten następny projekt pokazuje każdą serię osobno, ale za każdym razem z drugą serią jako tło. Ogólny pomysł omówiono w tym powiązanym wątku .

wprowadź opis zdjęcia tutaj

Jest tu zarówno strata, jak i zysk. Podczas gdy każda seria może być łatwiej widziana w kontekście innych, przestrzeń jest tracona przez powtarzanie.

Kod Stata dla rekordu:

(Kod input, reshape, renamejak wyżej, w tej odpowiedzi)

* type "ssc inst fabplot" to install
fabplot line death year, by(country, compact note("countries highlighted in turn")) ///
ytitle("death rate, yearly deaths per 1000") yla(8(2)18, ang(h)) ///
xla(1927(5)1937, format(%tyY)) xtitle("") front(connected) 

fabplotnależy rozumieć jako fstrony czo łowej lub foreground and backdrop lub bONTEKST działki nie jako pewnego echa 1960 żargonie o „wspaniałe”.


3
+1, muszę powiedzieć, kod jest dość zwięzły, aby stworzyć fajną fabułę.
gung - Przywróć Monikę

@gung Dzięki. Wszelkie uznanie tutaj zasługuje na StataCorp, ponieważ są to wbudowane polecenia. Kosmetycznie zmieniam domyślny tekst, np. yearJako tytuł osi x (kto tego potrzebuje?). Dodam, że dla użytkownika Stata naturalną strukturą danych byłaby taka, która nie zobowiązywałaby do renamei reshape. ale ma odrębne panele (tutaj kraje) jako odrębne bloki obserwacji.
Nick Cox,

+1 Jednak jedną z problematycznych cech tego rozwiązania jest to, że gubi ono kontekst: nie widzimy łatwo, że chociaż liczba zgonów w Niemczech wzrosła, zaczęła się na niskim poziomie i na koniec nie była (stosunkowo) bardzo wysoka.
whuber

1
Alternatywny projekt w EDIT 2 jest jednym ze sposobów rozwiązania kluczowego punktu @whuber dotyczącego kontekstu.
Nick Cox,

15

Twój wykres jest rozsądny, ale wymagałby pewnych udoskonaleń, w tym tytułu, etykiet osi i kompletnych etykiet kraju. Jeśli Twoim celem jest podkreślenie faktu, że Niemcy były jedynym krajem, w którym odnotowano wzrost wskaźnika śmiertelności w okresie obserwacji, prostym sposobem na to byłoby podkreślenie tej linii na wykresie, albo za pomocą grubszej linii, innej typ linii lub przezroczystość alfa. Możesz również rozszerzyć wykres szeregów czasowych o wykres słupkowy pokazujący zmianę wskaźnika śmiertelności w czasie, aby złożoność linii szeregów czasowych została zredukowana do jednej miary zmiany.

Oto w jaki sposób można produkować przy użyciu tych działek ggplotw R:

library(tidyr);
library(dplyr);
library(ggplot2);

#Create data frame in wide format
DATA_WIDE <- data.frame(Year = 1927L:1937L,
                        DE   = c(10.9, 11.2, 11.4, 10.4, 10.4, 10.2, 10.8, 10.6, 11.4, 11.7, 11.5),
                        FR   = c(16.5, 16.4, 17.9, 15.6, 16.2, 15.8, 15.8, 15.1, 15.7, 15.3, 15.0),
                        BE   = c(13.0, 12.8, 14.4, 12.8, 12.7, 12.7, 12.7, 11.7, 12.3, 12.2, 12.5),
                        NL   = c(10.2,  9.6, 10.7,  9.1,  9.6,  9.0,  8.8,  8.4,  8.7,  8.7,  8.8),
                        DEN  = c(11.6, 11.0, 11.2, 10.8, 11.4, 11.0, 10.6, 10.4, 11.1, 11.0, 10.8),
                        CH   = c(12.4, 12.0, 12.5, 11.6, 12.1, 12.2, 11.4, 11.3, 12.1, 11.4, 11.3),
                        AUT  = c(15.0, 14.5, 14.6, 13.5, 14.0, 13.9, 13.2, 12.7, 13.7, 13.2, 13.3),
                        CZ   = c(16.0, 15.1, 15.5, 14.2, 14.4, 14.1, 13.7, 13.3, 13.5, 13.3, 13.3),
                        PL   = c(17.3, 16.4, 16.7, 15.6, 15.5, 15.0, 14.2, 14.4, 14.0, 14.2, 14.0));

#Convert data to long format
DATA_LONG <- DATA_WIDE %>% gather(Country, Measurement, DE:PL);

#Set line-types and sizes for plot
#Germany (DE) is the fifth country in the plot
LINETYPE <- c("dashed", "dashed", "dashed", "dashed", "solid", "dashed", "dashed", "dashed", "dashed");
SIZE     <- c(1, 1, 1, 1, 2, 1, 1, 1, 1);

#Create time-series plot
theme_set(theme_bw());
PLOT1 <- ggplot(DATA_LONG, aes(x = Year, y = Measurement, colour = Country)) + 
         geom_line(aes(size = Country, linetype = Country)) +
         scale_size_manual(values = SIZE) +
         scale_linetype_manual(values = LINETYPE) +
         scale_x_continuous(breaks = 1927:1937) +
         scale_y_continuous(limits = c(0, 20)) +
         labs(title = "Annual Time Series Plot: Death Rates over Time", 
              subtitle = "Only Germany (DE) trends upward from 1927-37") +
         xlab("Year") + ylab("Crude Death Rate\n(per 1,000 population)");


#Create new data frame for differences
DATA_DIFF <- data.frame(Country = c("DE", "FR", "BE", "NL", "DEN", "CH", "AUT", "CZ", "PL"),
                        Change  = as.numeric(DATA_WIDE[11, 2:10] - DATA_WIDE[1, 2:10]));

#Create bar plot
PLOT2 <- ggplot(DATA_DIFF, aes(x = reorder(Country, - Change), y = Change, colour = Country, fill = Country)) + 
         geom_bar(stat = "identity") +
         labs(title = "Bar  Plot: Change in Death Rates from 1927-37", 
              subtitle = "Only Germany (DE) shows an increase in death rate") +
         xlab(NULL) + ylab("Change in crude Death Rate\n(per 1,000 population)");

Prowadzi to do następujących wykresów:

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Uwaga: Jestem świadomy, że PO zamierzał podkreślić zmianę wskaźnika śmiertelności od 1932 r., Kiedy trend w Niemczech zaczął rosnąć. Wydaje mi się to trochę wybieraniem wiśni i uważam, że wątpliwe jest, gdy przedziały czasowe zostaną wybrane w celu uzyskania określonego trendu. Z tego powodu przyjrzałem się przedziałowi w całym zakresie danych, co stanowi inne porównanie z PO.


Dziękuję za twoje sugestie. Format jest w toku, był to tylko przybliżony przykład tego, co chciałem uzyskać;)
PhDing

1
@Graipher: Dobrze zauważony (+1) - Będę edytować, gdy będę miał trochę więcej czasu.
Przywróć Monikę

1
Lubię wykres słupkowy, ale zamiast alfabetycznej osi x sortowałbym według zmian.
Gregor

14

Chociaż deklarowanym celem jest wyświetlanie zmian, najwyraźniej chcesz pokazać również roczne szeregi czasowe według krajów. Sugeruje to, że grafika nie zostanie całkowicie przerobiona, a jedynie zmodyfikowana.

Ponieważ zmiana dotyczy tego, co dzieje się z roku na rok, można rozważyć przedstawienie zmian za pomocą symboli graficznych obejmujących kolejne lata: to znaczy odcinków linii łączących punkty danych na wykresie.

Ponieważ kolor jest tak przydatny do rozróżniania krajów, a poza tym nie jest tak dobry do wskazywania zmiennych ilościowych, pozostawia nam zasadniczo tylko dwie inne cechy, które można zmieniać w celu wskazania zmiany: styl i grubość segmentów. Ponieważ twoja teza dotyczy pozytywnych zmian, będziesz chciał, aby segmenty linii dla wzrostów były bardziej widoczne: ich style powinny być bardziej ciągłe i powinny być grubsze.

Wreszcie, twoja praca dotyczy danych po 1932 r. Będziemy chcieli podkreślić te elementy grafiki w stosunku do innych. Można to zrobić nasycając kolor.

Wątek

To rozwiązanie natychmiast zapewnia wgląd, który nie był widoczny w oryginale:

  • Żaden kraj nie odnotował rocznego wzrostu śmiertelności przez wszystkie lata po 1932 r. Każdy taki kraj wyglądałby jak ciągła linia ciągła, ale takiej linii nie ma.

  • Znaczną część zmian należy przypisać czynnikom wspólnym dla wszystkich krajów. Jest to widoczne w podobieństwach stylu linii i grubości w pionowych kolumnach. Na przykład w latach 1934–35 wskaźniki zgonów wzrosły prawie we wszystkich krajach, a w latach 1933–34 spadły w prawie wszystkich krajach.

  • Niemcy odnotowały niezwykły wzrost śmiertelności w latach 1932–33, a także niewielki wzrost w latach 1935–36.

Sugerują one przeprowadzenie rzetelnej, dwukierunkowej analizy zmiany wskaźnika śmiertelności w zależności od kraju, być może przez medianę polską, w celu głębszego wniknięcia w relatywne wyniki krajów europejskich w tym okresie.

Jeśli chcesz podkreślić tylko różnicę między 1937 a 1932 rokiem, można zastosować podobną technikę, aby symbolizować fragmenty ścieżek między tymi datami. Niemcy wyróżniałyby się:

Wykres 2


10

Slopegraphs

Jednym ze sposobów prezentacji danych jest użycie slopegrafu, który jest szczególnie dobry do porównywania zmian lub gradientów (niektóre linki: 1 2 )

Poniżej jest

  • Po lewej przykład slopegrafu, który pokazuje, jak to wygląda w twoim przypadku.

  • W centrum bardziej złożony slopegraph, który pokazuje także rok 1932

  • Po prawej stronie odmiana slopegraph, bardziej rodzaj wykresów przebiegu w czasie, w którym wyświetlane są wszystkie dane (co oznacza brak linii prostych).

Nie jestem pewien, który z nich jest najlepszy. Trzecia / odpowiednia opcja zapewnia silniejsze wyobrażenie o zmianach z roku na rok (i na przykład staje się bardziej widoczne, że Danmark kontra Niemcy nie wyglądają tak inaczej i z roku na rok bardzo rośnie), ale może również rozpraszać uwagę (szczególnie szczyt z 1929 r.). To, który z nich jest lepszy, zależy od tego, co chcesz przekazać za pomocą wykresu i od tego, ile szczegółów wymaga twoja historia (np. Zwrot w 1932 r. Z innym rządem, co jest bardziej jasne w drugiej / środkowej opcji).

Odmiana slopegraph po prawej wygląda bardzo podobnie do wykresu Xana. Jednak oprócz różnic stylistycznych istnieje jeszcze jedna ważna różnica. Szerokość i wysokość figury są dobierane tak, aby kąt krzywych był zbliżony do 45 stopni. W ten sposób różnice są bardziej widoczne (uważam, że najlepszym przykładem jest przykład plam słonecznych autorstwa Edwarda Tufte )

wykres nachylenia i wariacja

Więcej kontekstu

Jeśli chcesz dodać więcej złożoności niż prosty slopegraph, to uważam, że tak naprawdę lepiej pokazać więcej danych poza zakresem 1927–1937 niż w zakresie. (ponownie przykład Tufte'a ze stron 74-75 w Wizualnym wyświetlaniu informacji ilościowych, do którego można się dostać za pośrednictwem tej strony na tablicy ogłoszeń na jego stronie internetowej)

Poniższy przykład pokazuje dane z lat 1900-2000 (z wyłączeniem Polski, której dane są nieco trudne) wyodrębnione z wikipedii (np. Ta strona dla Czech ) oraz dla Szwajcarii i Holandii ich krajowych biur statystycznych ( bfs i Statline ).

(Dane są nieco inne niż twoje, ale takie same jak na przykład artykuł „Autarchia, rozpad rynku i zdrowie: śmiertelność i kryzys żywieniowy w nazistowskich Niemczech, 1933–1937” autorstwa Jörga Batena i Andrei Wagner. Ten artykuł jest interesujący czytać, ponieważ dostarczają o wiele więcej danych niż tylko prymitywne wskaźniki zgonów, choć ograniczają się także do krótkiego okresu. Szczególnie interesujące jest to, że wzrost wskaźnika zgonów w latach 1932–1937 występował głównie między miastami w pasie od Frankfurtu do Bremy i Hamburg)

więcej kontekstu

Uważam, że ten wykres jest ważny, ponieważ pokazuje, że Niemcy odnotowały bardzo silny spadek przed wzrostem po 1932 r. Silniejszy niż w innych krajach. Możesz mieć negatywne i pozytywne interpretacje. W latach 1932–1937 wskaźnik śmiertelności w Niemczech wzrósł bardziej niż w innych krajach, ale czy (1) był to wzrost od niskiego szczytu, czy (2) wzrost w kierunku wysokiego szczytu? Interesującym aspektem w tym względzie jest to, że poziom 10,8 z 1932 r. Jest bardzo niski dla Niemiec (w tym momencie tylko Holandia miała niższą śmiertelność). Jest to nie tylko najniższy poziom z lat aż do 1937 r., Ale trwa także do 1995 r., Zanim ponownie osiągnie ten poziom 10,8.

Kolejny punkt, związany ze zdrowiem (jeśli to jest twój kontekst), może być lepsze porównanie oczekiwanej długości życia, skład demograficzny populacji ma wpływ na śmiertelność, niezależnie od zmian sytuacji zdrowotnej

Nieco dodatkowy kontekst

Powyższy wykres pokazuje całość, ale może być przesadą dla większości celów (z wyjątkiem tego postu, w którym chciałem pokazać całą historię i jest to raczej cel eksploracyjny). Poniższy wykres to alternatywa, która moim zdaniem jest nadal przyzwoita.

mniejszy wykres kontekstowy


Dziękujemy za wszystkie sugestie. Myślę, że slopegrafy, które dostarczyłeś, są bardzo intuicyjne. Jestem pewien, że uwzględnienie dłuższego okresu byłoby przydatne, ale chcemy skupić się na tym konkretnym okresie i wyjaśnić go. Myślę, że fabuła z lat 1900-2000 byłaby zbyt nieuporządkowana. Jeśli chodzi o twój ostatni punkt, dostosowaliśmy wiek surowych stawek, aby nadal stosować wskaźniki śmiertelności.
Doktorat

1
@Alessandro Dodałem alternatywę, która jest bardziej praktyczna. Ponownie liczby są różne, ponieważ korzystałem z różnych źródeł (bez korekty ze względu na wiek), ale sądzę, że silny spadek Niemiec, a następnie silny wzrost, mogą być takie same.
Sextus Empiricus

4

Zależy od odbiorców, ale uprościłbym rzeczy:

wprowadź opis zdjęcia tutaj

Następnie przeliteruj go w podpisie np

W latach 1932–37 roczna śmiertelność wzrosła w Niemczech, natomiast ogólnie spadła w całej Europie Środkowej (Francja, Belgia, Holandia, Dania, Austria, Czechy, Polska).

(BTW co to jest ch vs. cz tj. Którego kraju brakuje mi powyżej?)

Aby być dokładnym, będziesz oczywiście musiał death rateoszacować szacunkową populację przy „łączeniu” tego z „Innymi”, ale jestem pewien, że te informacje są łatwo dostępne.

Aktualizacja 6/9/18: Jest to oczywiście szkic „zabawki” i nie został wyprowadzony z danych; Chodzi o to, aby dostarczyć przybliżony szkic formy, którą powinien przyjąć wykres.

Aby odpowiedzieć na komentarz Whubera: wartości dla „Innych” można wygenerować jako średnie, ważone populacją, np. Z wskazującą wartość dla na rok i jako krajów w „Innych”:OyOi=1...88×

Oyi=i=8i=1ADRyi.populationitotalPopulation

lub lepiej, jeśli masz informacje o populacji. na każdy rok:

Oyi=i=8i=1ADRyi.populationyitotalPopulationy

W zależności od czytelników (np. Epidemiologów vs. historyków) do tego drugiego można dodać odchylenie standardowe lub błąd standardowy, choć myślę, że raczej zepsułoby to prosty wygląd fabuły.


5
chjest Szwajcaria. (A BTW, to jeszcze nie była Republika Czeska w latach 30.) - W twoim podejściu nie podoba mi się to, że nie jest jasne, czy trend spadkowy jest spójny w innych krajach. Może się wydawać, że występują tylko przypadkowe fluktuacje, które zdarzają się średnio w czymś negatywnym w innych krajach, ale w Niemczech są pozytywne.
leftaroundabout

Podoba mi się ta odpowiedź, ale mogę dodać obraz zasięgu lub standardowego odchylenia wokół linii „inni”, w przeciwnym razie środki mogą być mylące.
Tasos Papastylianou

2
Bardzo podoba mi się ten pomysł - ale czy mógłbyś wyjaśnić, w jaki sposób ustaliłeś śmiertelność „innych”? Średnie arytmetyczne ich wskaźników nie byłyby odpowiednie ze względu na bardzo różne populacje, które reprezentują.
whuber

3

Jeśli chcesz wyróżnić zmianę, być może obliczyć to i wyświetlić. Użycie mapy cieplnej do wyświetlenia zmian może być przydatne, ponieważ pozwala na dokonywanie porównań bez problemów z nadmiernym drukowaniem i pozwala uniknąć problemów z interpolacją, które mogą pochodzić z wykresów liniowych.

Używając danych jak dw R:

library(tidyverse)
d2 <- data.frame(apply(d[-1],2,diff))
d2$year <- d$year[-1]
d2 %>% gather(key="country",value=deathrate,-year) %>% 
   ggplot(aes(x=factor(year),y=country,fill=deathrate)) + 
   geom_tile() + 
   scale_fill_gradient2("\u0394 deathrate")

mapa śmierci deathrates

Uwaga: dane zmieniają się teraz w porównaniu z poprzednim rokiem. Widać, że Niemcy mają po 1932 r. Grupę błękitów (wzrost śmiertelności), których nie mają inne kraje. Widać również, że w latach 1934–1935 we wszystkich krajach oprócz Polski odnotowano wzrosty śmiertelności, ale tendencja spadkowa w Niemczech wydaje się być w latach 1932–1933 i 1935–1936 (a także 1927–1928).

Ciekawą cechą jest fakt, że kolory są bardziej intensywne po lewej stronie niż po prawej. Oznacza to, że skala zmian była większa na początku okresu, a bardziej stłumiona pod koniec.

Poleciłbym sparowanie tego z wykresem liniowym pokazującym również poziomy.


2

Tutaj pokazuję różnicę logarytmu stosunku śmierci na 1000 mieszkańców w stosunku do roku poprzedniego (dlatego nie pokazano 1927). Niemcy są pokazane na czerwono, a średnia innych krajów na grubej czarnej linii.

wprowadź opis zdjęcia tutaj

Niemcy odnotowały wzrost tego wskaźnika w ciągu 5 na 10 lat. Po 1932 roku było powyżej średniej w innych krajach (i przeważnie pozytywne), aż do 1937 roku.

Chociaż dlaczego logarytm? Powód jest prosty: zmiana z 2 na 1 jest bardziej drastyczna niż zmiana z 1000 na 999 :)


Kod:

x = read.table("clipboard", header = TRUE, dec = ".")
xl = log(x[-1])
xd = apply(xl, 2L, diff)

png("CVquestion.png")
plot(0,0, xlim = range(x[-1,1]), ylim = range(xd), type = "n", ylab = "", main = "Difference of the log(death rate per 1000 inhab.)", xlab = "year")
grid()
for (i in rev(seq(ncol(xl)))) lines(x[-1,1], xd[,i], type = "o", col = adjustcolor(ifelse(i == 1, 2, 1), 0.7), lwd = ifelse(i == 1, 2, 1), lty = ifelse(i == 1, 1, 2), pch = ifelse(i == 1,16,NA))
lines(x[-1,1], rowMeans(xd[,-1]), type = "o", col = adjustcolor(1, 0.7), lwd = 2, lty = 1, pch = 16)

text(x = 1937, y = rev(xd[10,]), label = rev(colnames(xd)), col = rev(c(2, rep(1,8))))
dev.off()

2
OP mówi o śmiertelności, a nie o zabójstwach
kjetil b halvorsen

@kjetilbhalvorsen Ups, tak się dzieje, gdy próbujesz wizualizacji danych o 21:00 w dzień, w którym pracujesz od 8 rano haha. Naprawię jak najszybciej, dzięki za heads up :)
Firebug

1

Jeszcze jedna wersja: wskaźniki (średni wskaźnik zgonów z 1927 r. Do obecnego roku) / (wskaźnik zgonów 1927)

wprowadź opis zdjęcia tutaj

Zrobione z kodem Mathematica

data = {
 {year,   de,   fr,   be,   nl,  den,   ch,  aut,   cz,   pl},
 {1927, 10.9, 16.5, 13.0, 10.2, 11.6, 12.4, 15.0, 16.0, 17.3},
 {1928, 11.2, 16.4, 12.8,  9.6, 11.0, 12.0, 14.5, 15.1, 16.4},
 {1929, 11.4, 17.9, 14.4, 10.7, 11.2, 12.5, 14.6, 15.5, 16.7},
 {1930, 10.4, 15.6, 12.8,  9.1, 10.8, 11.6, 13.5, 14.2, 15.6},
 {1931, 10.4, 16.2, 12.7,  9.6, 11.4, 12.1, 14.0, 14.4, 15.5},
 {1932, 10.2, 15.8, 12.7,  9.0, 11.0, 12.2, 13.9, 14.1, 15.0},
 {1933, 10.8, 15.8, 12.7,  8.8, 10.6, 11.4, 13.2, 13.7, 14.2},
 {1934, 10.6, 15.1, 11.7,  8.4, 10.4, 11.3, 12.7, 13.2, 14.4},
 {1935, 11.4, 15.7, 12.3,  8.7, 11.1, 12.1, 13.7, 13.5, 14.0},
 {1936, 11.7, 15.3, 12.2,  8.7, 11.0, 11.4, 13.2, 13.3, 14.2},
 {1937, 11.5, 15.0, 12.5,  8.8, 10.8, 11.3, 13.3, 13.3, 14.0}
}

ListPlot[
 Map[
  Table[{First[data[[k + 1]]], Mean[Take[#, k]]/First[#]}, {k, Length[#]}] &,
  Map[Rest, Rest[Transpose[data]]]
 ],
 Joined -> True,
 PlotRange -> All,
 Frame -> True,
 FrameTicks -> {Map[First, Rest[data]], Automatic},
 PlotLabels -> Rest[First[data]],
 AxesOrigin -> {First[First[Rest[data]]], 1} 
]

(Szczyty w 1929 r. Wydają się być związane z pandemią grypy, która miała miejsce w tym czasie)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.