Martyna Pitera 2023-05-30
Na potrzeby projektu użyłam danych pochodzących ze strony Głównego
Urzędu Statystycznego
(https://stat.gov.pl/obszary-tematyczne/inne-opracowania/informacje-o-sytuacji-spoleczno-gospodarczej/biuletyn-statystyczny-nr-32023,4,136.html).
Dane te dotyczą przeciętnego miesięcznego wynagrodzenia brutto w
sektorze przedsiębiorstw. Powodem wyboru takich danych była chęć
porównania wysokości wynagrodzeń w różnych sektorach przedsiębiorstw. W
związku z moim kierunkiem studiów, chciałam poznać średnie wynagrodzenie
w sektorze informacji/komunikacji.
W pobranym pliku .xlsx zaprezentowano średnie wynagrodzenie brutto
ogółem, ale i osobno dla każdego sektora.
Do przeprowadzenia dalszych analiz wybrałam trzy kolumny (cechy):
- dotycząca ogółu wszystkich sektorów,
- dotycząca sektora informacji/komunikacji,
- dotycząca sektora budownictwa.
Dane zostały wczytane przy użyciu pakietu do wczytywania tabeli z pliku Excela. Następnie je uporządkowałam, tzn. usunęłam niepotrzebne wiersze oraz kolumny wypełnione wartościami NULL. Powstałej w ten sposób ramce danych nadałam nowe nazwy wierszy i kolumn.
#install.packages("readxl")
library("readxl")
zarobki <- read_excel("tabl19.xlsx")
zarobki <- as.data.frame(zarobki)
zarobki <- zarobki[-(c(1,2,3,5)),]
Utworzony poniżej wektor colrm zawiera liczby odpowiadające kolumnom, które mają zostać usunięte. Inaczej mówiąc, począwszy od kolumny trzeciej, co druga kolumna aż do dziewięćdziesiątej trzeciej ma zostać usunięta; zawierają one jedynie wartości NULL.
Ramka danych o nazwie “zarobki” zawiera dane na temat wysokości wynagrodzenia dla wszystkich sektorów. Ramka “zarobki1” zawiera tylko interesujące nas kolumny.
colrm <- seq(from = 3, to = 93, by = 2)
colrm <- as.vector(colrm)
zarobki <- zarobki[,-colrm]
zarobki <- zarobki[-1,]
rownames(zarobki) <- seq(from = 1, to = 158, by = 1)
zarobki1 <- zarobki[,c(1,2,45,33)]
zarobki1$rok <- as.integer(substr(zarobki[,1], 1, 4))
colnames(zarobki1) <- c("Okres", "Ogółem", "Informacja/komunikacja", "Budownictwo", "rok")
Po wstępnej obróbce ramka danych zawierająca pożądane dane prezentuje się jak poniżej. Oczywiście zaprezentowałam tylko 10 pierwszych wierszy, ale w ramce danych jest ich znacznie więcej.
zarobki1[1:10,1:4]
## Okres Ogółem Informacja/komunikacja Budownictwo
## 1 2010 M01 3231.13 5932.17 3274.29
## 2 2010 M02 3288.29 6082.19 3222.95
## 3 2010 M03 3493.42 7037.23 3533.39
## 4 2010 M04 3398.67 6096.44 3523.25
## 5 2010 M05 3346.61 6111.69 3465.56
## 6 2010 M06 3403.65 5845.3 3557.29
## 7 2010 M07 3433.32 6054.03 3583.07
## 8 2010 M08 3407.26 6188.29 3651.63
## 9 2010 M09 3403.68 6102.07 3592.8
## 10 2010 M10 3440.22 6181.99 3556.31
Na podstawie ramki danych zarobki1 obliczyłam 8 parametrów statystyki opisowej dla każdej kolumny, w tym: średnią, odchylenie standardowe, medianę, współczynnik zmienności, wariancję, dominantę, kurtozę i skośność. Jednak by takie obliczenia były możliwe, wcześniej użyłam funkcji as.double(), aby nadać wartościom w ramce danych odpowiedni typ (double).
Odchylenie standardowe informuje o tym, jak szeroko wartości danej wielkości są rozrzucone wokół jej średniej. Im mniejsza wartość odchylenia tym obserwacje są bardziej skupione wokół średniej.
Mediana to wartość środkowa w uporządkowanym ciągu liczb. Oznacza to, że 50% danych jest mniejszych lub równych medianie, a 50% danych jest większych lub równych medianie.
Współczynnik zmienności, podobnie jak odchylenie standardowe, należy do
miar rozproszenia, służy więc do badania stopnia zróżnicowania wartości
zmiennej. Wysoka wartość współczynnika oznacza duże zróżnicowanie cechy
i świadczy o niejednorodności badanej populacji. Interpretacja wartości
współczynnika zmienności:
bardzo mała zmienność — poniżej 25 proc.,
przeciętna zmienność — w przedziale od 25 proc. do 45 proc.,
silna zmienność — od 45 proc. do 100 proc.,
bardzo intensywna zmienność — powyżej 100 proc.
Wariancja to średnia arytmetyczna kwadratów odchyleń poszczególnych wartości cechy jednostek zbiorowości od ich wartości średniej (arytmetycznej) – kwadrat odchylenia standardowego.
Dominanta wskazuje, jaka wartość występuje najczęściej w zbiorze wyników.
Skośność – miara symetrii/asymetrii rozkładu. Jeśli rozkład jest idealnie symetryczny, wartość skośności wynosi zero. Z kolei jej wartości ujemne wskazuję na rozkład lewoskośny (wydłużone jest lewe ramię rozkładu), a dodatni na prawoskośny (wydłużone jest prawe ramię rozkładu).
Kurtoza określa intensywność występowania wartości skrajnych, mierzy więc ona, co się dzieje w “ogonach” rozkładu. Wyższa kurtoza wskazuje, że dane mają grubsze ogony lub jest większe prawdopodobieństwo wystąpienia wartości skrajnych. Oznacza to, że istnieje większe prawdopodobieństwo wystąpienia obserwacji oddalonych od średniej.
zarobki1[,2] <- as.double(zarobki1[,2])
zarobki1[,3] <- as.double(zarobki1[,3])
zarobki1[,4] <- as.double(zarobki1[,4])
srednia1 <- mean(zarobki1[,2])
srednia2 <- mean(zarobki1[,3])
srednia3 <- mean(zarobki1[,4])
ochdst1 <- sd(zarobki1[,2])
ochdst2 <- sd(zarobki1[,3])
ochdst3 <- sd(zarobki1[,4])
mediana1 <- quantile(zarobki1[,2])
mediana1 <- mediana1[3]
mediana2 <- quantile(zarobki1[,3])
mediana2 <- mediana2[3]
mediana3 <- quantile(zarobki1[,4])
mediana3 <- mediana3[3]
wsp1 <- ochdst1/srednia1
wsp2<- ochdst2/srednia2
wsp3 <- ochdst3/srednia3
war1 <- var(zarobki1[,2])
war2 <- var(zarobki1[,3])
war3 <- var(zarobki1[,4])
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
dom1 <- getmode(zarobki1[,2])
dom2 <- getmode(zarobki1[,3])
dom3 <- getmode(zarobki1[,4])
Do obliczenia kurtozy i skośności użyłam funkcji kurtosis() i skewness() z biblioteki “moments”.
#install.packages("moments")
library("moments")
k1 <- kurtosis(zarobki1[,2])
k2 <- kurtosis(zarobki1[,3])
k3 <- kurtosis(zarobki1[,4])
sk1 <- skewness(zarobki1[,2])
sk2 <- skewness(zarobki1[,3])
sk3 <- skewness(zarobki1[,4])
Następnie stworzyłam ramkę danych zawierającą obliczone wyżej parametry (param).
param <- data.frame(średnia = c(srednia1, srednia2, srednia3),
`odchylenie standardowe` = c(ochdst1, ochdst2, ochdst3),
mediana = c(mediana1, mediana2, mediana3), `współczynnik zmienności[%]` = c(wsp1,
wsp2, wsp3), wariancja = c(war1, war2, war3), dominanta = c(dom1,
dom2, dom3), kurtoza = c(k1, k2, k3), skośność = c(sk1,
sk2, sk3))
rownames(param) <- c("zarobki ogółem", "informacja/komunikacja",
"budownictwo")
param
## średnia odchylenie.standardowe mediana
## zarobki ogółem 4593.923 978.9531 4298.40
## informacja/komunikacja 7979.005 1583.6595 7550.26
## budownictwo 4553.208 938.0098 4232.66
## współczynnik.zmienności... wariancja dominanta kurtoza
## zarobki ogółem 0.2130974 958349.2 3231.13 2.801419
## informacja/komunikacja 0.1984783 2507977.5 5932.17 2.862943
## budownictwo 0.2060107 879862.3 3274.29 2.505300
## skośność
## zarobki ogółem 0.8283975
## informacja/komunikacja 0.8571349
## budownictwo 0.7569491
Interpretacja wyników na przykładzie kolumny dotyczącej wynagrodzenia w sektorze informacji/komunikacji:
Średnie miesięczne wynagrodzenie w tym sektorze wynosi 7979.005 zł brutto. Odchylenie standardowe przyjmuje większą wartość niż w przypadku dwóch pozostałych obserwacji, zatem wartości wynagrodzenia w sektorze informacji są najmocniej rozrzucone wokół średniej. Wartość środkowa wynosi 7550.26, co oznacza, że połowa wynagrodzeń jest niższa, a druga połowa równa lub wyższa od tej liczby. Współczynnik zmienności dla tego sektora wynosi 0.1984783, czyli mniej niż 25% - wartości zatem wykazują bardzo małą zmienność. Dominanta o wartości 5932.17 wskazuje najczęściej występującą wysokość miesięcznego wynagrodzenia w tym sektorze. Kurtoza wynosząca 2.801419 może wskazywać na grubsze ogony rozkładu. Skośność równa 0.8571349 sugeruje pewną asymetrię w rozkładzie danych.
Patrząc na powyższą tabelę można także wysnuć ciekawy wniosek, że:
a. średnie wynagrodzenie brutto w sektorze budownictwa nie odbiega mocno
od średniego wynagrodzenia dla ogółu sektorów,
b. średnie wynagrodzenie dla sektora informacji/komunikacji znacznie je
przewyższa.
Sporządziłam kilka wykresów, prezentujących dane. Histogram przedstawia liczebność obserwacji w formie przedziału zmiennych. Graficzny rozkład pozwala na stwierdzenie blisko jakich wartości istnieje najwięcej, bądź najmniej wyników. Poniżej znajdują się dwa histogramy, umożliwiające porównanie wynagrodzenia w sektorach informacji i budownictwa z ogólnym wynagrodzeniem.
par(mfrow = c(2, 1))
par(mar = c(0, 5, 3, 3))
hist(zarobki1[, 2], main = "", xlim = c(3000, 13000), ylab = "Ogółem",
xlab = "", ylim = c(0, 50), xaxt = "n", las = 1, col = "slateblue1",
breaks = 10)
par(mar = c(5, 5, 0, 3))
hist(zarobki1[, 3], main = "", xlim = c(3000, 13000), ylab = "informacja/komunikacja",
xlab = "Wysokość wynagrodzenia", ylim = c(50, 0), las = 1,
col = "yellow", breaks = 10)
par(mfrow = c(2, 1))
par(mar = c(0, 5, 3, 3))
hist(zarobki1[, 2], main = "", xlim = c(3000, 10000), ylab = "Ogółem",
xlab = "", ylim = c(0, 60), xaxt = "n", las = 1, col = "slateblue1",
breaks = 10)
par(mar = c(5, 5, 0, 3))
hist(zarobki1[, 4], main = "", xlim = c(3000, 10000), ylab = "budownictwo",
xlab = "Wysokość wynagrodzenia", ylim = c(60, 0), las = 1,
col = "purple", breaks = 10)
Średnie zarobki dla wszystkich cech zostały również zobrazowane na
wykresie pudełkowym. Ten typ wykresu niesie ze sobą sporo różnych
informacji na temat rozkładu mierzonej zmiennej.
Górna linia pozioma wskazuje najwyższą wartość miesięcznego
wynagrodzenia w danym sektorze, z kolei dolna linia pozioma -
najniższą.
Górna ściana “pudełka” to trzeci kwartyl, dolna to pierwszy kwartyl, a
gruba pozioma kreska znajdująca się na “pudełku” to wartość mediany.
boxplot(zarobki1[,2:4],col='pink')
Sporządziłam także wykres dystrybuanty empirycznej wysokości wynagrodzenia (Ogółem). Funkcja ecdf() wyświetla punkty skokowe. Dla “surowych” danych wykres dystrybuanty byłby nieczytelny z powodu bardzo dużej ilości punktów skokowych. Zmniejszyłam ich liczbę poprzez pogrupowanie danych i podział wartości na klasy. W wyniku tego działania otrzymałam wykres dystrybuanty empirycznej nie dla pojedynczych wartości, ale dla jedenastu przedziałów, w których poszczególne wartości się mieszczą. Na osi poziomej znajdują się liczby będące środkami tych przedziałów.
ecdf(zarobki1[, 2])
## Empirical CDF
## Call: ecdf(zarobki1[, 2])
## x[1:158] = 3231.1, 3288.3, 3346.6, ..., 7065.6, 7330
ilosc_klas = 11
klasy = seq(min(zarobki1[, 2]) - 50, max(zarobki1[, 2]), length.out = ilosc_klas +
1)
klasy <- round(klasy, digits = 1)
klasy
## [1] 3181.1 3558.3 3935.5 4312.6 4689.8 5067.0 5444.1 5821.3 6198.5 6575.6
## [11] 6952.8 7330.0
klasy_srodki = round((klasy[-length(klasy)] + klasy[-1])/2, 1)
klasy_srodki
## [1] 3369.7 3746.9 4124.0 4501.2 4878.4 5255.6 5632.7 6009.9 6387.0 6764.2
## [11] 7141.4
cut(zarobki1[, 2], klasy, dig.lab = 10)
## [1] (3181.1,3558.3] (3181.1,3558.3] (3181.1,3558.3] (3181.1,3558.3]
## [5] (3181.1,3558.3] (3181.1,3558.3] (3181.1,3558.3] (3181.1,3558.3]
## [9] (3181.1,3558.3] (3181.1,3558.3] (3181.1,3558.3] (3558.3,3935.5]
## [13] (3181.1,3558.3] (3181.1,3558.3] (3558.3,3935.5] (3558.3,3935.5]
## [17] (3181.1,3558.3] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5]
## [21] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5] (3935.5,4312.6]
## [25] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5]
## [29] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5]
## [33] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5] (3935.5,4312.6]
## [37] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5]
## [41] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5]
## [45] (3558.3,3935.5] (3558.3,3935.5] (3558.3,3935.5] (3935.5,4312.6]
## [49] (3558.3,3935.5] (3558.3,3935.5] (3935.5,4312.6] (3935.5,4312.6]
## [53] (3558.3,3935.5] (3935.5,4312.6] (3935.5,4312.6] (3558.3,3935.5]
## [57] (3558.3,3935.5] (3935.5,4312.6] (3935.5,4312.6] (4312.6,4689.8]
## [61] (3935.5,4312.6] (3935.5,4312.6] (3935.5,4312.6] (3935.5,4312.6]
## [65] (3935.5,4312.6] (3935.5,4312.6] (3935.5,4312.6] (3935.5,4312.6]
## [69] (3935.5,4312.6] (3935.5,4312.6] (3935.5,4312.6] (4312.6,4689.8]
## [73] (3935.5,4312.6] (3935.5,4312.6] (4312.6,4689.8] (4312.6,4689.8]
## [77] (3935.5,4312.6] (3935.5,4312.6] (3935.5,4312.6] (3935.5,4312.6]
## [81] (3935.5,4312.6] (3935.5,4312.6] (4312.6,4689.8] (4312.6,4689.8]
## [85] (3935.5,4312.6] (3935.5,4312.6] (4312.6,4689.8] (4312.6,4689.8]
## [89] (4312.6,4689.8] (4312.6,4689.8] (4312.6,4689.8] (4312.6,4689.8]
## [93] (4312.6,4689.8] (4312.6,4689.8] (4312.6,4689.8] (4689.8,5067]
## [97] (4312.6,4689.8] (4312.6,4689.8] (4689.8,5067] (4689.8,5067]
## [101] (4689.8,5067] (4689.8,5067] (4689.8,5067] (4689.8,5067]
## [105] (4689.8,5067] (4689.8,5067] (4689.8,5067] (5067,5444.1]
## [109] (4689.8,5067] (4689.8,5067] (5067,5444.1] (5067,5444.1]
## [113] (4689.8,5067] (5067,5444.1] (5067,5444.1] (5067,5444.1]
## [117] (5067,5444.1] (5067,5444.1] (5067,5444.1] (5444.1,5821.3]
## [121] (5067,5444.1] (5067,5444.1] (5444.1,5821.3] (5067,5444.1]
## [125] (5067,5444.1] (5067,5444.1] (5067,5444.1] (5067,5444.1]
## [129] (5067,5444.1] (5444.1,5821.3] (5444.1,5821.3] (5821.3,6198.5]
## [133] (5444.1,5821.3] (5444.1,5821.3] (5821.3,6198.5] (5444.1,5821.3]
## [137] (5444.1,5821.3] (5444.1,5821.3] (5821.3,6198.5] (5821.3,6198.5]
## [141] (5821.3,6198.5] (5821.3,6198.5] (5821.3,6198.5] (6575.6,6952.8]
## [145] (5821.3,6198.5] (6198.5,6575.6] (6575.6,6952.8] (6575.6,6952.8]
## [149] (6198.5,6575.6] (6198.5,6575.6] (6575.6,6952.8] (6575.6,6952.8]
## [153] (6575.6,6952.8] (6575.6,6952.8] (6575.6,6952.8] (6952.8,7330]
## [157] (6575.6,6952.8] (6952.8,7330]
## 11 Levels: (3181.1,3558.3] (3558.3,3935.5] (3935.5,4312.6] ... (6952.8,7330]
przedzialy <- table(cut(zarobki1[, 2], klasy, dig.lab = 10))
przedzialy
##
## (3181.1,3558.3] (3558.3,3935.5] (3935.5,4312.6] (4312.6,4689.8] (4689.8,5067]
## 14 36 30 17 13
## (5067,5444.1] (5444.1,5821.3] (5821.3,6198.5] (6198.5,6575.6] (6575.6,6952.8]
## 17 9 8 3 9
## (6952.8,7330]
## 2
ecdf(cut(zarobki1[, 2], klasy, dig.lab = 10))
## Empirical CDF
## Call: ecdf(cut(zarobki1[, 2], klasy, dig.lab = 10))
## x[1:11] = 1, 2, 3, ..., 10, 11
ecdf(cut(zarobki1[, 2], klasy, dig.lab = 10))(1:ilosc_klas)
## [1] 0.08860759 0.31645570 0.50632911 0.61392405 0.69620253 0.80379747
## [7] 0.86075949 0.91139241 0.93037975 0.98734177 1.00000000
srodki_czestosci <- data.frame(`środki klas` = klasy_srodki,
`częstości skumulowane` = ecdf(cut(zarobki1[, 2], klasy,
dig.lab = 10))(1:ilosc_klas))
srodki_czestosci
## środki.klas częstości.skumulowane
## 1 3369.7 0.08860759
## 2 3746.9 0.31645570
## 3 4124.0 0.50632911
## 4 4501.2 0.61392405
## 5 4878.4 0.69620253
## 6 5255.6 0.80379747
## 7 5632.7 0.86075949
## 8 6009.9 0.91139241
## 9 6387.0 0.93037975
## 10 6764.2 0.98734177
## 11 7141.4 1.00000000
plot(ecdf(cut(zarobki1[, 2], klasy, dig.lab = 10)), col = "orange",
col.lab = "red", col.main = "red", xlab = "Miesięczne wynagrodzenie",
ylab = "Łączna częstość", main = "Dystrybuanta wysokości miesięcznego wynagrodzenia (ogółem)",
lwd = 2, xaxt = "n", las = 1)
axis(side = 1, at = 1:ilosc_klas, labels = klasy_srodki)
Kolejnym sporządzonym przeze mnie wykresem jest interaktywny wykres prezentujący zmiany średnich zarobków na przestrzeni lat. Po najechaniu myszką na wykres, pojawiają się szczegółowe informacje. Do stworzenia tego wykresu użyłam pakietów dplyr, tidyverse oraz plotly.
#install.packages("dplyr") #bez tego pakietu funkcja %>% nie działa
#install.packages("tidyverse")
#installed.packages("plotly")
library(dplyr)
library(tidyverse)
library(plotly)
p <- (zarobki1) %>%
group_by(rok) %>%
mutate(srednia = mean(as.numeric(Ogółem), na.rm = T)) %>%
slice(1) %>%
ungroup() %>%
ggplot(aes(x = rok)) +
geom_point(aes(y = srednia), color="#FCB13B") +
geom_line(aes(y = srednia), color="#FCB13B") +
theme(axis.text.x = element_text(angle = 0, vjust = 0.5, hjust=1)) +
ggtitle("Średnie miesięczne wynagrodzenie brutto na przestrzeni lat 2010-2023") +
labs(x="Rok", y="Wynagrodzenie")
#ggplotly(p)
plot(p)
Powyższy wykres świadczy o tym, że na przełomie ostatnich lat wysokość przeciętnego miesięcznego wynagrodzenia stale wzrastała.
Przy użyciu funkcji t.test, var.test oraz cor.test zweryfikowałam trzy typy hipotez statystycznych.
Wynik testu t dla jednej próby służy do porównania średniej danej próby z pewną wartością oczekiwaną.
H0: Średnia wysokość miesięcznego wynagrodzenia (Ogółem) wynosi 4500
H1: Średnia wysokość miesięcznego wynagrodzenia (Ogółem) nie wynosi
4500
t.test(zarobki1[,2], mu=4500)
##
## One Sample t-test
##
## data: zarobki1[, 2]
## t = 1.206, df = 157, p-value = 0.2296
## alternative hypothesis: true mean is not equal to 4500
## 95 percent confidence interval:
## 4440.092 4747.753
## sample estimates:
## mean of x
## 4593.923
Ponieważ p-value > 1-0.95(confidence_level), nie ma podstaw do odrzucenia H0.
H0: Średnia wysokość wynagrodzenia (Ogółem) wynosi 3000
H1: Średnia wysokość wynagrodzenia (Ogółem) jest większa niż 3000
t.test(zarobki1[,2], mu=3000, alternative="greater")
##
## One Sample t-test
##
## data: zarobki1[, 2]
## t = 20.466, df = 157, p-value < 2.2e-16
## alternative hypothesis: true mean is greater than 3000
## 95 percent confidence interval:
## 4465.059 Inf
## sample estimates:
## mean of x
## 4593.923
Ponieważ p-value < 2.2e-16, zatem zachodzi także p-value <
1-0.95(confidence_level).
Odrzucamy hipotezę H0 na rzecz hipotezy alternatywnej H1.
Kolejnym przeprowadzonym testem jest test F, służący do porównania dwóch wariancji.
H0: Stosunek wariancji przeciętnego miesięcznego wynagrodzenia brutto
Ogółem i w sektorze budownictwa wynosi 1
H1: Stosunek wariancji przeciętnego miesięcznego wynagrodzenia brutto
Ogółem i w sektorze budownictwa nie wynosi 1
var.test(zarobki1[,2], zarobki1[,4])
##
## F test to compare two variances
##
## data: zarobki1[, 2] and zarobki1[, 4]
## F = 1.0892, num df = 157, denom df = 157, p-value = 0.5931
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.7956973 1.4909745
## sample estimates:
## ratio of variances
## 1.089204
Ponieważ p-value > 1-0.95(confidence_level), nie ma podstaw do odrzucenia H0, co oznacza, że nie ma istotnych statystycznie różnic między wariancjami dwóch grup.
Trzecim przeprowadzonym testem jest test korelacji Pearsona.
H0: Korelacja pomiędzy wysokościami miesięcznego wynagrodzenia dla
sektorów informacji/komunikacji i budownictwa wynosi 0.
H1: Korelacja pomiędzy wysokościami miesięcznego wynagrodzenia dla
sektorów informacji/komunikacji i budownictwa nie wynosi 0.
cor.test(zarobki1[,3], zarobki1[,4])
##
## Pearson's product-moment correlation
##
## data: zarobki1[, 3] and zarobki1[, 4]
## t = 51.234, df = 156, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9612221 0.9791524
## sample estimates:
## cor
## 0.9715472
Wynik testu korelacji Pearsona wskazuje na bardzo silny i statystycznie
istotny dodatni związek między tymi kolumnami.
Ponieważ p-value < 2.2e-16, a zatem także p-value < 0.05, to odrzucamy
H0 na korzyść H1.
Biblioteka: readxl
Opis: Udostępnia funkcje do odczytu danych z plików Excel (.xls, .xlsx)
do ramki danych w R.
Biblioteka: moments
Opis: Zapewnia narzędzia do analizy statystycznej i obliczania miar
statystycznych, takich jak kurtoza, skośność itp.
Biblioteka: dplyr
Opis: Udostępnia zestaw funkcji do przetwarzania danych w sposób
logiczny i konkretny, np. filtrowanie, sortowanie, grupowanie, łączenie
itp. Bez tego pakietu “%>%” nie zadziała.
Biblioteka: tidyverse
Opis: Zbiór pakietów, w tym dplyr, ggplot2, tidyr itp., które ułatwiają
przetwarzanie, analizę i wizualizację danych.
Biblioteka: plotly
Opis: Zapewnia narzędzia do tworzenia interaktywnych wykresów, które
można eksplorować i dostosowywać w przeglądarce.
Biblioteka: stats
Opis: Zawiera funkcje statystyczne i probabilistyczne, umożliwiające
analizę danych, testowanie hipotez, estymację parametrów, generowanie
losowych liczb oraz wiele innych operacji związanych z analizą
statystyczną.
getwd()
Biblioteka: base
Opis: Zwraca bieżący katalog roboczy.
setwd()
Biblioteka: base
Opis: Ustawia bieżący katalog roboczy na podany ścieżkę.
read_excel()
Biblioteka: readxl
Opis: Wczytuje dane z pliku Excela do ramki danych.
str()
Biblioteka: base
Opis: Wyświetla podsumowanie struktury obiektu.
as.data.frame()
Biblioteka: base
Opis: Konwertuje obiekt na ramkę danych.
seq()
Biblioteka: base
Opis: Generuje sekwencję liczb.
as.vector()
Biblioteka: base
Opis: Konwertuje obiekt na wektor.
rownames()
Biblioteka: base
Opis: Ustawia lub zwraca nazwy wierszy ramki danych.
substr()
Biblioteka: base
Opis: Wybiera podciąg znaków na podstawie określonej pozycji początkowej
i końcowej.
as.integer()
Biblioteka: base
Opis: Konwertuje obiekt na typ całkowitoliczbowy.
colnames()
Biblioteka: base
Opis: Ustawia lub zwraca nazwy kolumn ramki danych.
as.double()
Biblioteka: base
Opis: Konwertuje obiekt na liczbę zmiennoprzecinkową.
mean()
Biblioteka: base
Opis: Oblicza średnią wartość z wektora.
sd()
Biblioteka: base
Opis: Oblicza odchylenie standardowe z wektora.
quantile()
Biblioteka: base
Opis: Oblicza kwantyle (np. medianę) z wektora.
var()
Biblioteka: base
Opis: Oblicza wariancję z wektora.
getmode()
Biblioteka: własna definicja funkcji
Opis: Oblicza dominanę z wektora.
kurtosis()
Biblioteka: moments
Opis: Oblicza kurtozę (miarę ogona rozkładu) z wektora.
skewness()
Biblioteka: moments
Opis: Oblicza skośność (miarę asymetrii rozkładu) z wektora.
data.frame()
Biblioteka: base
Opis: Tworzy ramkę danych z podanych wektorów lub kolumn.
par()
Biblioteka: base
Opis: Ustawia parametry dla wykresów i innych elementów graficznych.
Dzięki niej można na jednym obrazku umieścić kilka wykresów
jednocześnie.
hist()
Biblioteka: base
Opis: Tworzy histogram na podstawie podanych danych.
boxplot()
Biblioteka: base
Opis: Tworzy wykres pudełkowy (boxplot) na podstawie podanych danych.
ecdf()
Biblioteka: base
Opis: Oblicza funkcję dystrybuanty empirycznej dla podanych danych.
round()
Biblioteka: base
Opis: Zaokrągla liczby do określonej liczby miejsc po przecinku lub do
najbliższej wartości całkowitej.
cut()
Biblioteka: base
Opis: Dzieli dane na przedziały (klasy) na podstawie podanych punktów
odcięcia.
table()
Biblioteka: base
Opis: Tworzy tabelę częstości dla podanych danych.
plot()
Biblioteka: base
Opis: Tworzy wykres na podstawie podanych danych.
mutate()
Biblioteka: dplyr
Opis: Tworzy nowe zmienne lub modyfikuje istniejące w ramce danych na
podstawie obliczeń lub transformacji.
slice()
Biblioteka: dplyr
Opis: Wybiera wiersze na podstawie ich pozycji lub warunków.
ungroup()
Biblioteka: dplyr
Opis: Usuwa grupowanie z ramki danych, przywracając oryginalną
strukturę.
ggplot()
Biblioteka: ggplot2
Opis: Tworzy obiekt wykresu ggplot, który może być dalej modyfikowany
przez dodawanie warstw i ustawianie parametrów.
geom_point() Biblioteka: ggplot2 Opis: Dodaje punkty do wykresu na podstawie danych.
geom_line()
Biblioteka: ggplot2
Opis: Dodaje linie do wykresu na podstawie danych.
theme()
Biblioteka: ggplot2
Opis: Ustawia różne aspekty wyglądu wykresu, takie jak osie, tytuły
itp.
ggtitle()
Biblioteka: ggplot2
Opis: Ustawia tytuł wykresu.
labs()
Biblioteka: ggplot2
Opis: Ustawia etykiety osi na wykresie.
ggplotly()
Biblioteka: plotly
Opis: Konwertuje wykres ggplot na interaktywną wersję plotly.
t.test()
Biblioteka: stats
Opis: Wykonuje test t-studenta w celu weryfikacji hipotezy dotyczącej
średniej populacji.
var.test()
Biblioteka: stats
Opis: Wykonuje test na równość wariancji między dwiema próbkami.
cor.test()
Biblioteka: stats
Opis: Wykonuje test korelacji między dwiema zmiennymi.