International økonomi
  • Software
    • Download R
    • Download RStudio
Handelsteori

Stordriftsfordele og ny handelsteori

Analytisk øvelse
Stordriftsfordele og ny handelsteori
Udgivet

19. marts 2026

Kodelinks
R kode

Denne øvelse tager udgangspunkt i kapitel 8, og teorien om stordriftsfordele og nyere handelsteori. Målet er at opbygge en færdig model til at analysere, hvordan handel mellem to lande påvirker produktionen og priserne, når der er stigende skalaafkast og monopolistisk konkurrence. Hvad er ligevægten i forhold til antallet af firmaer, priser og produktion pr. firma, når der ikke er handel? Og hvordan ændrer det sig, når de to lande åbner for handel?

Scenariet

Antag, at der er to lande, Dasadi og Jardonike, som begge producerer sneakers. Indtil nu, har der ikke været nogen handel mellem de to lande, og begge lande har produceret sneakers til deres eget forbrug.

Produktionen af sneakers karakteriseres ved både stordriftsfordele på firmaniveauet og monopolistisk konkurrence. Det vil sige, at der er flere firmaer i de to lande, som producerer hver deres egne unikke sneakers.

Navnene på de to lande er fiktive, og har selvfølgelig ingen relation til fx store multinationale virksomheder, der producerer sneakers i virkeligheden. 🤥

Parametre

Vi antager, at de to lande har samme efterspørgselsforhold og samme omkostningsstruktur. Den eneste forskel er markedsstørrelsen \(S\). Tolk \(S\) som det samlede årlige marked for sneakers i hvert land.

I modellen antager vi derfor:

  • samme faste omkostning: \(F\)
  • samme marginalomkostning: \(c\)
  • samme elasticitetsparameter: \(b\)
  • forskellig markedsstørrelse: \(S_{\text{Dasadi}} < S_{\text{Jardonike}}\)

Tallene nedenfor er valgt, så de giver (nogenlunde) plausible ligevægtspriser og et overskueligt antal firmaer i hvert marked.

library(tidyverse)

# Fælles parametre
b <- 1/1000
F <- 500000
c <- 30

# Markedsstørrelse (årligt antal solgte sneakers)
S_dasadi <- 50000
S_jardonike <- 84500
S_trade <- S_dasadi + S_jardonike

Funktioner

Vi skal tegne to figurer for hvert land:

  1. Det enkelte firmas ligevægt i forhold til pris/omkostninger og produktionen.
  2. Markedsligevægten i forhold til pris/omkostninger og antallet af firmaer.

For at gøre det nemmere, definerer vi først en række funktioner, som vi kan bruge til at beregne priser, marginalomkostninger, gennemsnitsomkostninger og så videre. p og mr er henholdsvis de inverse efterspørgsels- og marginalrevenue-funktioner for det enkelte firma (dvs. \(P(Q)\) og \(\text{MR}(Q)\)), men som tager skæringspunktet og hældningen fra den oprindelige efterspørgselsfunktion \(Q(P)\). AC og mc er hhv. gennemsnitsomkostninger og marginalomkostninger. Vi definerer en konstant marginalomkostning, ved at sætte den samme værdi for c for hver q. Til sidst har vi funktioner for både CC- og PP-kurverne, som vi bruger til at finde markedsligevægten.

p <- function(q, yintercept, dx) yintercept/dx - (q/dx)
mr <- function(q, yintercept, dx) yintercept/dx - ((q/dx) * 2)
AC <- function(q, F=F, c=c) F/q + c
mc <- function(q, c=c) rep(c, length(q))
cc <- function(n, S=S, F=F, c=c) n * F / S + c
pp <- function(n, b=b, c=c) c + 1/(b * n)

Vi kan desuden definere hjælpefunktioner til at beregne ligevægten og tegne figurerne for det enkelte firma og markedet i hvert land. equilibrium_values beregner ligevægtsværdierne for antallet af firmaer, prisen, produktionen pr. firma og gennemsnitsomkostningerne i ligevægt, givet markedsstørrelsen \(S\), hvor resultaterne gemmes i et tibble (dataframe). firm tegner det enkelte firmas ligevægt, og mkt_eq tegner markedsligevægten mellem CC- og PP-kurverne.

equilibrium_values <- function(S, F = F, c = c, b = b) {
  ne <- sqrt(S / (b * F))
  Pe <- c + sqrt(F / (S * b))
  qe <- S / ne

  tibble(
    S = S,
    n = ne,
    P = Pe,
    q = qe,
    AC = c + (F / qe)
  )
}

firm <- function(S, F = F, c = c, title = NULL) {
  ne <- sqrt(S / (b * F))
  Pe <- c + sqrt(F / (S * b))
  qe <- S / ne

  intercept <- (S / ne + b * S * Pe)
  slope <- b * S
  pmax <- round(2 * Pe)
  q <- seq(1, S)

  df <- tibble(
    q = q,
    demand = p(q, yintercept=intercept, dx=slope),
    mr = mr(q, yintercept=intercept, dx=slope),
    mc = mc(q, c = c),
    AC = AC(q, F = F, c = c)
  ) |>
    filter(demand >= 0) |>
    mutate(AC = ifelse(is.infinite(AC), NA_real_, AC))

  ggplot(df, aes(x = q)) +
    geom_line(aes(y = demand, colour = "D"), linewidth = 1) +
    geom_line(aes(y = mr, colour = "MR"), linewidth = 1) +
    geom_line(aes(y = mc, colour = "MC"), linewidth = 1) +
    geom_line(aes(y = AC, colour = "AC"), linewidth = 1) +
    geom_vline(xintercept = qe, linetype = "dashed") +
    geom_hline(yintercept = Pe, linetype = "dashed") +
    geom_point(
      data = tibble(q = qe, y = AC(qe, F = F, c = c)),
      aes(x = q, y = y),
      inherit.aes = FALSE
    ) +
    scale_colour_manual(
      values = c(
        "D" = darkblue,
        "MR" = violet,
        "MC" = grey,
        "AC" = orange
      )
    ) +
    coord_cartesian(xlim = c(0, max(df$q)), ylim = c(0, pmax), expand = FALSE) +
    labs(title = title, x = "q", y = "P, AC", colour = NULL) +
    theme_minimal()
}

mkt_eq <- function(S, F = F, c = c, title = NULL) {
  ne <- sqrt(S / (b * F))
  Pe <- c + sqrt(F / (S * b))
  nmax <- round(2 * ne)
  pmax <- round(2 * Pe)
  n <- seq(1, nmax)

  df <- tibble(
    n = n,
    cc = cc(n, S = S, F = F, c = c),
    pp = pp(n, b = b, c = c)
  )

  ggplot(df, aes(x = n)) +
    geom_line(aes(y = cc, colour = "cc"), linewidth = 1) +
    geom_line(aes(y = pp, colour = "pp"), linewidth = 1) +
    geom_vline(xintercept = ne, linetype = "dashed") +
    geom_hline(yintercept = Pe, linetype = "dashed") +
    geom_point(
      data = tibble(n = ne, y = Pe),
      aes(x = n, y = y),
      inherit.aes = FALSE
    ) +
    scale_colour_manual(values = c("cc" = blue, "pp" = cyan)) +
    coord_cartesian(xlim = c(0, nmax), ylim = c(0, pmax), expand = FALSE) +
    labs(title = title, x = "n", y = "P, AC", colour = NULL) +
    theme_minimal()
}
AdvarselFarverne

Husk at definere eller erstatte farverne, hvis du kopierer funktionerne (scale_colour_manual i både firm og mkt_eq).

ForsigtigHvor kommer \(D\) fra?

Efterspørgselskurven for det enkelte firma er nedadgående, fordi det producerer et unikt produkt (monopolistisk konkurrence). Vi har et udtryk for hvad firmaet producerer, nemlig:

\[ \begin{aligned} Q &= S \left[ \frac{1}{n} - b (P - \bar{P}) \right] \\ &= \left[\frac{S}{n} + Sb\bar{P}\right] - SbP \end{aligned} \]

Hældningen på efterspørgselskurven er derfor \(-Sb\), og skæringen med y-aksen er \(\frac{S}{n} + Sb\bar{P}\). Det er det, som vi bruger i funktionen firm til at tegne efterspørgselskurven for det enkelte firma.

Samme logik gælder for marginal revenue-kurven, som har samme skæringspunkt med y-aksen, men dobbelt så stejl hældning — altså, \(-2Sb\).

Autarki

Antag først, at der ikke er handel mellem de to lande. Hvert land udgør derfor sit eget marked, og ligevægten bestemmes separat af henholdsvis \(S_{\text{Dasadi}}\) og \(S_{\text{Jardonike}}\).

Beregn og sammenlign for hvert land:

  1. antallet af firmaer i ligevægt, \(n\)
  2. prisen, \(P\)
  3. produktionen pr. firma, \(q\)
  4. gennemsnitlige omkostninger, \(AC\)
# Beregn ligevægtsværdier for hvert land
equilibrium_values(S = S_dasadi, F = F, c = c, b = b)
equilibrium_values(S = S_jardonike, F = F, c = c, b = b)
Tabel 1: Autarkiligevægt i Dasadi og Jardonike
Land S n P q AC
Dasadi 50000 10 130.00 5000 130.00
Jardonike 84500 13 106.92 6500 106.92

Her bruger jeg kable fra knitr-pakken til at lave en pæn tabel med resultaterne.

Resultaterne viser, at Jardonike har en større markedsstørrelse, og derfor er der flere firmaer i ligevægt, en lavere pris og en højere produktion pr. firma sammenlignet med Dasadi. Vi kan også se, at \(AC=P\), som er et karakteristisk træk ved monopolistisk konkurrence hvor der er fri adgang til markedet (dvs. ingen hindringer til nye firmaer).

Figurerne nedenfor viser autarkiligevægten i hvert land. Venstre panel viser det enkelte firmas ligevægt, mens højre panel viser markedsligevægten mellem CC- og PP-kurverne.

Vis R-kode
# Brug funktionerne til at tegne figurer for hvert land
plot_firm_D <- firm(S_dasadi, F = F, c = c)
plot_mkt_D <- mkt_eq(S_dasadi, F = F, c = c)

plot_firm_J <- firm(S_jardonike, F = F, c = c)
plot_mkt_J <- mkt_eq(S_jardonike, F = F, c = c)
  • Dasadi
  • Jardonike

Jeg bruger ggplotly fra plotly-pakken til at gøre figurerne fra ggplot interaktive.

ForsigtigHvordan kombinerer man to ggplot-figurer i én?

Man kan bruge pakker som patchwork eller cowplot til at kombinere figurerne. Især patchwork er ret intuitiv, fordi man nemt kan lægge to ggplot-objekter sammen med + for at få dem til at stå ved siden af hinanden.

library(patchwork)
plot_firm_D + plot_mkt_D

Man kan læse mere om patchwork i pakkens dokumentationen. Ligeledes kan man læse om cowplot i dens dokumentationen.

Handel

Antag nu, at de to lande åbner for handel med hinanden. Når markederne integreres, bliver den samlede markedsstørrelse:

\[ S = S_{\text{Dasadi}} + S_{\text{Jardonike}} \]

Da alle øvrige parametre er ens på tværs af landene, er det alene det større samlede marked (\(S= 1.345\times 10^{5}\)), som flytter ligevægten i forhold til:

  • antallet af firmaer i det samlede marked
  • prisen på sneakers
  • produktionen pr. firma.

Tabel 2 sammenligner ligevægtsværdierne for hvert land under autarki med ligevægtsværdierne under handel, mens figur 1 viser den nye ligevægt, når firmaerne konkurrerer i et fælles marked med størrelse \(S_{\text{Dasadi}} + S_{\text{Jardonike}}\).

Tabel 2: Sammenligning af produktion med og uden handel
Scenarie S n P q AC
Autarki: Dasadi 50000 10.0 130.00 5000.00 130.00
Autarki: Jardonike 84500 13.0 106.92 6500.00 106.92
Handel: integreret marked 134500 16.4 90.97 8200.61 90.97
Figur 1: Firmaligevægt og markedsligevægt under handel
TipHvad er effekten af de øvrige parametre?

En naturlig opfølgning på denne øvelse er at undersøge, hvordan ændringer i de øvrige parametre (f.eks. \(F\), \(c\) eller \(b\)) påvirker ligevægten under både autarki og handel. For eksempel, hvordan ville en stigning i de faste omkostninger \(F\) påvirke antallet af firmaer og priserne i ligevægt? Eller hvordan ville en ændring i elasticitetsparameteren \(b\) påvirke markedsligevægten?

Når man nu har defineret funktionerne og opbygget modellen, er det nemt at eksperimentere med forskellige værdier for parametrene og se, hvordan det påvirker resultaterne. Det kan give en dybere forståelse af mekanismerne i modellen og de økonomiske principper, der ligger til grund for stordriftsfordele og monopolistisk konkurrence.

Læs mere

Denne øvelse er inspireret af Jonathan Connings undervisningsmateriale. Den store forskel er programmeringssproget: hvor vi bruger R, bruger han Python.

NF SDU

Nick Ford
Syddansk Universitet
Økonomisk Institut

© 2026 Nick Ford.