Uzyskanie lepszego wyglądu dzięki szczegółowym wykresom punktowym

Teraz, gdy wiemy, jak uzyskać ogólny obraz wykresów rozrzutu, aby uzyskać ogólny sens relacji między zmiennymi, jak możemy uzyskać bardziej szczegółowe spojrzenie na każdy wykres punktowy? Cóż, cieszę się, że zapytałeś! Aby to osiągnąć, zrobimy to w dwóch krokach. Najpierw będziemy pracować nad stworzeniem pojedynczego, szczegółowego wykresu punktowego, z którego jesteśmy zadowoleni. Po drugie, opracujemy prosty algorytm, który przejdzie przez wszystkie kombinacje zmiennych i utworzy odpowiedni wykres dla każdej z nich:

Wykres pokazany powyżej przedstawia nasz prototypowy wykres punktowy. Ma kombinację zmiennych w osiach x i y, NoQuals i AdultMeanAge w naszym przypadku przypisuje kolor zgodnie z odpowiednim Proportion i umieszcza na górze linię odpowiadającą regresji liniowej, aby uzyskać ogólny obraz relacji między zmiennymi na osiach. Porównaj ten wykres z lewym wykresem punktowym z poprzedniej pary wykresów punktowych. To ta sama fabuła, ale ta jest bardziej szczegółowa i zawiera więcej informacji. Ta fabuła wydaje się na razie wystarczająco dobra.

plot ,- ggplot(data, aes(x = NoQuals, y = AdultMeanAge, color = Proportion))

plot <- plot + stat_smooth(method = „lm”, col = „darkgrey”,  se= FALSE)

plot <- plot + scale_color_viridis()

plot <- plot  + geom_point()

print(plot)

Teraz musimy opracować algorytm, który weźmie wszystkie kombinacje zmiennych i utworzy odpowiednie wykresy. Przedstawiamy pełny algorytm i wyjaśniamy część po części. Jak widać, zaczynamy definiować funkcję create_graphs_iteratively, która otrzymuje dwa parametry: data i plot_function. Algorytm pobierze nazwy zmiennych dla danych i zapisze je w zmiennych vars. Następnie usunie Proportio z takich zmiennych, ponieważ będą one używane do tworzenia kombinacji dla osi, a Proportio nigdy nie zostanie użyte na osi; będzie używany wyłącznie do kolorów. Teraz, jeśli wyobrazimy sobie wszystkie kombinacje zmiennych w macierzy, takiej jak ta dla wykresu punktowego macierzy pokazanego wcześniej, to musimy przejść przez górny lub dolny trójkąt, aby uzyskać wszystkie możliwe kombinacje (w rzeczywistości górny i dolny trójkąt z macierze wykresów punktowych są symetryczne, ponieważ przekazują te same informacje). Aby przejść przez te trójkąty, możemy użyć znanego wzoru, który wykorzystuje dwie pętle for, każda dla jednej osi, i gdzie wewnętrzna pętla musi zaczynać się tylko w miejscu zewnętrznej pętli (to tworzy trójkąt). -1 i +1 są po to, aby upewnić się, że zaczynamy i kończymy w odpowiednich miejscach w każdej pętli bez otrzymania błędu dotyczącego granic tablicy. Wewnątrz pętli wewnętrznej utworzymy nazwę wykresu jako kombinację nazw zmiennych i połączymy je za pomocą funkcji paste(), a także utworzymy wykres za pomocą plot_fuction wyślemy jako parametr (więcej na ten temat w dalszej części). Funkcje pg() i dev.off() służą do zapisywania wykresów na dysku twardym komputera. Pomyśl o funkcji png() jako miejscu, w którym R zaczyna szukać wykresu, a dev.off() jako miejscu, w którym zatrzymuje proces zapisywania. Zapraszam do zajrzenia do ich dokumentacji lub poczytać więcej o urządzeniach w R.

create_plots+iteratively <- function(data, plot_function) {

vars <- colnames(data)

vars <- vars(!which(vars ==”Proportion”))

for (i in 1 : (length(vars) – 1 )) {

for (j in (i + 1) : length (vars) ) {

save_to <- paste(vars[i], „ _ „ , vars[j], „.png”, sep = „ „)

plot_function(data, vars[i[, vars[j], save_to)

}

}

}

Prawie skończyliśmy; musimy tylko opakować kod, którego użyliśmy do przekształcenia naszego prototypu wykresu w funkcję i wszystko będzie gotowe. Jak widać, wyodrębniliśmy parametry x, y i color dla funkcji aes() jako zmienne, które są wysyłane jako parametry do funkcji (nazywa się to argumentami parametryzującymi), a zmieniliśmy funkcję aes()z funkcją aes_string(), która może otrzymywać zmienne z łańcuchami parametrów. Dodaliśmy również opcję wysyłania var_color jako FALSE, aby uniknąć używania kolorowej wersji wykresu. Wszystko inne jest takie samo:

prototype_scatter_plot <- function(data, var_x, var_y, var_color = „Proportion”, save_to = „ „ ) {

if (is.na(as.logical(var_color))) {

plot <- ggplot(data, aes_string(x = var_x, y = var_y, color = var_color))

} else{

plot <- ggplot(data, aes_string(x = var_x, y = var_y))

}

plot <- plot + stat_smooth (method = „lm”, col = „darkgrey”, se = FALSE)

plot <- plot + scale_color_viridis()

plot <- plot + geom_point()

if (not_empty(save_to)) png(save_to)

print(plot)

if (not_empty(save_to)) dev.off

}

Ponieważ będziemy sprawdzać w różnych miejscach, czy łańcuch save_to jest pusty, nazywamy czek i zawijamy go w funkcję not_empty(). Teraz trochę łatwiej jest czytać nasz kod.

not_empty <- function(file) {

return(file != „”)

}

Dzięki tej funkcji protoype_scatter_plot() możemy dość łatwo odtworzyć prawidłowe wykresy rozrzutu pokazane wcześniej, a także dowolną inną kombinację zmiennych . Wydaje się to dość potężne, prawda?

Spójrzmy na następujący kod:

protoype_scatter_plot(data, „L4Quals_plus”, „AdultMeanAge”

Teraz, gdy wykonaliśmy ciężką pracę, możemy dość łatwo stworzyć wszystkie możliwe kombinacje. Musimy tylko wywołać funkcję create_plots_iteratively z naszymi danymi i funkcja prototype_scatter_plot(). Używanie funkcji jako parametrów dla innych funkcji jest znane jako wzorzec strategii. Nazwa wzięła się stąd, że możemy łatwo zmienić naszą strategię tworzenia wykresów dla każdego innego, który chcemy, a który otrzymuje te same parametry (data, var_x i var_y), aby tworzyć wykresy, bez konieczności zmiany naszego algorytmu, aby przechodzić przez kombinacje zmiennych. Ten rodzaj elastyczności jest bardzo potężny:

create_plots_iteratively(data, prototype_scatter_plot)

Spowoduje to utworzenie dla nas wszystkich działek i zapisanie ich na naszym dysku twardym. Całkiem fajnie, co? Teraz możemy spojrzeć na każdy z nich niezależnie i zrobić z nimi wszystko, co potrzebujemy, ponieważ mamy je już jako pliki PNG.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *