R w ekonometrii — od instalacji do modelu
Streszczenie
Kompletny przewodnik po R: instalacja, podstawy języka, wczytywanie danych, wizualizacje i modele ekonometryczne
Zalety języka R
R to język programowania stworzony przez statystyków dla statystyków. W ekonometrii jest to pierwszy wybór z kilku powodów:
- Darmowy i open-source — pełna wersja bez opłat
- Tysiące pakietów — każda metoda ekonometryczna jest zaimplementowana
- Aktywna społeczność — Stack Overflow, CRAN, GitHub
- Reprodukowalność — skrypty dokumentują każdy krok analizy
- Wizualizacje — ggplot2 to jeden z najlepszych systemów wykresów
Instalacja
1. Zainstaluj R
Pobierz z https://cran.r-project.org/ — wybierz swój system operacyjny.
2. Zainstaluj RStudio
RStudio to IDE (środowisko programistyczne) które znacznie ułatwia pracę z R.
Pobierz z https://www.rstudio.com/ — darmowa wersja Desktop wystarczy.
3. Układ RStudio
+---------------------------+---------------------------+
| Edytor skryptów (.R) | Środowisko (zmienne) |
| piszesz kod tutaj | History |
+---------------------------+---------------------------+
| Konsola R | Pliki / Wykresy / Pomoc |
| wyniki pojawiają się tu | |
+---------------------------+---------------------------+
Skróty klawiszowe:
Ctrl+Enter— uruchom linię/zaznaczenieCtrl+Shift+S— uruchom cały skryptAlt+-— operator przypisania<-Ctrl+Shift+M— pipe operator|>(lub%>%)
Podstawy języka R
Typy danych
# Liczby
x <- 3.14
n <- 42L # integer (liczba całkowita)
# Tekst
imie <- "Jan"
paste("Witaj", imie) # "Witaj Jan"
# Logiczne
prawda <- TRUE
falsz <- FALSE
# Brakujące wartości
brak <- NA
is.na(brak) # TRUE
# Sprawdź typ
class(x) # "numeric"
typeof(n) # "integer"
Wektory — podstawowa struktura
# Tworzenie
x <- c(1, 2, 3, 4, 5)
y <- 1:10 # sekwencja 1 do 10
z <- seq(0, 1, by = 0.1) # sekwencja co 0.1
# Operacje wektorowe (na każdym elemencie!)
x * 2 # c(2, 4, 6, 8, 10)
x + y[1:5] # dodawanie
log(x) # logarytm każdego elementu
sum(x); mean(x); sd(x); var(x)
# Indeksowanie
x[1] # pierwszy element (R zaczyna od 1!)
x[c(1, 3, 5)] # elementy 1, 3, 5
x[x > 3] # elementy większe od 3
Ramka danych (data.frame)
# Tworzenie
dane <- data.frame(
imie = c("Anna", "Jan", "Maria"),
wiek = c(25, 30, 28),
dochod = c(4500, 6000, 5200)
)
# Podgląd
head(dane) # pierwsze 6 wierszy
str(dane) # struktura
summary(dane) # statystyki opisowe
dim(dane) # wymiary: wiersze, kolumny
# Dostęp do kolumn
dane$dochod
dane[["wiek"]]
dane[, "imie"]
# Filtrowanie
bogatsi <- dane[dane$dochod > 5000, ]
Wczytywanie danych
Z pliku CSV
# Podstawowe wczytywanie
dane <- read.csv("dane.csv", header = TRUE, sep = ",")
# Przez tidyverse (szybsze, lepsze typy)
library(readr)
dane <- read_csv("dane.csv")
# Z encoding dla polskich znaków
dane <- read.csv("dane.csv", fileEncoding = "UTF-8")
# lub
dane <- read.csv("dane.csv", fileEncoding = "Windows-1250")
Z Excela
library(readxl)
dane <- read_excel("dane.xlsx", sheet = "Arkusz1")
Wbudowane zestawy danych
# R ma wbudowane zestawy danych do nauki
data() # lista dostępnych
data(mtcars) # samochody: mpg, waga, moc
data(iris) # kwiaty: cechy + gatunek
# Z pakietu AER (ekonometryczne)
library(AER)
data(CPS1985) # Current Population Survey 1985 — płace
data(Fatalities) # wypadki drogowe i alkohol — panel
Manipulacja danych z tidyverse
library(dplyr)
library(tidyr)
# Pipe operator |> (lub %>% z magrittr)
wynik <- dane |>
filter(dochod > 3000) |> # filtruj wiersze
select(imie, dochod, wiek) |> # wybierz kolumny
mutate(ln_dochod = log(dochod), # nowe kolumny
wiek_kw = wiek^2) |>
arrange(desc(dochod)) |> # sortuj malejąco
summarise(sredni_dochod = mean(dochod),
n = n()) # podsumuj
# Grupowanie
dane |>
group_by(region) |>
summarise(srednia_placa = mean(placa),
n = n())
Wizualizacje z ggplot2
library(ggplot2)
# Scatter plot z linią regresji
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point(color = "steelblue", size = 2) +
geom_smooth(method = "lm", se = TRUE, color = "red") +
labs(title = "Masa vs. spalanie",
x = "Masa (1000 lbs)",
y = "Spalanie (mpg)") +
theme_minimal()
# Histogram
ggplot(CPS1985, aes(x = wage)) +
geom_histogram(bins = 30, fill = "steelblue", color = "white") +
geom_vline(xintercept = mean(CPS1985$wage), color = "red", lty = 2) +
labs(title = "Rozkład płac", x = "Płaca ($/godz.)")
# Boxplot według grupy
ggplot(CPS1985, aes(x = gender, y = wage, fill = gender)) +
geom_boxplot() +
labs(title = "Płace według płci")
Regresja w R
library(AER)
data(CPS1985)
# Prosta regresja
model1 <- lm(log(wage) ~ education, data = CPS1985)
summary(model1)
# Regresja wieloraka
model2 <- lm(log(wage) ~ education + experience + I(experience^2) +
gender + ethnicity, data = CPS1985)
summary(model2)
# Co zwraca summary?
# - Współczynniki (Estimate)
# - Błędy standardowe (Std. Error)
# - Statystyki t (t value)
# - P-wartości (Pr(>|t|))
# - R^2 i R^2 adj.
# - Statystyka F dla całego modelu
Interpretacja output
Call:
lm(formula = log(wage) ~ education + experience, data = CPS1985)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.83568 0.09703 8.612 < 2e-16 ***
education 0.09043 0.00697 12.976 < 2e-16 ***
experience 0.01352 0.00336 4.024 6.15e-05 ***
Residual standard error: 0.4429 on 531 degrees of freedom
Multiple R-squared: 0.2641
F-statistic: 95.27 on 2 and 531 DF, p-value: < 2.2e-16
education: 1 rok edukacji → 9.0% wyższy dochód (log-liniowe!)- Trzy gwiazdki
***= istotne na poziomie 0.001
Tabele wynikowe z stargazer
library(stargazer)
# Tabela do konsoli
stargazer(model1, model2, type = "text")
# Tabela HTML (do raportu)
stargazer(model1, model2, type = "html", out = "wyniki.html")
# Tabela LaTeX
stargazer(model1, model2, type = "latex",
title = "Regresja płac na edukację",
dep.var.labels = "log(płaca)",
covariate.labels = c("Edukacja", "Doświadczenie",
"Dośw. kwadrat", "Płeć: kobieta"),
out = "wyniki.tex")
Następne kroki
Po opanowaniu podstaw warto poznać:
- Testy diagnostyczne —
lmtest,sandwich(już omówione w artykule o regresji) - Dane panelowe — pakiet
plm - Szeregi czasowe — pakiet
forecast,tseries - Zmienne instrumentalne —
AER::ivreg() - Machine learning — pakiety
caret,tidymodels
Następnie: Python w ekonometrii
📚 Zasoby do nauki
- R Project — oficjalna strona
- RStudio Desktop
- Podręcznik: Healy, Data Visualization: A Practical Introduction (darmowy online)
- YouTube: Econometrics Academy — R Tutorial
- swirl — interaktywne kursy R bezpośrednio w R
💻 Kod źródłowy
Instalacja pakietów:
# Podstawowe pakiety ekonometryczne
install.packages(c(
"tidyverse", # manipulacja danych + ggplot2
"lmtest", # testy dla regresji
"sandwich", # odporne błędy standardowe
"AER", # Applied Econometrics with R
"plm", # dane panelowe
"forecast", # szeregi czasowe
"stargazer", # tabele wynikowe LaTeX/HTML
"ggplot2", # wizualizacje
"car" # companion to applied regression
))
# Wczytaj pakiet
library(tidyverse)
library(lmtest)