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ę/zaznaczenie
  • Ctrl+Shift+S — uruchom cały skrypt
  • Alt+- — 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ć:

  1. Testy diagnostycznelmtest, sandwich (już omówione w artykule o regresji)
  2. Dane panelowe — pakiet plm
  3. Szeregi czasowe — pakiet forecast, tseries
  4. Zmienne instrumentalneAER::ivreg()
  5. Machine learning — pakiety caret, tidymodels

Następnie: Python w ekonometrii

📚 Zasoby do nauki
💻 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)