Co pokazuje wykres punktowy
Wykres punktowy pokazuje związek między dwiema zmiennymi liczbowymi: każda obserwacja staje się jednym punktem, umieszczonym według pierwszej wartości na osi poziomej i drugiej wartości na osi pionowej. Jeśli obie zmienne zmieniają się razem, punkty układają się we wzór; jeśli nie, dostajesz bezkształtną chmurę. To standardowe pierwsze spojrzenie przed dopasowaniem jakiegokolwiek modelu, a R rysuje go tą samą funkcją plot(), którą opisuje przewodnik po plot().
Użyjemy mtcars, wbudowanego zbioru danych o 32 samochodach, i zadamy pytanie z fizyki: czy cięższe samochody mają mocniejsze silniki?
Rysowanie wykresu
wt to masa w tysiącach funtów, a hp to moc w koniach mechanicznych:
plot(mtcars$wt, mtcars$hp,
main = "Horsepower vs. weight",
xlab = "Weight (1000 lbs)",
ylab = "Horsepower",
pch = 19,
col = "steelblue")
Obraz: trzydzieści dwa wypełnione punkty wznoszące się od dolnego rogu wykresu (lekkie samochody, około 1.5 na skali masy, w okolicach 60 do 90 koni mechanicznych) w stronę ciężkich samochodów powyżej 5, które przekraczają 200 koni mechanicznych. Wzrost jest nie do przeoczenia, ale nieuporządkowany: przy danej masie punkty rozkładają się na dość szerokim pasie mocy.
Styl to zwykły zestaw narzędzi wykresów bazowych: pch = 19 dla wypełnionych kółek (domyślne puste znikają na zrzutach ekranu), col dla koloru, cex = 1.3, jeśli punkty mają być większe. Żeby pokolorować punkty według trzeciej, kategorycznej zmiennej, zaindeksuj wektor kolorów czynnikiem: col = c("tomato", "steelblue", "darkgreen")[factor(mtcars$cyl)] daje każdej liczbie cylindrów własny kolor.
Odczytywanie: kierunek, siła, kształt
Trzy pytania, po kolei, za każdym razem, gdy patrzysz na wykres punktowy:
- Kierunek. Czy punkty rosną (związek dodatni), czy spadają (ujemny), gdy przesuwasz wzrok wzdłuż osi poziomej? Tutaj rosną: cięższy znaczy mocniejszy. Narysuj zamiast tego
mpgwzględemwt, a chmura opada: cięższy znaczy bardziej paliwożerny. - Siła. Jak ciasno punkty trzymają się jednej ścieżki? Pasek cienki jak ołówek to silny związek; luźny rozprysk to słaby. Ta chmura jest umiarkowanie ciasna.
- Kształt i niespodzianki. Czy ścieżka jest prosta, czy zakrzywiona? Czy są skupiska albo punkty daleko od całej reszty? W
mtcarsMaserati Bora wyraźnie odstaje nad resztą: 335 koni mechanicznych przy przeciętnej masie. Jeden taki punkt potrafi zauważalnie przesunąć dopasowaną linię i właśnie dlatego najpierw patrzysz, a potem dopasowujesz.
Dodawanie linii trendu
Wykres punktowy pokazuje związek; linia przez niego streszcza to twierdzenie. Dopasuj model liniowy i przekaż go od razu do abline():
plot(mtcars$wt, mtcars$hp,
pch = 19, col = "steelblue",
xlab = "Weight (1000 lbs)", ylab = "Horsepower")
abline(lm(hp ~ wt, data = mtcars), col = "tomato", lwd = 2)
lm(hp ~ wt) dopasowuje linię najmniejszych kwadratów (czytaj formułę jako „hp wyjaśniane przez wt”, ze zmienną z osi pionowej przed ~), a abline() rysuje ją na wykresie. Linia rośnie o około 46 koni mechanicznych na tysiąc funtów. Co oznacza ten model i jak czytać jego podsumowanie, opisuje artykuł o regresji liniowej.
Jeśli nie chcesz zakładać linii prostej, lowess() rysuje gładką krzywą, która podąża za danymi, dokądkolwiek idą:
lines(lowess(mtcars$wt, mtcars$hp), col = "darkgreen", lwd = 2, lty = 2)
Gdy krzywa lowess i linia prosta mniej więcej się zgadzają, liniowe podsumowanie jest uczciwe. Gdy krzywa odgina się w bok, związek jest nieliniowy, a linia prosta by go przekłamała.
Sprawdzanie liczb przez cor()
Wykres daje ci kształt; cor() daje siłę związku w postaci jednej liczby. Ten krok to czysty wynik tekstowy, więc uruchom go tutaj:
Masa i moc korelują na poziomie około 0.66: to umiarkowanie ciasna, rosnąca chmura wyrażona liczbą. Macierz dodaje, że mpg koreluje silnie ujemnie z obiema zmiennymi (około −0.87 z masą). Trzymaj się jednak kolejności: najpierw wykres, potem współczynnik. Pojedyncza wartość r może ukryć krzywą albo zostać zawyżona przez jedną obserwację odstającą. Klasyczne sposoby, na jakie wprowadza w błąd, opisuje artykuł o korelacji.
Macierz wykresów punktowych: pairs()
Przy kilku kolumnach liczbowych rysowanie każdej pary ręcznie szybko się nudzi. pairs() robi to jednym wywołaniem:
pairs(mtcars[, c("mpg", "wt", "hp")],
pch = 19, col = "steelblue")
Wynikiem jest siatka 3 × 3: nazwy zmiennych biegną po przekątnej, a każdy panel poza przekątną to wykres punktowy jednej pary: mpg względem wt, mpg względem hp, wt względem hp, każda para dwa razy, z zamienionymi osiami. To najszybszy sposób na wstępną ocenę nowego zbioru danych: jedno spojrzenie pokazuje, które pary są powiązane, które związki się zakrzywiają i gdzie chowają się wartości odstające. Najpierw wybierz podzbiór kolumn, tak jak tutaj: przy więcej niż sześciu czy siedmiu zmiennych panele kurczą się poniżej czytelności.
Wersja w ggplot2
W ggplot2 wykres punktowy z dopasowaną linią to dwie warstwy:
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = hp)) +
geom_point(color = "steelblue", size = 2) +
geom_smooth(method = "lm", color = "tomato") +
labs(title = "Horsepower vs. weight",
x = "Weight (1000 lbs)", y = "Horsepower")
geom_smooth(method = "lm") to abline(lm(...)) z bonusem: zacienionym pasmem ufności wokół linii. Jeśli nie ustawisz method, dopasuje zamiast tego krzywą loess, czyli odpowiednik lowess() w ggplot2. Bazowy R wygrywa szybkością pisania przy szybkim podglądzie; ggplot2 wygrywa w chwili, gdy chcesz pokolorować punkty według grup z automatyczną legendą.
Najważniejsze informacje
plot(x, y)z dwoma wektorami liczbowymi to wykres punktowy;pch = 19i podpisane osie sprawiają, że nadaje się do pokazania.- Odczytaj kierunek, siłę i kształt oraz wypatrz wartości odstające, zanim cokolwiek policzysz.
abline(lm(y ~ x, data = df))dodaje linię regresji;lines(lowess(x, y))dodaje krzywą, która nie zakłada prostoliniowości.cor()wyraża liczbowo to, co pokazuje wykres; wykres pilnuje, żeby liczba była uczciwa.pairs(df[, cols])rysuje naraz wszystkie wykresy punktowe par: to najszybsza wstępna ocena nowego zbioru danych.
Dalej: wykres słupkowy, czyli zostawiamy pary liczb i porównujemy liczebności między kategoriami.
Najczęściej zadawane pytania
Jak zrobić wykres punktowy w R?
Wywołaj plot(x, y) z dwoma wektorami liczbowymi, na przykład plot(mtcars$wt, mtcars$hp). Każda obserwacja staje się jednym punktem. Dodaj pch = 19, żeby punkty były wypełnione, oraz main, xlab, ylab dla podpisów.
Jak dodać linię regresji do wykresu punktowego w R?
Dopasuj model i przekaż go do abline(): abline(lm(hp ~ wt, data = mtcars)) rysuje linię najmniejszych kwadratów na istniejącym wykresie. Zwróć uwagę na kolejność w formule: zmienna z osi pionowej stoi przed ~.
Jak narysować w R wiele par zmiennych naraz?
pairs(df) rysuje macierz wykresów rozrzutu: jeden mały panel dla każdej pary kolumn. Najpierw wybierz podzbiór kolumn, pairs(mtcars[, c("mpg", "wt", "hp")]), bo przy więcej niż sześciu czy siedmiu kolumnach panele robią się za małe, żeby je odczytać.
Co mówi wykres punktowy, czego nie mówi korelacja?
Kształt. Współczynnik korelacji to jedna liczba i może być identyczny dla czystej linii, krzywej albo chmury z jedną skrajną obserwacją odstającą. Wykres punktowy bezpośrednio pokazuje krzywiznę, skupiska i wartości odstające, dlatego najpierw rysujesz wykres, a dopiero potem liczysz cor().