5  Politiska ingrepp

(där du lär dig vad som händer när politikerna kliver in på marknaden)

I Kapitel 3 lärde du dig bland annat att marknaden är effektiv, åtminstone under vissa förhållanden. Det betyder att produktionen och konsumtionen, som genom ett mirakel, blir exakt det som är bäst för hela samhället. En liknelse för att förstå effektivitet är att tänka på kassaköerna på CityMarket.

Effektivitet i snabbköpet

Du har säkert märkt att kassorna i butiken nästan alltid är lika långa. Det innebär att det inte finns några outnyttjade möjligheter: de flesta av oss är nog tillräckligt rationella för att ställa sig i den kortaste kön eftersom vi vill hem så fort som möjligt. När en ny kassa öppnas tar det bara några sekunder innan köerna återigen är lika långa. Därför slösar vi inte onödigt mycket tid på att stå i kö.

Men allt i livet handlar ju inte om effektivitet. Kanske tycker du att en kassa bör reserveras för kunder över 90 år så att äldre slipper vänta, eller att några parkeringsplatser nära entrén ska vara till för personer med funktionsnedsättning. Den kassan och de p-platserna kommer ofta stå tomma – ett uppenbart slöseri – men det är en uppoffring du är beredd att göra för att uppnå rättvisa. Dina värderingar gör att du accepterar mindre effektivitet för större rättvisa.

På samma sätt kan vi ogilla marknadens resultat. Kanske tycker du att det dricks för mycket sprit i Finland, att jordgubbarna är för dyra eller att vissa grupper får för låg lön. Vi ska nu se att politiker och beslutsfattare har verktyg för att styra marknaden i önskad riktning. I det här kapitlet ska vi se hur dessa verktyg fungerar och vilka effekter de får på ekonomin.


5.1 Kvoter begränsar mängden

Tänk dig att du är kommunpolitiker i Åbo och att du ogillar handeln med jordgubbar på Salutorget. Det säljs för mycket! Du bestämmer dig därför för att gripa in på marknaden och begränsa mängden jordgubbar som får handlas per dag. Med ett finare ord kallas den här typen av “maxmängd” för kvot. Vissa marknader kanske man vill stänga ner helt, för det är ju inte säkert att allting bör handlas bara för att det är ett frivilligt utbyte mellan två parter. Är det till exempel rätt med marknader för prostitution, surrogatmoderskap, Crystal Meth, njurar, adoptivbarn, slavar eller såna där små leksaker som barn kan sätta i halsen? Vid andra tillfällen vill du fortfarande att viss handel ska tillåtas men inte lika mycket som vid en oreglerad marknad. Så hur kommer kvoten att påverka marknaden? Blir jordgubbarna till exempel billigare eller dyrare och hur påverkas säljarna och köparna? Följande figur visar vad som händer när du begränsar handeln:

Välfärdsförlusten av en kvot
Figur 5.1: Effekterna av att införa en begränsning av mängden som får handlas. Observera att kvoten leder till högre priser och en dödviktsförlust.

I den vänstra grafen här ovanför visas den ursprungliga situationen, där 40 askar jordgubbar säljs till ett pris av 4 euro per ask. Den övre triangeln (som föreställer en kund i köpcentret) får representera konsumentöverskottet, det vill säga hur mycket mer köparna sammantaget innerst inne värderade jordgubbarna jämfört med vad de faktiskt tvingades betala för dem. I det här fallet är KÖ 80 euro (eftersom arean av en triangel är basen gånger höjden delat med 2). Den nedre triangeln (som föreställer Apple-grundaren Steve Jobs) visar producentöverskottet; i det här fallet är PÖ 80 euro, vilket betyder att säljarna av jordgubbar sammantaget fick 80 euro mer för jordgubbarna än de innerst inne skulle ha varit beredda att sälja dem för.

Check: Vet du vad KÖ och PÖ innebär och kan du räkna ut hur stora de är? Annars kan du repetera Avsnitt 3.3 för att fräscha upp dina kunskaper.

I den högra grafen ovan ser du vad som händer när politikerna begränsar handeln till 20 askar. Det första du kan observera är att handeln blir ineffektivt liten. Hur vet du det? Jo, tänk på marginalen: Vad skulle hända om man fick sälja ytterligare en enhet? Det finns kunder som är beredda att betala nästan 6 euro för ask nummer 21 och det finns försäljare som är redo att sälja asken för lite över 2 euro - men ändå kommer asken inte att handlas. Politikerna har ju dödat möjligheten till det här utbytet, fastän det skulle ha gynnat både köparen och säljaren. Dödviktsförlusten, i figuren illustrerad med Döden, är värdet av allt överskott som går upp i rök när politiker dödar en del av handeln.

Kvoten leder också till att jordgubbarna blir dyrare. Efterfrågekurvan visar ju vad konsumenterna är beredda att betala vid olika mängder. När det nu endast får säljas 20 askar kommer dessa askar att hamna hos de kunder som är redo att betala åtminstone 6 euro för en liter jordgubbar. Som grupp kommer konsumenterna därför att drabbas negativt av kvoten; färre och dyrare jordgubbar är ju dåliga nyheter för de som kommer till torget för att köpa jordgubbar. För säljarna är effekten däremot teoretiskt oklar: De får inte sälja lika mycket som tidigare, vilket såklart är dåligt, men å andra sidan får de mer betalt för de jordgubbar som de fortfarande får sälja, vilket såklart är bra. För att avgöra om kvoten gynnar eller missgynnar säljarna som grupp måste du därför titta närmare i data.

I appen nedan kan du på egen hand experimentera med kvoter. Du kan leka med siffror och datorn spottar automatiskt fram en illustration och beräknar exakt vad som händer. Mitt tips är att du först ser till att du förstår vad som händer i figuren. Därefter är det viktigt att du lär dig att lösa problemet på egen hand. På tentamen måste du nämligen klara av att rita och räkna utan hjälpmedel. Lek tills du känner att du behärskar tekniken.










Kvoten är den maximala mängd som får säljas.
Justera kvoten och se hur pris, mängd och dödviktsförlust påverkas.

#| standalone: true
#| viewerHeight: 1440

# Lätt reviderad version av din ursprungliga app:
# - Behåller ursprunglig layout och funktionalitet
# - Bättre validering och användarfeedback
# - Korrigerade formler för KO/PÖ/Dödvikt (analytiska integraler)
# - Små robusthetsfixar och tydligare etiketter
if (!requireNamespace("shiny", quietly = TRUE)) install.packages("shiny")
if (!requireNamespace("ggplot2", quietly = TRUE)) install.packages("ggplot2")
if (!requireNamespace("plotly", quietly = TRUE)) install.packages("plotly")

library(shiny)
library(ggplot2)
library(plotly)

ui <- fluidPage(
  fluidRow(
    column(4,
      wellPanel(
        numericInput("supply_intercept", "Ange interceptet för utbudskurvan:", 10),
        numericInput("supply_slope", "Ange lutningen för utbudskurvan (positiv):", 0.5, min = 1e-6),
        numericInput("demand_intercept", "Ange interceptet för efterfrågekurvan:", 30),
        numericInput("demand_slope", "Ange lutningen för efterfrågekurvan (negativ):", -0.5, max = -1e-6),
        numericInput("x_max", "X-axelns maxvärde i figuren:", value = 50, min = 1),
        numericInput("y_max", "Y-axelns maxvärde i figuren:", value = 40, min = 1),
        # För att ange "ingen kvot" kan användaren lämna fältet tomt eller ange NA.
        # NumericInput i Shiny kan visa NA om value = NA initialt; vi sätter initialt NA.
        numericInput("quota", "Ange kvot (maximal mängd) eller lämna tomt för ingen kvot:", value = NA),
        actionButton("update", "Uppdatera figuren och beräkningarna",
                     style = "color: white; background-color: #007bff; padding: 6px 12px; border: 2px solid #007bff; font-size: 14px;"),
        br(),
        tags$h5("Användarguide: Fyll i parametrarna ovan och klicka på 'Uppdatera figuren och beräkningarna'."),
        tags$small("Obs: Utbudskurvan måste ha positiv lutning och efterfrågekurvan negativ.")
      )
    ),
    column(8,
      plotlyOutput("demandSupplyPlot"),
      br(),
      verbatimTextOutput("quotaEffect"),
      verbatimTextOutput("inverseFunctions")
    )
  )
)

server <- function(input, output, session) {

  # Håller validerade värden som bara uppdateras när användaren klickar 'update'
  validatedInput <- reactiveValues(
    supply_intercept = 10,
    supply_slope = 0.5,
    demand_intercept = 30,
    demand_slope = -0.5,
    quota = NA
  )

  observeEvent(input$update, {
    # Läs in råa värden
    si <- input$supply_intercept
    ss <- input$supply_slope
    di <- input$demand_intercept
    ds <- input$demand_slope
    q  <- input$quota

    # Grundläggande validering
    if (any(is.na(c(si, ss, di, ds)))) {
      showNotification("Ogiltig inmatning: Ange numeriska värden för alla kurvparametrar.", type = "error")
      return()
    }
    if (!is.numeric(ss) || ss <= 0) {
      showNotification("Utbuds-lutningen måste vara ett positivt tal.", type = "error")
      return()
    }
    if (!is.numeric(ds) || ds >= 0) {
      showNotification("Efterfråge-lutningen måste vara ett negativt tal.", type = "error")
      return()
    }
    if (!is.na(q) && (!is.numeric(q) || q < 0)) {
      showNotification("Kvoten måste vara ett icke-negativt tal eller lämnas tom.", type = "error")
      return()
    }

    # Spara validerade värden
    validatedInput$supply_intercept <- si
    validatedInput$supply_slope     <- ss
    validatedInput$demand_intercept <- di
    validatedInput$demand_slope     <- ds
    validatedInput$quota            <- ifelse(is.na(q), NA, q)
    showNotification("Parametrar uppdaterade.", type = "message")
  })

  # Hjälpfunktioner
  supply_at <- function(q, si, ss) si + ss * q
  demand_at <- function(q, di, ds) di + ds * q

  equilibrium <- reactive({
    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope

    # Om lutningarna lika -> ingen unik jämvikt
    if (abs(ss - ds) < .Machine$double.eps^0.5) return(list(eq_x = NA, eq_y = NA))
    eq_x <- (di - si) / (ss - ds)
    eq_y <- supply_at(eq_x, si, ss)
    if (is.na(eq_x) || is.na(eq_y) || eq_x < 0 || eq_y < 0) return(list(eq_x = NA, eq_y = NA))
    list(eq_x = eq_x, eq_y = eq_y)
  })

  # Korrekt beräkning av kvoteffekt (KO, PO, pris vid kvot) med analytiska formler
  quota_effect <- reactive({
    q <- validatedInput$quota
    eq <- equilibrium()
    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope

    # Om ingen kvot eller ingen giltig jämvikt eller kvoten inte binder -> NULL
    if (is.na(q) || is.na(eq$eq_x) || q >= eq$eq_x) return(NULL)

    # Pris som följer av efterfrågekurvan vid kvoten
    quota_price <- demand_at(q, di, ds)

    # Producentöverskott vid kvot (area mellan pris och utbudskurva, 0..q)
    # PO_q = q * P_q - integral_0^q (si + ss * x) dx
    #       = q * P_q - (si * q + 0.5 * ss * q^2)
    quota_PO <- round(q * quota_price - (si * q + 0.5 * ss * q^2), 2)

    # Konsumentöverskott vid kvot (triangle mellan efterfrågan och pris P_q, 0..q)
    # KO_q = 0.5 * q * (P_max - P_q) där P_max = di (pris vid Q=0 för linjär efterfrågan)
    quota_KO <- round(0.5 * q * (di - quota_price), 2)

    list(quota_price = round(quota_price, 2), KO = quota_KO, PO = quota_PO, quota = q)
  })


  output$demandSupplyPlot <- renderPlotly({
    # Säkerställ att användaren har uppdaterat parametrar åtminstone en gång
    req(validatedInput$supply_slope, validatedInput$demand_slope)

    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope
    x_max <- input$x_max
    y_max <- input$y_max
    q <- validatedInput$quota

    # Mer validering för axelintervall
    if (any(is.na(c(si, ss, di, ds, x_max, y_max)))) {
      showNotification("Ogiltig inmatning för plotparametrar.", type = "error")
      return(NULL)
    }

    x <- seq(0, x_max, length.out = 200)
    y_supply <- supply_at(x, si, ss)
    y_demand <- demand_at(x, di, ds)

    eq <- equilibrium()
    data <- data.frame(x = x, y_supply = y_supply, y_demand = y_demand)
    data <- data[data$y_demand >= 0 | data$y_supply >= 0, ] # visa relevanta delar

    # Enkel färgblindvänlig palett
    p <- ggplot(data, aes(x)) +
      geom_line(aes(y = y_supply, color = "Utbud"), size = 1) +
      geom_line(aes(y = y_demand, color = "Efterfrågan"), size = 1) +
      labs(x = "Mängd (Q)", y = "Pris (P)") +
      theme_minimal() +
      scale_color_manual(name = "Kurvor:", values = c("Utbud" = "#1b9e77", "Efterfrågan" = "#d95f02")) +
      theme(legend.title = element_blank()) +
      coord_cartesian(ylim = c(0, y_max), xlim = c(0, x_max)) +
      geom_hline(yintercept = 0, color = "black", size = 0.5) +
      geom_vline(xintercept = 0, color = "black", size = 0.5)

    # Visa jämvikt om giltig
    if (!is.na(eq$eq_x) && !is.na(eq$eq_y)) {
      p <- p +
        geom_point(aes(x = eq$eq_x, y = eq$eq_y), color = "purple", size = 3) +
        geom_segment(aes(x = eq$eq_x, xend = eq$eq_x, y = 0, yend = eq$eq_y), linetype = "dashed", color = "purple") +
        geom_segment(aes(x = 0, xend = eq$eq_x, y = eq$eq_y, yend = eq$eq_y), linetype = "dashed", color = "purple")

      # Om ingen kvot anges, visa KO och PO vid jämvikt
      if (is.na(q)) {
        # KO: area mellan demand och eq$eq_y från 0..eq_x
        p <- p +
          geom_ribbon(data = subset(data, x <= eq$eq_x), aes(ymin = eq$eq_y, ymax = y_demand), fill = "#a6cee3", alpha = 0.6) +
          geom_ribbon(data = subset(data, x <= eq$eq_x), aes(ymin = y_supply, ymax = eq$eq_y), fill = "#fdbf6f", alpha = 0.6)
      }
    }

    # Om kvot anges och den binder
    quotaInfo <- quota_effect()
    if (!is.null(quotaInfo)) {
      qval <- quotaInfo$quota
      Pq <- quotaInfo$quota_price

      # Konsumentöverskott & Producentöverskott upp till kvot
      p <- p +
        geom_ribbon(data = subset(data, x <= qval), aes(ymin = Pq, ymax = y_demand), fill = "#a6cee3", alpha = 0.6) +
        geom_ribbon(data = subset(data, x <= qval), aes(ymin = y_supply, ymax = Pq), fill = "#fdbf6f", alpha = 0.6)

      # Dödvikt: område mellan q och eq$eq_x
      if (!is.na(eq$eq_x) && qval < eq$eq_x) {
        dq <- seq(qval, eq$eq_x, length.out = 100)
        df_dw <- data.frame(x = dq,
                            ymin = supply_at(dq, si, ss),
                            ymax = demand_at(dq, di, ds))
        p <- p + geom_ribbon(data = df_dw, aes(x = x, ymin = ymin, ymax = ymax), fill = "grey40", alpha = 0.4)
      }

      p <- p + geom_vline(xintercept = qval, linetype = "dashed", color = "darkgreen")
    }

    ggplotly(p)
  })

  output$inverseFunctions <- renderText({
    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope

    supply_inverse <- if (ss != 0) {
      paste0("Q = (P - ", si, ") / ", ss)
    } else {
      "Utbudslinjen kan inte inverteras (lutning = 0)."
    }

    demand_inverse <- if (ds != 0) {
      paste0("Q = (P - ", di, ") / ", ds)
    } else {
      "Efterfrågelinjen kan inte inverteras (lutning = 0)."
    }

    paste("Utbud: ", supply_inverse, "\nEfterfrågan: ", demand_inverse)
  })

  output$quotaEffect <- renderText({
    eq <- equilibrium()
    quotaEffect <- quota_effect()

    originalEquilibriumText <- if (is.na(eq$eq_x) || is.na(eq$eq_y)) {
      "Jämvikt: Ingen skärningspunkt vid positiva värden"
    } else {
      price <- round(eq$eq_y, 2)
      quantity <- round(eq$eq_x, 2)
      # Konsumentöverskott och producentöverskott vid jämvikt - konsekventa formler
      KO <- round(0.5 * quantity * (validatedInput$demand_intercept - price), 2)
      PO <- round(quantity * price - (validatedInput$supply_intercept * quantity + 0.5 * validatedInput$supply_slope * quantity^2), 2)
      paste("Jämvikt:", "\nPris:", price, "\nMängd:", quantity, "\nKonsumentöverskott (KÖ):", KO, "\nProducentöverskott (PÖ):", PO)
    }

    if (is.null(quotaEffect)) {
      paste(originalEquilibriumText, "\n\nIngen kvot är angiven eller kvoten påverkar ej jämvikten.")
    } else {
      # Dödvikt = (KO_eq + PO_eq) - (KO_q + PO_q)
      # Återberäkna KO_eq och PO_eq med samma formler som ovan
      if (is.na(eq$eq_x) || is.na(eq$eq_y)) {
        DÖ <- NA
      } else {
        price <- round(eq$eq_y, 2)
        quantity <- round(eq$eq_x, 2)
        KO_eq <- 0.5 * quantity * (validatedInput$demand_intercept - price)
        PO_eq <- quantity * price - (validatedInput$supply_intercept * quantity + 0.5 * validatedInput$supply_slope * quantity^2)
        DÖ <- round((KO_eq + PO_eq) - (quotaEffect$KO + quotaEffect$PO), 2)
      }

      paste(originalEquilibriumText,
            "\n\nMed kvot:",
            "\nPris:", quotaEffect$quota_price,
            "\nMängd:", quotaEffect$quota,
            "\nKonsumentöverskott (KÖ):", quotaEffect$KO,
            "\nProducentöverskott (PÖ):", quotaEffect$PO,
            "\nDödviktsförlust (DÖ):", ifelse(is.na(DÖ), "NA", DÖ))
    }
  })
}

shinyApp(ui = ui, server = server)

5.2 Pristak sänker priset

Det blir nu maktskifte i kommunen. Din kollega tar över makten. Hennes första åtgärd blir att ta bort begränsningarna på jordgubbshandeln. Däremot tycker hon att priset på 4 euro för en ask jordgubbar är alldeles för högt.

»Även fattiga ÅA-studenter måste ha råd med jordgubbar!« dundrar hon i lokaltidningen.

För att få ner priserna inför hon därför ett pristak på 2 euro per ask. Detta innebär att jordgubbar inte får säljas för mer än 2 euro. Du kan tänka på ett pristak som ett tak du slår huvudet i, en övre gräns. I figuren nedan visas hur pristaket påverkar marknaden:

Välfärdsförlusten av ett pristak
Figur 5.2: Effekterna av att införa ett pristak. Observera att pristaket leder till lägre priser och en dödviktsförlust.

Kom ihåg att utbudskurvan visar hur mycket producenterna är villiga att sälja vid olika prisnivåer. Med ett pristak på 2 euro kan producenterna endast tänka sig att sälja 20 liter jordgubbar. Det är helt enkelt inte möjligt att tvinga dem att sälja mer än så. Handeln med jordgubbar blir därför också här ineffektivt liten. Pristaket stoppar en del handel som skulle ha varit bra för både köpare och säljare. Den dödviktsförlust som visas i figuren indikerar att det totala välståndet (summan av KÖ och PÖ) minskar.

I figuren kan du också se hur olika grupper påverkas av pristaket. Exempelvis minskar producentöverskottet när pristaket införs. Att säljarna drabbas av pristaket är kanske inte så förvånande; lägre pris och minskad försäljning är ju dåliga nyheter för säljarna. För köparna är effekten däremot teoretiskt oklar: Det blir billigare jordgubbar (bra!), men å andra sidan får de inte handla lika mycket som tidigare (dåligt!). Utifrån teorin går det alltså inte att säga med säkerhet om pristaket faktiskt gynnar konsumenterna. Om man ska vara petnoga är konsumentöverskottet i figuren dessutom med stor sannolikhet en överskattning av det sanna konsumentöverskottet. Förstår du varför? Jo, tänk så här: Vid priset 2 euro vill konsumenterna ha 60 liter, men det säljs bara 20. Hur ska vi välja ut vilka kunder som ska få de 20 askarna? På en vanlig marknad är det priset som bestämmer vem som ska få respektive inte få - men här har politikerna satt marknadskrafterna ur spel. I min illustration av KÖ antog jag att askarna hamnar hos exakt de konsumenter som värderade jordgubbarna högst. Jag antog alltså att jordgubbsälskaren Jenny (med en betalningsvilja på 8 euro) får jordgubbar men att allergiske Anton (med betalningsviljan 2 euro) blir utan (se Figur 3.3). I praktiken finns det dock ingenting som säger att så skulle bli fallet. De 20 askarna skulle lika gärna kunna hamna hos Anton och liknande kunder som egentligen inte värderar jordgubbarna särskilt högt.

Exempel: Pristak på bostadsmarknaden. Föreställ dig att staten bestämmer att ingen lägenhet får hyras ut för mer än 300 euro i månaden. Visst är det trevligt med låga hyror, men vår analys visar också att pristaket gör att färre bostäder hyrs ut. Ingreppet “dödar” många bostadsaffärer som skulle ha gynnat både köpare och säljare. Men människors vilja till samarbete och handel är urstark - och risken är överhängande att det skapas svarta marknader där dessa parter träffas i smyg för att handla. Om du inte lyckas få en lägenhet på den billiga, lagliga bostadsmarknaden kan du kanske hitta en person på den svarta marknaden som går med på att hyra ut sin lägenhet till dig för 500 euro? I en övningsuppgift i slutet av kapitlet får du titta närmare på hur den här typen av pristak har påverkat bostadsmarknaden i Sverige.

Här är en app som hjälper dig att analysera effekterna av ett pristak mera i detalj.

#| standalone: true
#| viewerHeight: 1470

if (!requireNamespace("shiny", quietly = TRUE)) install.packages("shiny")
if (!requireNamespace("ggplot2", quietly = TRUE)) install.packages("ggplot2")
if (!requireNamespace("plotly", quietly = TRUE)) install.packages("plotly")

library(shiny)
library(ggplot2)
library(plotly)

ui <- fluidPage(
  fluidRow(
    column(4,
      wellPanel(
        numericInput("supply_intercept", "Ange interceptet för utbudskurvan:", 10),
        numericInput("supply_slope", "Ange lutningen för utbudskurvan (positiv):", 0.5, min = 1e-6),
        numericInput("demand_intercept", "Ange interceptet för efterfrågekurvan:", 30),
        numericInput("demand_slope", "Ange lutningen för efterfrågekurvan (negativ):", -0.5, max = -1e-6),
        numericInput("x_max", "X-axelns maxvärde i figuren:", value = 50, min = 1),
        numericInput("y_max", "Y-axelns maxvärde i figuren:", value = 40, min = 1),
        numericInput("price_ceiling", "Ange pristak (lämna tomt för inget):", value = NA),
        actionButton("update", "Uppdatera figuren och beräkningarna",
                     style = "color: white; background-color: #007bff; padding: 6px 12px; border: 2px solid #007bff; font-size: 14px;"),
        br(),
        tags$h5("Användarguide: Fyll i parametrarna ovan och klicka på 'Uppdatera'."),
        tags$small("Obs: Utbudskurvan måste ha positiv lutning och efterfrågekurvan negativ.")
      )
    ),
    column(8,
      plotlyOutput("demandSupplyPlot"),
      br(),
      verbatimTextOutput("priceCeilingEffect"),
      verbatimTextOutput("inverseFunctions")
    )
  )
)

server <- function(input, output, session) {

  validatedInput <- reactiveValues(
    supply_intercept = 10,
    supply_slope = 0.5,
    demand_intercept = 30,
    demand_slope = -0.5,
    price_ceiling = NA
  )

  observeEvent(input$update, {
    si <- input$supply_intercept
    ss <- input$supply_slope
    di <- input$demand_intercept
    ds <- input$demand_slope
    pc <- input$price_ceiling

    if (any(is.na(c(si, ss, di, ds)))) {
      showNotification("Ogiltig inmatning: Ange numeriska värden för alla kurvparametrar.", type = "error")
      return()
    }
    if (!is.numeric(ss) || ss <= 0) {
      showNotification("Utbuds-lutningen måste vara ett positivt tal.", type = "error")
      return()
    }
    if (!is.numeric(ds) || ds >= 0) {
      showNotification("Efterfråge-lutningen måste vara ett negativt tal.", type = "error")
      return()
    }
    if (!is.na(pc) && (!is.numeric(pc) || pc < 0)) {
      showNotification("Pristaket måste vara ett icke-negativt tal eller lämnas tom.", type = "error")
      return()
    }

    validatedInput$supply_intercept <- si
    validatedInput$supply_slope     <- ss
    validatedInput$demand_intercept <- di
    validatedInput$demand_slope     <- ds
    validatedInput$price_ceiling    <- ifelse(is.na(pc), NA, pc)
    showNotification("Parametrar uppdaterade.", type = "message")
  })

  supply_at <- function(q, si, ss) si + ss * q
  demand_at <- function(q, di, ds) di + ds * q

  equilibrium <- reactive({
    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope

    if (abs(ss - ds) < .Machine$double.eps^0.5) return(list(eq_x = NA, eq_y = NA))
    eq_x <- (di - si) / (ss - ds)
    eq_y <- supply_at(eq_x, si, ss)
    if (is.na(eq_x) || is.na(eq_y) || eq_x < 0 || eq_y < 0) return(list(eq_x = NA, eq_y = NA))
    list(eq_x = eq_x, eq_y = eq_y)
  })

  price_ceiling_effect <- reactive({
    pc <- validatedInput$price_ceiling
    eq <- equilibrium()
    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope

    if (is.na(pc) || is.na(eq$eq_y) || pc >= eq$eq_y) return(NULL)

    q_supply <- (pc - si) / ss
    q_demand <- (pc - di) / ds

    q_supply <- round(max(0, q_supply), 8)
    q_demand <- round(max(0, q_demand), 8)

    excess_demand <- round(max(0, q_demand - q_supply), 2)

    list(quantity_supplied = round(q_supply, 2),
         quantity_demanded = round(q_demand, 2),
         excess_demand = excess_demand,
         price_ceiling = pc)
  })

  output$demandSupplyPlot <- renderPlotly({
    req(validatedInput$supply_slope, validatedInput$demand_slope)

    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope
    x_max <- input$x_max
    y_max <- input$y_max
    pc <- validatedInput$price_ceiling

    if (any(is.na(c(si, ss, di, ds, x_max, y_max)))) {
      showNotification("Ogiltig inmatning för plotparametrar.", type = "error")
      return(NULL)
    }

    x <- seq(0, x_max, length.out = 200)
    y_supply <- supply_at(x, si, ss)
    y_demand <- demand_at(x, di, ds)

    eq <- equilibrium()
    data <- data.frame(x = x, y_supply = y_supply, y_demand = y_demand)
    data <- data[data$y_demand >= 0 | data$y_supply >= 0, ]

    p <- ggplot(data, aes(x)) +
      geom_line(aes(y = y_supply, color = "Utbud"), size = 1) +
      geom_line(aes(y = y_demand, color = "Efterfrågan"), size = 1) +
      labs(x = "Mängd (Q)", y = "Pris (P)", color = NULL) +
      theme_minimal(base_size = 10) +
      scale_color_manual(name = "Kurvor:", values = c("Utbud" = "#1b9e77", "Efterfrågan" = "#d95f02")) +
      theme(legend.title = element_blank(),
            legend.text  = element_text(size = 9),           # legendens textstorlek
            legend.key.size = unit(16, "pt")                 # storlek på legendboxarna
  ) +

    
      coord_cartesian(ylim = c(0, y_max), xlim = c(0, x_max)) +
      geom_hline(yintercept = 0, color = "black", size = 0.5) +
      geom_vline(xintercept = 0, color = "black", size = 0.5)

    if (!is.na(eq$eq_x) && !is.na(eq$eq_y)) {
      p <- p +
        geom_point(aes(x = eq$eq_x, y = eq$eq_y), color = "purple", size = 3) +
        geom_segment(aes(x = eq$eq_x, xend = eq$eq_x, y = 0, yend = eq$eq_y), linetype = "dashed", color = "purple") +
        geom_segment(aes(x = 0, xend = eq$eq_x, y = eq$eq_y, yend = eq$eq_y), linetype = "dashed", color = "purple")
    }

    pc_info <- price_ceiling_effect()
    if (!is.null(pc_info)) {
      qs <- pc_info$quantity_supplied
      qd <- pc_info$quantity_demanded
      pc_val <- pc_info$price_ceiling

      p <- p + geom_hline(yintercept = pc_val, linetype = "solid", color = "darkgreen", size = 1)

      if (qs > 0) {
        p <- p +
          geom_ribbon(data = subset(data, x <= qs), aes(ymin = y_supply, ymax = pc_val), fill = "#fdbf6f", alpha = 0.6) +
          geom_ribbon(data = subset(data, x <= qs), aes(ymin = pc_val, ymax = y_demand), fill = "#a6cee3", alpha = 0.6)
      }

      if (!is.na(eq$eq_x) && qs < eq$eq_x) {
        dq <- seq(qs, eq$eq_x, length.out = 100)
        df_dw <- data.frame(x = dq,
                            ymin = supply_at(dq, si, ss),
                            ymax = demand_at(dq, di, ds))
        p <- p + geom_ribbon(data = df_dw, aes(x = x, ymin = ymin, ymax = ymax), fill = "grey40", alpha = 0.4)
      }
    }

    ggplotly(p) %>%
      layout(
        font = list(size = 14, family = "Arial"),
        legend = list(bgcolor = "rgba(255,255,255,0.9)", x = 0.85, y = 0.85, xanchor = "right")
      )
  })

  output$inverseFunctions <- renderText({
    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope

    supply_inverse <- if (ss != 0) {
      paste0("Q = (P - ", si, ") / ", ss)
    } else {
      "Utbudslinjen kan inte inverteras (lutning = 0)."
    }

    demand_inverse <- if (ds != 0) {
      paste0("Q = (P - ", di, ") / ", ds)
    } else {
      "Efterfrågelinjen kan inte inverteras (lutning = 0)."
    }

    paste("Utbud: ", supply_inverse, "\nEfterfrågan: ", demand_inverse)
  })

  output$priceCeilingEffect <- renderText({
    eq <- equilibrium()
    pcEffect <- price_ceiling_effect()

    originalEquilibriumText <- if (is.na(eq$eq_x) || is.na(eq$eq_y)) {
      "Jämvikt: Ingen skärningspunkt vid positiva värden"
    } else {
      price <- round(eq$eq_y, 2)
      quantity <- round(eq$eq_x, 2)
      KO <- round(0.5 * quantity * (validatedInput$demand_intercept - price), 2)
      PO <- round(quantity * price - (validatedInput$supply_intercept * quantity + 0.5 * validatedInput$supply_slope * quantity^2), 2)
      paste("Jämvikt:", "\nPris:", price, "\nMängd:", quantity, "\nKonsumentöverskott (KÖ):", KO, "\nProducentöverskott (PÖ):", PO)
    }

    if (is.null(pcEffect)) {
      paste(originalEquilibriumText, "\n\nInget pristak är angivet eller pristaket påverkar ej jämvikten.")
    } else {
      pc <- pcEffect$price_ceiling
      qs <- pcEffect$quantity_supplied
      qd <- pcEffect$quantity_demanded
      excess <- pcEffect$excess_demand

      demand_price_at_qs <- demand_at(qs, validatedInput$demand_intercept, validatedInput$demand_slope)
      upper_triangle_KO <- 0.5 * qs * (validatedInput$demand_intercept - demand_price_at_qs)
      rectangle_KO <- qs * (demand_price_at_qs - pc)
      total_KO <- round(upper_triangle_KO + rectangle_KO, 2)

      PO <- round(qs * pc - (validatedInput$supply_intercept * qs + 0.5 * validatedInput$supply_slope * qs^2), 2)

      if (is.na(eq$eq_x) || is.na(eq$eq_y)) {
        deadweight_loss <- NA
      } else {
        orig_KO <- 0.5 * eq$eq_x * (validatedInput$demand_intercept - eq$eq_y)
        orig_PO <- eq$eq_x * eq$eq_y - (validatedInput$supply_intercept * eq$eq_x + 0.5 * validatedInput$supply_slope * eq$eq_x^2)
        deadweight_loss <- round((orig_KO + orig_PO) - (total_KO + PO), 2)
      }

      paste(originalEquilibriumText,
            "\n\nMed pristak:",
            "\nMängd som erbjuds vid pristaket:", qs,
            "\nMängd som efterfrågas vid pristaket:", qd,
            "\nÖverskottsefterfrågan:", excess,
            "\nKonsumentöverskott (KÖ):", total_KO,
            "\nProducentöverskott (PÖ):", PO,
            "\nDödviktsförlust (DÖ):", ifelse(is.na(deadweight_loss), "NA", deadweight_loss),
            "\n\nPristak:", pc)
    }
  })
}

shinyApp(ui = ui, server = server)

5.3 Prisgolv höjer priset

Andra politiker tycker att jordgubbarna är för billiga.

»Även fattiga odlare måste kunna leva på jordgubbar!« dundrar de i lokaltidningen.

Därför inför de ett prisgolv på 6 euro per ask. Prisgolvet betyder att jordgubbar inte får säljas för mindre än 6 euro. En minnesregel är att golv är något du står på, en nedre gräns. Figuren nedan visar hur prisgolvet påverkar marknaden:

Välfärdsförlusten av ett prisgolv
Figur 5.3: Effekterna av att införa ett prisgolv. Observera att prisgolvet leder till högre priser och en dödviktsförlust.

Tänk dig att priset på jordgubbar stiger till 6 euro. Hur påverkar det aktörerna på marknaden? Jo, kunderna kommer inte vilja köpa lika mycket som tidigare; efterfrågekurvan ovan visar att kunderna bara köper 20 liter vid detta höga pris. Det går ju inte att tvinga kunderna att köpa mer än de själva vill köpa. Även vid ett prisgolv blir handeln därmed ineffektivt liten. Dödviktsförlusten i figuren visar att prisgolvet leder till minskat totalt välstånd (i termer av summan av KÖ och PÖ).

I figuren kan du också se hur prisgolvet påverkar välfärden för olika grupper. Du ser till exempel att konsumentöverskottet minskar när prisgolvet införs. Att konsumenterna som grupp missgynnas av ett prisgolv är föga överraskande: Högre pris och minskad handel måste ju vara dåliga nyheter för köparna. För säljarna är effekten däremot teoretiskt oklar: De får mer betalt (bra!) men å andra sidan får de inte sälja lika mycket som tidigare (dåligt!). Även här tillkommer ytterligare ett problem: Vid priset 6 euro vill ju producenterna sälja 60 liter, så hur ska vi nu välja ut vilka säljare som ska få sälja de 20 liter som köps? När jag ritade upp producentöverskottet så antog jag att de 20 askarna som genom ett mirakel säljs av just praktiska Pia och andra producenter med låga kostnader (se Figur 3.3). I praktiken finns det dock ingenting som säger att så skulle bli fallet. Jordgubbarna skulle lika gärna kunna säljas av företagare som bara skulle sälja om priset vore till exempel 5 euro eller 6 euro. Producentöverskottet i figuren är alltså troligen en överskattning av hur nöjda producenterna faktiskt blir vid prisgolvet.

Exempel. Prisgolv på arbetsmarknaden. Prisgolv förekommer ibland på arbetsmarknaden i form av minimilöner. Du kan tänka dig att staten lagstiftar om att ingen i landet får tjäna mindre än 3 000 euro i månaden. Visst är det trevligt med en hög lön, men vår analys visar att reformen också leder till att färre människor får jobb. Ingreppet “dödade” en del anställningar som skulle ha gynnat både köpare och säljare av arbetskraft. Risken att därför överhängande att det skapas svarta marknader där dessa parter träffas i smyg för att handla. Om du som företagare inte lyckas få på en arbetare på den dyra, lagliga arbetsmarknaden kan du kanske hitta en person på den svarta marknaden som går med på att jobba för dig för 2 000 euro? I en övningsuppgift i slutet av kapitlet får du titta närmare på hur minimilöner påverkar arbetsmarknaden.

Här är en app som hjälper dig att analysera effekterna av ett prisgolv mera i detalj.

#| standalone: true
#| viewerHeight: 1470

# Reviderad och robust version av prisgolvs-appen.
# - Samma layout och stil som pristak- och kvot-apparna
# - Tydligare validering och användarfeedback
# - Konsekventa analytiska formler för KO/PÖ/DÖ
# - Hantering av kantfall (lutning = 0, negativa värden, osv.)

if (!requireNamespace("shiny", quietly = TRUE)) install.packages("shiny")
if (!requireNamespace("ggplot2", quietly = TRUE)) install.packages("ggplot2")
if (!requireNamespace("plotly", quietly = TRUE)) install.packages("plotly")

library(shiny)
library(ggplot2)
library(plotly)

ui <- fluidPage(
  fluidRow(
    column(4,
      wellPanel(
        numericInput("supply_intercept", "Ange interceptet för utbudskurvan:", 10),
        numericInput("supply_slope", "Ange lutningen för utbudskurvan (positiv):", 0.5, min = 1e-6),
        numericInput("demand_intercept", "Ange interceptet för efterfrågekurvan:", 30),
        numericInput("demand_slope", "Ange lutningen för efterfrågekurvan (negativ):", -0.5, max = -1e-6),
        numericInput("x_max", "X-axelns maxvärde i figuren:", value = 50, min = 1),
        numericInput("y_max", "Y-axelns maxvärde i figuren:", value = 40, min = 1),
        numericInput("price_floor", "Ange prisgolv (lämna tomt för inget):", value = NA),
        actionButton("update", "Uppdatera figuren och beräkningarna",
                     style = "color: white; background-color: #007bff; padding: 6px 12px; border: 2px solid #007bff; font-size: 14px;"),
        br(),
        tags$h5("Användarguide: Fyll i parametrarna ovan och klicka på 'Uppdatera'."),
        tags$small("Obs: Utbudskurvan måste ha positiv lutning och efterfrågekurvan negativ.")
      )
    ),
    column(8,
      plotlyOutput("demandSupplyPlot"),
      br(),
      verbatimTextOutput("priceFloorEffect"),
      verbatimTextOutput("inverseFunctions")
    )
  )
)

server <- function(input, output, session) {

  validatedInput <- reactiveValues(
    supply_intercept = 10,
    supply_slope = 0.5,
    demand_intercept = 30,
    demand_slope = -0.5,
    price_floor = NA
  )

  observeEvent(input$update, {
    si <- input$supply_intercept
    ss <- input$supply_slope
    di <- input$demand_intercept
    ds <- input$demand_slope
    pf <- input$price_floor

    if (any(is.na(c(si, ss, di, ds)))) {
      showNotification("Ogiltig inmatning: Ange numeriska värden för alla kurvparametrar.", type = "error")
      return()
    }
    if (!is.numeric(ss) || ss <= 0) {
      showNotification("Utbuds-lutningen måste vara ett positivt tal.", type = "error")
      return()
    }
    if (!is.numeric(ds) || ds >= 0) {
      showNotification("Efterfråge-lutningen måste vara ett negativt tal.", type = "error")
      return()
    }
    if (!is.na(pf) && (!is.numeric(pf) || pf < 0)) {
      showNotification("Prisgolvet måste vara ett icke-negativt tal eller lämnas tom.", type = "error")
      return()
    }

    validatedInput$supply_intercept <- si
    validatedInput$supply_slope     <- ss
    validatedInput$demand_intercept <- di
    validatedInput$demand_slope     <- ds
    validatedInput$price_floor      <- ifelse(is.na(pf), NA, pf)
    showNotification("Parametrar uppdaterade.", type = "message")
  })

  supply_at <- function(q, si, ss) si + ss * q
  demand_at <- function(q, di, ds) di + ds * q

  equilibrium <- reactive({
    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope

    if (abs(ss - ds) < .Machine$double.eps^0.5) return(list(eq_x = NA, eq_y = NA))
    eq_x <- (di - si) / (ss - ds)
    eq_y <- supply_at(eq_x, si, ss)
    if (is.na(eq_x) || is.na(eq_y) || eq_x < 0 || eq_y < 0) return(list(eq_x = NA, eq_y = NA))
    list(eq_x = eq_x, eq_y = eq_y)
  })

  price_floor_effect <- reactive({
    pf <- validatedInput$price_floor
    eq <- equilibrium()
    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope

    # Om inget prisgolv eller inget giltigt jämvikt eller prisgolvet inte binder -> NULL
    if (is.na(pf) || is.na(eq$eq_y) || pf <= eq$eq_y) return(NULL)

    # Kvantiteter vid prisgolvet
    q_demand <- (pf - di) / ds        # ds negativ -> positiv q_demand
    q_supply <- (pf - si) / ss

    q_demand <- round(max(0, q_demand), 8)
    q_supply <- round(max(0, q_supply), 8)
    q_traded <- round(min(q_demand, q_supply), 8)

    excess_supply <- round(max(0, q_supply - q_demand), 2)

    # Konsumentöverskott vid prisgolv:
    # Triangel ovanför efterfrågan upp till q_traded (∆P * 0.5 * q_traded) + rektangeln mellan efterfrågepris vid q_traded och pf för q=q_traded?
    # Vi beräknar total KO upp till q_traded: integral_0^q_traded (demand(q) - pf) dq
    if (q_traded > 0) {
      # Demand(q) = di + ds*q -> integral = di*q_traded + 0.5*ds*q_traded^2
      KO <- round((di * q_traded + 0.5 * ds * q_traded^2) - pf * q_traded, 2)
    } else {
      KO <- 0
    }

    # Producentöverskott vid prisgolv: integral_0^q_traded (pf - supply(q)) dq
    if (q_traded > 0) {
      PO <- round(pf * q_traded - (si * q_traded + 0.5 * ss * q_traded^2), 2)
    } else {
      PO <- 0
    }

    list(quantity_supplied = round(q_supply, 2),
         quantity_demanded = round(q_demand, 2),
         quantity_traded = round(q_traded, 2),
         excess_supply = excess_supply,
         consumer_surplus = KO,
         producer_surplus = PO,
         price_floor = pf)
  })

  output$demandSupplyPlot <- renderPlotly({
    req(validatedInput$supply_slope, validatedInput$demand_slope)

    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope
    x_max <- input$x_max
    y_max <- input$y_max
    pf <- validatedInput$price_floor

    if (any(is.na(c(si, ss, di, ds, x_max, y_max)))) {
      showNotification("Ogiltig inmatning för plotparametrar.", type = "error")
      return(NULL)
    }

    x <- seq(0, x_max, length.out = 200)
    y_supply <- supply_at(x, si, ss)
    y_demand <- demand_at(x, di, ds)

    eq <- equilibrium()
    data <- data.frame(x = x, y_supply = y_supply, y_demand = y_demand)
    data <- data[data$y_demand >= 0 | data$y_supply >= 0, ]

    p <- ggplot(data, aes(x)) +
      geom_line(aes(y = y_supply, color = "Utbud"), size = 1) +
      geom_line(aes(y = y_demand, color = "Efterfrågan"), size = 1) +
      labs(x = "Mängd (Q)", y = "Pris (P)") +
      theme_minimal(base_size = 10) +
      scale_color_manual(name = "Kurvor:", values = c("Utbud" = "#1b9e77", "Efterfrågan" = "#d95f02")) +
      theme(legend.title = element_blank(),
            legend.text  = element_text(size = 9),           # legendens textstorlek
            legend.key.size = unit(14, "pt")                 # storlek på legendboxarna
  ) +
      coord_cartesian(ylim = c(0, y_max), xlim = c(0, x_max)) +
      geom_hline(yintercept = 0, color = "black", size = 0.5) +
      geom_vline(xintercept = 0, color = "black", size = 0.5)

    if (!is.na(eq$eq_x) && !is.na(eq$eq_y)) {
      p <- p +
        geom_point(aes(x = eq$eq_x, y = eq$eq_y), color = "purple", size = 3) +
        geom_segment(aes(x = eq$eq_x, xend = eq$eq_x, y = 0, yend = eq$eq_y), linetype = "dashed", color = "purple") +
        geom_segment(aes(x = 0, xend = eq$eq_x, y = eq$eq_y, yend = eq$eq_y), linetype = "dashed", color = "purple")
    }

    pf_info <- price_floor_effect()
    if (!is.null(pf_info)) {
      qsupply <- pf_info$quantity_supplied
      qdemand <- pf_info$quantity_demanded
      qtrade <- pf_info$quantity_traded
      pf_val <- pf_info$price_floor

      # Streck för prisgolvet
      p <- p + geom_hline(yintercept = pf_val, linetype = "solid", color = "darkorange", size = 1)

      # Visa KO och PO upp till den handlade kvantiteten (qtrade)
      if (qtrade > 0) {
        p <- p +
          geom_ribbon(data = subset(data, x <= qtrade), aes(ymin = pf_val, ymax = y_demand), fill = "#a6cee3", alpha = 0.6) +
          geom_ribbon(data = subset(data, x <= qtrade), aes(ymin = y_supply, ymax = pf_val), fill = "#fdbf6f", alpha = 0.6)
      }

      # Dödvikt: område mellan qtrade och jämviktsmängd (om giltig)
      if (!is.na(eq$eq_x) && qtrade < eq$eq_x) {
        dq <- seq(qtrade, eq$eq_x, length.out = 100)
        df_dw <- data.frame(x = dq,
                            ymin = supply_at(dq, si, ss),
                            ymax = demand_at(dq, di, ds))
        p <- p + geom_ribbon(data = df_dw, aes(x = x, ymin = ymin, ymax = ymax), fill = "grey40", alpha = 0.4)
      }
    }

    ggplotly(p)
  })

  output$inverseFunctions <- renderText({
    si <- validatedInput$supply_intercept
    ss <- validatedInput$supply_slope
    di <- validatedInput$demand_intercept
    ds <- validatedInput$demand_slope

    supply_inverse <- if (ss != 0) {
      paste0("Q = (P - ", si, ") / ", ss)
    } else {
      "Utbudslinjen kan inte inverteras (lutning = 0)."
    }

    demand_inverse <- if (ds != 0) {
      paste0("Q = (P - ", di, ") / ", ds)
    } else {
      "Efterfrågelinjen kan inte inverteras (lutning = 0)."
    }

    paste("Utbud: ", supply_inverse, "\nEfterfrågan: ", demand_inverse)
  })

  output$priceFloorEffect <- renderText({
    eq <- equilibrium()
    pfEffect <- price_floor_effect()

    originalEquilibriumText <- if (is.na(eq$eq_x) || is.na(eq$eq_y)) {
      "Jämvikt: Ingen skärningspunkt vid positiva värden"
    } else {
      price <- round(eq$eq_y, 2)
      quantity <- round(eq$eq_x, 2)
      KO <- round(0.5 * quantity * (validatedInput$demand_intercept - price), 2)
      PO <- round(quantity * price - (validatedInput$supply_intercept * quantity + 0.5 * validatedInput$supply_slope * quantity^2), 2)
      paste("Jämvikt:", "\nPris:", price, "\nMängd:", quantity, "\nKonsumentöverskott (KÖ):", KO, "\nProducentöverskott (PÖ):", PO)
    }

    if (is.null(pfEffect)) {
      paste(originalEquilibriumText, "\n\nInget prisgolv är angivet eller prisgolvet påverkar ej jämvikten.")
    } else {
      pf <- pfEffect$price_floor
      qs <- pfEffect$quantity_demanded   # mängd som efterfrågas vid golvet (notation konservativ)
      qd <- pfEffect$quantity_supplied   # mängd som erbjuds vid golvet
      qt <- pfEffect$quantity_traded
      excess <- pfEffect$excess_supply
      KO_pf <- pfEffect$consumer_surplus
      PO_pf <- pfEffect$producer_surplus

      # Dödvikt: ursprungligt (KO+PO) minus nytt under prisgolv (KO_pf + PO_pf)
      if (is.na(eq$eq_x) || is.na(eq$eq_y)) {
        deadweight_loss <- NA
      } else {
        orig_KO <- 0.5 * eq$eq_x * (validatedInput$demand_intercept - eq$eq_y)
        orig_PO <- eq$eq_x * eq$eq_y - (validatedInput$supply_intercept * eq$eq_x + 0.5 * validatedInput$supply_slope * eq$eq_x^2)
        deadweight_loss <- round((orig_KO + orig_PO) - (KO_pf + PO_pf), 2)
      }

      paste(originalEquilibriumText,
            "\n\nMed prisgolv:",
            "\nMängd som efterfrågas vid prisgolvet:", qs,
            "\nMängd som erbjuds vid prisgolvet:", qd,
            "\nMängd som handlas vid prisgolvet:", qt,
            "\nÖverskottserbjudande:", excess,
            "\nKonsumentöverskott (KÖ):", KO_pf,
            "\nProducentöverskott (PÖ):", PO_pf,
            "\nDödviktsförlust (DÖ):", ifelse(is.na(deadweight_loss), "NA", deadweight_loss),
            "\n\nPrisgolv:", pf)
    }
  })
}

shinyApp(ui = ui, server = server)

5.4 Skatter och subventioner

Kvoter, pristak och prisgolv i all ära - men det är skatter och subventioner som är politikernas viktigaste verktyg för att tygla marknadskrafterna. Att förstå hur skatter och subventioner påverkar livet i det lilla är därför ett absolut måste för dig som vill begripa ekonomin och samhället. Den 1 september 2024 höjdes till exempel skatten på konsumtion i Finland från 24 procent till 25,5 procent. Inför reformen intervjuades Jutta Hurme som äger blomsteraffären Tähkä, ett stenkast från Salutorget.

Här finns många mysterier att utforska: Varför ligger Jutta sömnlös? Kommer priset på blommor att stiga eller sjunka, och hur påverkas försäljningen? Är det Jutta eller hennes kunder som kommer att lida mest av skatten, och kommer marknaden för blommor att påverkas mer av skatten än andra branscher? Och hur mycket pengar får staten in tack vare skatten? Allt detta ska vi lära oss om i det här avsnittet. Fundera gärna först en sekund på vad du tycker om skatterna i Finland. Tycker du att de är för höga eller för låga, och kan du se fördelar och nackdelar med att höja skatterna?

Skatternas omfattning

I världskartan nedan ser du hur högt skattetrycket var år 2023. Skatterna i Finland motsvarade då alltså ungefär 42,7 procent av våra inkomster. Om du trycker på PLAY ser du utvecklingen under perioden 1980–2023. Som alltid kan du utforska data på egen hand. Via Table, Map och Chart kan du styra vad som ska visas. Kan du till exempel lista ut vilka tre länder som hade högst respektive lägst skattetryck år 2023? Vilka länder har höjt respektive sänkt sina skatter mest sedan 1980? (För Sverige, Frankrike, Storbritannien och USA kan du även se skatternas utveckling ända sedan 1868 här.)

Men exakt varifrån togs dessa skatter? Det finns ett myller av olika skatter. Till exempel betalar du skatt varje gång du handlar någonting (i Finland oftast 25,5%, men skattesatsen för mat och kultur är lägre). Du betalar också skatt på dina arbetsinkomster (cirka 30% men systemet är progressivt, vilket betyder att skattesatsen stiger när din inkomst ökar) och på dina kapitalinkomster (30%), liksom när du köper en fastighet. I följande tabell ser du varifrån skatterna kommer i respektive land:

progressiv skatt är då skattesatsen ökar när inkomsten ökar, som statlig inkomstskatt

skattebasen är det som beskattas; om något nytt beskattas utvidgas basen








Topplistan över världens högsta skattetryck 2023. Lägg en minut på att leka lite i figuren. Hur höga är skatterna i Finland? Hur är fördelningen mellan konsumtionsskatter och skatter på inkomster och förmögenheter?

I tabellen ovan ser du till exempel att av skatteinkomsterna i Finland kommer cirka 1/3 från skatter på konsumtion av varor och tjänster, 1/3 av skatter på inkomster och vinster och 1/3 från socialförsäkringsavgifter medan fastighetsskatten endast bidrar med en liten del.

Att analysera effekterna av skatter

Låt oss nu undersöka hur marknaden påverkas av skatter. Skatteanalys brukar upplevas som svårt av många studenter, men om vi tar det steg för steg så kommer du att fixa det. Se först till att du verkligen behärskar Kapitel 3. Kom ihåg att universitetsstudier är som en slå en bakåtvolt: Du måste ha nött in grunderna ordentligt innan du går vidare till det mer avancerade, annars är risken stor att du bryter nacken. Se alltså till att du med lätthet kan både förklara, illustrera och beräkna vad som sker på en marknad.

Som alltid tror jag att det är smart att använda en app. Här ser du nämligen direkt vad som händer. När du väl förstår intuitionen kan du gnugga detaljer och teknik. Jag har ställt in appen så att den visar jordgubbsmarknaden från Avsnitt 2.2, men du kan självklart själv ändra siffrorna i appen:






Skatter och skattebörda.
Ändra skatten och se vem som drabbas hårdast.

#| standalone: true
#| viewerHeight: 1350

# Reviderad skatt-app — samma layout och stil som pristak/prisgolv/kvot-apparna.
# - Numeric inputs
# - Robust validering och tydliga felmeddelanden
# - Konsekventa analytiska formler för KO/PÖ/skatteintäkter/DÖ
# - Ribbons ritade med inherit.aes = FALSE för att undvika grafiska artefakter i plotly
# - Mindre axelrubriker och närmare axlar (via layout)

if (!requireNamespace("shiny", quietly = TRUE)) install.packages("shiny")
if (!requireNamespace("ggplot2", quietly = TRUE)) install.packages("ggplot2")
if (!requireNamespace("plotly", quietly = TRUE)) install.packages("plotly")

library(shiny)
library(ggplot2)
library(plotly)

ui <- fluidPage(
  fluidRow(
    column(4,
      wellPanel(
        numericInput("supply_intercept", "Ange interceptet för utbudskurvan:", value = 0),
        numericInput("supply_slope", "Ange lutningen för utbudskurvan (positiv):", value = 0.1, min = 1e-6),
        numericInput("demand_intercept", "Ange interceptet för efterfrågekurvan:", value = 8),
        numericInput("demand_slope", "Ange lutningen för efterfrågekurvan (negativ):", value = -0.1, max = -1e-6),
        numericInput("tax", "Ange styckskatt (per enhet):", value = 0, min = 0),
        numericInput("x_max", "X-axelns maxvärde i figuren:", value = 100, min = 1),
        numericInput("y_max", "Y-axelns maxvärde i figuren:", value = 10, min = 1),
        actionButton("update", "Uppdatera figuren och beräkningarna",
                     style = "color: white; background-color: #007bff; padding: 6px 12px; border: 2px solid #007bff; font-size: 14px;"),
        br(),
        tags$h5("Användarguide: Ange parametrarna och klicka 'Uppdatera'."),
        tags$small("Obs: Utbudskurvan måste ha positiv lutning och efterfrågekurvan negativ.")
      )
    ),
    column(8,
      plotlyOutput("demandSupplyPlot"),
      br(),
      verbatimTextOutput("equilibrium"),
      verbatimTextOutput("inverseFunctions")
    )
  )
)

server <- function(input, output, session) {

  validatedInput <- reactiveValues(
    si = 0,
    ss = 0.1,
    di = 8,
    ds = -0.1,
    tax = 0
  )

  observeEvent(input$update, {
    si <- input$supply_intercept
    ss <- input$supply_slope
    di <- input$demand_intercept
    ds <- input$demand_slope
    t  <- input$tax

    if (any(is.na(c(si, ss, di, ds, t)))) {
      showNotification("Ogiltig inmatning: ange numeriska värden.", type = "error")
      return()
    }
    if (!is.numeric(ss) || ss <= 0) {
      showNotification("Utbuds-lutningen måste vara positiv.", type = "error"); return()
    }
    if (!is.numeric(ds) || ds >= 0) {
      showNotification("Efterfråge-lutningen måste vara negativ.", type = "error"); return()
    }
    if (!is.numeric(t) || t < 0) {
      showNotification("Skatten måste vara icke-negativ.", type = "error"); return()
    }

    validatedInput$si <- si
    validatedInput$ss <- ss
    validatedInput$di <- di
    validatedInput$ds <- ds
    validatedInput$tax <- t
    showNotification("Parametrar uppdaterade.", type = "message")
  })

  # Hjälpfunktioner
  supply_at <- function(q, si, ss) si + ss * q
  demand_at <- function(q, di, ds) di + ds * q

  equilibrium <- reactive({
    si <- validatedInput$si
    ss <- validatedInput$ss
    di <- validatedInput$di
    ds <- validatedInput$ds
    t  <- validatedInput$tax

    if (abs(ss - ds) < .Machine$double.eps^0.5) {
      return(list(Q0 = NA, P0 = NA, Q = NA, P_cons = NA, P_prod = NA, taxrev = NA, KO0 = NA, PO0 = NA, KO = NA, PO = NA, DWL = NA))
    }
    # utan skatt
    Q0 <- (di - si) / (ss - ds)
    P0 <- supply_at(Q0, si, ss)

    # med skatt (utbud skift upp med t)
    Q <- (di - (si + t)) / (ss - ds)
    P_prod <- supply_at(Q, si, ss)   # producentpris efter skatt
    P_cons <- P_prod + t             # konsumentpris
    taxrev <- t * Q

    # ursprungliga överskott
    KO0 <- ifelse(Q0 > 0, 0.5 * Q0 * (di - P0), 0)
    PO0 <- ifelse(Q0 > 0, Q0 * P0 - (si * Q0 + 0.5 * ss * Q0^2), 0)

    # nya överskott
    KO <- ifelse(Q > 0, 0.5 * Q * (di - P_cons), 0)
    PO <- ifelse(Q > 0, Q * P_prod - (si * Q + 0.5 * ss * Q^2), 0)

    DWL <- (KO0 + PO0) - (KO + PO + taxrev)

    list(Q0 = Q0, P0 = P0, Q = Q, P_cons = P_cons, P_prod = P_prod,
         taxrev = taxrev, KO0 = KO0, PO0 = PO0, KO = KO, PO = PO, DWL = DWL)
  })

  output$equilibrium <- renderText({
    eq <- equilibrium()
    if (is.na(eq$Q) || is.na(eq$P_prod)) {
      "Jämvikt: Ingen skärningspunkt vid positiva värden"
    } else {
      Q <- round(eq$Q, 2)
      P_cons <- round(eq$P_cons, 2)
      P_prod <- round(eq$P_prod, 2)
      KO <- round(eq$KO, 2)
      PO <- round(eq$PO, 2)
      taxrev <- round(eq$taxrev, 2)
      DWL <- round(eq$DWL, 2)

      paste("Jämvikt (med skatt):",
            "\nKonsumentens pris:", P_cons,
            "\nProducentens pris:", P_prod,
            "\nMängd (Q):", Q,
            "\nKonsumentöverskott (KÖ):", KO,
            "\nProducentöverskott (PÖ):", PO,
            "\nDödviktsförlust (DÖ):", DWL,
            "\nSkatteintäkter:", taxrev)
    }
  })

  output$demandSupplyPlot <- renderPlotly({
    req(validatedInput$ss, validatedInput$ds)

    si <- validatedInput$si
    ss <- validatedInput$ss
    di <- validatedInput$di
    ds <- validatedInput$ds
    t  <- validatedInput$tax
    x_max <- input$x_max
    y_max <- input$y_max

    if (any(is.na(c(si, ss, di, ds, x_max, y_max)))) {
      showNotification("Ogiltig inmatning för plotparametrar.", type = "error"); return(NULL)
    }

    Qvec <- seq(0, x_max, length.out = 400)
    Supply <- supply_at(Qvec, si, ss)
    SupplyTax <- Supply + t
    Demand <- demand_at(Qvec, di, ds)

    eq <- equilibrium()

    df <- data.frame(Q = Qvec, Supply = Supply, SupplyTax = SupplyTax, Demand = Demand)

    p <- ggplot() +
      geom_line(data = df, aes(x = Q, y = Supply, color = "Utbud (ursprunglig)"), size = 1) +
      geom_line(data = df, aes(x = Q, y = SupplyTax, color = "Utbud (inkl. skatt)"), linetype = "dashed", size = 1) +
      geom_line(data = df, aes(x = Q, y = Demand, color = "Efterfrågan"), size = 1) +
      scale_color_manual(values = c("Utbud (ursprunglig)" = "#1b9e77", "Utbud (inkl. skatt)" = "#D95F02", "Efterfrågan" = "#7570B3")) +
      labs(x = "Mängd (Q)", y = "Pris (P)", color = "") +
      theme_minimal(base_size = 14) +
      coord_cartesian(xlim = c(0, x_max), ylim = c(0, y_max)) +
      geom_hline(yintercept = 0, color = "black", size = 0.5) +
      geom_vline(xintercept = 0, color = "black", size = 0.5)

    # Om giltig jämvikt, skapa tydliga, icke-överlappande ribbons med inherit.aes = FALSE
    if (!is.na(eq$Q) && eq$Q > 0) {
      Q <- eq$Q
      P_cons <- eq$P_cons
      P_prod <- eq$P_prod

      # Punkt och streck för konsumentpris
      p <- p +
        geom_point(aes(x = Q, y = P_cons), color = "purple", size = 3) +
        geom_segment(aes(x = Q, xend = Q, y = 0, yend = P_cons), linetype = "dashed", color = "purple") +
        geom_segment(aes(x = 0, xend = Q, y = P_cons, yend = P_cons), linetype = "dashed", color = "purple")

      # KO: area mellan Demand och P_cons, 0..Q
      idx <- which(df$Q <= Q)
      df_KO <- data.frame(Q = df$Q[idx], ymin = rep(P_cons, length(idx)), ymax = df$Demand[idx])

      # PO: area mellan Supply och P_prod, 0..Q
      df_PO <- data.frame(Q = df$Q[idx], ymin = df$Supply[idx], ymax = rep(P_prod, length(idx)))

      # Tax rectangle: mellan P_prod och P_cons, 0..Q
      df_tax <- data.frame(Q = df$Q[idx], ymin = rep(P_prod, length(idx)), ymax = rep(P_cons, length(idx)))

      # Deadweight: mellan Q and Q0 (om Q0 > Q)
      if (!is.na(eq$Q0) && eq$Q0 > Q) {
        dq <- seq(Q, eq$Q0, length.out = 200)
        df_dwl <- data.frame(Q = dq,
                             ymin = supply_at(dq, si, ss),
                             ymax = demand_at(dq, di, ds))
      } else {
        df_dwl <- NULL
      }

      # Lägg till ribbons i logisk ordning (KO ovanpå PO, skatt ovanpå dem, DWL sist)
      p <- p +
        geom_ribbon(data = df_KO,  inherit.aes = FALSE, aes(x = Q, ymin = ymin, ymax = ymax), fill = "#a6cee3", alpha = 0.6) +
        geom_ribbon(data = df_PO,  inherit.aes = FALSE, aes(x = Q, ymin = ymin, ymax = ymax), fill = "#fdbf6f", alpha = 0.6) +
        geom_ribbon(data = df_tax, inherit.aes = FALSE, aes(x = Q, ymin = ymin, ymax = ymax), fill = "#b2df8a", alpha = 0.6)

      if (!is.null(df_dwl)) {
        p <- p + geom_ribbon(data = df_dwl, inherit.aes = FALSE, aes(x = Q, ymin = ymin, ymax = ymax), fill = "grey40", alpha = 0.4)
      }
    }

    ggplotly(p) %>%
      layout(
        legend = list(orientation = "h", x = 0.2, y = -0.15),
        margin = list(l = 70, r = 40, b = 60, t = 30),
        yaxis = list(title = list(text = "Pris (P)", font = list(size = 12)), title_standoff = 8, automargin = TRUE),
        xaxis = list(title = list(text = "Mängd (Q)", font = list(size = 12)), title_standoff = 8, automargin = TRUE)
      )
  })

  output$inverseFunctions <- renderText({
    si <- validatedInput$si
    ss <- validatedInput$ss
    di <- validatedInput$di
    ds <- validatedInput$ds

    supply_inverse <- if (ss != 0) paste0("Q = (P - ", si, ") / ", ss) else "Utbudslinjen kan inte inverteras (lutning = 0)."
    demand_inverse <- if (ds != 0) paste0("Q = (P - ", di, ") / ", ds) else "Efterfrågelinjen kan inte inverteras (lutning = 0)."

    paste("Utbud: ", supply_inverse, "\nEfterfrågan: ", demand_inverse)
  })
}

shinyApp(ui = ui, server = server)

Anta nu att jordgubbsförsäljarna måste betala in en skatt för varje liter jordgubbar som de säljer. Låt oss för enkelhetens skulle låtsas som att skatten är 2 euro per liter. Gå därför upp i appen och skriv in 2 i fältet Ange styckskatt (per enhet). Tryck sedan på den blå knappen Uppdatera figuren och beräkningarna. Nu ser du resultatet både grafiskt och i siffror. Vad är det som har hänt?

styckskatt är en skatt som är satt i euro per producerad eller konsumerad enhet

  1. Skatten skiftar utbudskurvan åt vänster:

    Allt som gör livet jobbigare för producenterna skiftar utbudskurvan åt vänster: Vid respektive prisnivå är det helt enkelt färre som vill sälja jordgubbar på torget nu när man dessutom måste betala in en extra avgift för varje liter man säljer. Du kan också tänka att en utbudskurva visar priset som företagen kräver för att bjuda ut en viss mängd. Om man nu dessutom måste betala en avgift kommer detta pris att skifta upp med skattens storlek.

  2. Skatten höjer konsumentpriset och minskar försäljningen:

    Läs av det nya priset. När skatten var 2 euro blev det nya priset på jordgubbarna, i vårt exempel, tydligen 5 euro per liter. Det högre priset gör att konsumenterna inte vill handla lika mycket som tidigare. En första viktig insikt är alltså att skatten höjer priset för kunden, och att en del skräms bort (enligt lagen om efterfrågan).

  3. Skatten sänker producenternas pris:

    Konsumenterna betalar 5 euro för jordgubbarna. Innebär detta att producenterna får 5 euro? Nej, för nu ska de ju skicka in skatten till staten. Det som blir kvar för företagen efter att skatten är betald blir därför 3 euro (det vill säga konsumentpriset minus skatten). Du kan tänka dig att skatten skapar en kil mellan priset som konsumenterna betalar och priset som producenterna i slutändan får kvar efter skatt. En viktig lärdom är sålunda att skatten gör att företagen får mindre betalt.

  4. Skatten minskar både KÖ och PÖ:

    Som du ser i figuren kommer skatten att inverka negativt på både konsumenter och producenter (i termer av överskott). Intuitionen är enkel: Konsumenterna får ju betala ett högre pris (dåligt) och får inte handla lika mycket som tidigare (dåligt); producenterna får sämre betalt (dåligt) och får inte sälja lika mycket som tidigare (dåligt). Se till att du kan räkna ut, med papper och penna och miniräknare, vad som händer med överskotten, samt att du kan förklara vad siffrorna betyder. En central lärdom är att en skatt slår mot både producenter och konsumenter. Det är som att bördan av skatten faller båda parter. Den här insikten är viktig. När vi tvingade jordgubbsbolagen att betala in en skatt så ledde det i slutändan till att du som jordgubbskonsument fick bära en del av skatten. På motsvarande sätt kommer exempelvis en bankskatt att delvis vältras över på dig som kund.

  5. Men staten får skatteintäkter:

    Fördelen med skatten är självklart att myndigheterna får in skattepengar. Skatteintäkterna ges av den ljusgröna rektangeln i figuren. Du får summan genom att ta mängden som handlas när skatten har införts (alltså 30) och multiplicera med skattens storlek (alltså 2 euro).

  6. Skatter dödar handel och leder till en dödviktsförlust:

    Skatter leder till minskad handel, och handel gynnar ju både säljare och köpare. Mängden handel på marknaden blir nu ineffektivt liten. Att införa skatter kan självklart ändå vara smart politik. Kanske är vi beredda att offra en del effektivitet för att till exempel öka rättvisan? Med skattepengarna kan ju politikerna till exempel bekosta vården av cancersjuka barn, dela ut pengar till ÅA-studenter eller bygga vägar och daghem.


Skatteincidens och effektivitet

Två gåtor återstår att besvara:

  1. Vi såg att skatten drabbar både kunderna och företagen, men påverkas båda lika mycket eller kommer någon part att tvingas bära en större andel av skatten?
  2. Vilka slags marknader är det “bäst” att beskatta?

För att förstå det här kan du titta i följande figur:

Hur en skatt skapar dödviktsförlust och hur den beror på elasticiteterna
Figur 5.4: Vem åker dit hårdast på skatten - och hur mycket handel dödas?

I båda graferna ovan har jag ritat identiska utbudskurvor och i båda situationerna utgår vi från jämvikten 1, där priset är P0 och mängden är Q0. Notera dock att efterfrågekurvan lutar brantare i den vänstra grafen än i den högra, vilket indikerar att dessa konsumenter är mindre priskänsliga.

Nu inför jag en skatt i analysen, vilket kan illustreras med att utbudskurvan skiftar upp med skattens storlek. Ser du vad som händer? I den vänstra grafen, där konsumenterna är mindre priskänsliga (tänk “mer desperata”), kommer en större andel av skatten att i praktiken bäras av konsumenterna. I den högra grafen är det däremot företagen som får bära den största delen av skattebördan.

Vem som i praktiken rent “bokföringsmässigt” betalar in skatten är med andra ord fullständigt irrelevant. I den politiska debatten hörs just nu krav på en särskild bankskatt - men få inser nog att en stor del av skatten i slutändan kommer att vältras över på alla människor som har ett bankkonto. I praktiken delas alltid skattebördan så att den minst priskänsliga parten bär den största delen av skatten. Den som är desperat brukar ju alltid bli utnyttjad i livet och det gäller även inom skatteanalysen. Om kunderna är desperata är det ju enklare för företagen att vältra över en större del av skatten på kunderna (som ju fortsätter att handla även när priset stiger).

skatteincidens handlar om vem som faktiskt betalar skatten (oberoende av vem som på pappret betalar den)

Notera också att skatteintäkterna blir större och dödviktsförlusterna mindre i den vänstra grafen än i den högra. Varför blir det så? Jo, för att konsumenterna är okänsliga för prishöjningar. De kommer därför att fortsätta handla även när staten inför en skatt. I den högra grafen dödas däremot en stor del av handeln när skatten införs - och därför finns det mindre handel kvar att samla upp skatter från. Ur ett rent effektivitetsperspektiv är det därför bra att beskatta till exempel boende, cancermediciner och andra varor och tjänster där efterfrågan är oelastisk med avseende på priset. Å andra sidan kanske det är värt att offra lite effektivitet för något som vi upplever som mer rättvist?

Skatt på arbete: Leder höjd skatt till större skatteintäkter?

Att nationalekonomer tänker annorlunda än andra har jag märkt många gånger. Här är tre exempel:

Det säljs 100 liter jordgubbar på Salutorget varje dag. Kommunpolitikerna vill nu införa en skatt som tvingar företagen att betala in en euro för varje liter de säljer. Politikerna tror att det kommer att ge dem 100 euro i skatteintäkter. Nationalekonomen tror att det blir mindre än 100 euro.


Ett företag överväger om företagshälsovården borde bli gratis för de anställda. Men vad kostar en sådan reform? I fjol gick de anställda till företagshälsovården sammanlagt 1 000 gånger, och varje besök kostade 100 euro. Företagsledningen säger därför att reformen kommer att kosta företaget 100 000 euro. Nationalekonomen tror att det blir mer än 100 000 euro.


På en universitetskurs deltar 100 studenter. Chansen att klara en tentamen är 90 procent. För att öka genomströmningen inför universitetet nu ytterligare ett examenstillfälle, vilket kostar skattebetalarna cirka 1 000 euro i form av ökade arbetskostnader och byråkrati. Ledningen försvarar reformen och hävdar att ytterligare ett tillfälle gör att 99 av 100 klarar kursen, det vill säga 90 studenter vid första tillfället och ytterligare 9 vid det andra. Nationalekonomen tror att det blir färre än 99 studenter.


Vad är det som gör att nationalekonomen kommer till helt andra slutsatser än de andra ekonomerna och samhällsvetarna? Jag tror att det har att göra med synen på hur våra vägval påverkas av förändrade incitament. Skatten kommer nämligen att skrämma bort en del kunder från torget, och därför blir skatteintäkterna mindre. Gratis hälsovård kommer att få fler att gå till läkaren, och därför blir sjukvårdskostnaderna större. Möjligheten att skjuta upp examinationen kommer att leda till att färre dyker upp på det ordinarie tentamenstillfället.

Exakt samma tankesätt kan du använda för att fundera kring hur höjda skatter på arbete påverkar statens skatteintäkter. Höjda skatter kommer ju enligt vår analys att få färre att vilja arbeta. Rent teoretiskt skulle därför sänkta skattesatser på arbete kunna leda till att statens skatteintäkter ökar. Sambandet mellan skattesats och skatteintäkter kallas för Laffer-kurvan. Ekonomen Arthur Laffer ritade upp sambandet på en servett när han diskuterade skattepolitiken med inflytelserika amerikanska politiker i Washington på 1970-talet. Ungefär så här ritade Laffer sin kurva:

Lafferkurvan visar sambandet mellan skatteintäkter och skattesats
Figur 5.5: Laffer-kurvan revolutionerar skattepolitiken: “Om skattesatsen är 0 blir skatteintäkterna såklart 0, men om skattesatsen är 100 procent blir skatteintäkterna också 0 eftersom ingen vill jobba. Om vi just nu befinner oss till höger om toppen så får vi in mer skatt om vi sänker skattesatsen”.


När skattesatsen är 0 får staten naturligtvis inte in några skattepengar, men samma sak gäller förmodligen också när skattesatsen är 100 procent eftersom knappast någon arbetar när staten tar all lön i skatt. Det innebär att det måste finnas en skattesats någonstans mellan 0 och 100 procent där skatteintäkterna blir maximalt stora.

Om vi befinner oss “till vänster” om denna skattesats så kommer skatteintäkterna stiga när skatterna höjs, men om vi ligger “till höger” om denna punkt så kommer en sänkning av skattesatserna de facto att öka skatteintäkterna. En intressant forskningsfråga är därmed att lista ut om ett land ligger till vänster eller till höger om punkten där skatteintäkterna maximeras.

Laffer-kurvan fick en enorm betydelse för ekonomisk politik över hela världen och bidrog starkt till att skatterna på arbete har sänkts de senaste decennierna. Kurvan var bland annat kärnan i president Reagans ekonomiska politik under 1980-talet. I en övningsuppgift i slutet av kapitlet berättar Laffer själv mer om sin berömda kurva. Det är en fenomenal uppvisning i politisk lobbyism.

Subventioner är en omvänd skatt

Skatter leder till minskad handel. En skatt på elcyklar gör alltså att det säljs färre elcyklar. Men tänk om du som finansminister eller kommunalpolitiker vill få fler Åbobor att köpa elcykel, till exempel för folkhälsans skull eller för att få ner biltrafiken kring torget? Hur gör du det? Svaret är en subvention. Du kan tänka på subventioner som en omvänd (negativ) skatt: I stället för att företagen betalar en avgift för varje enhet de säljer så får de pengar för varje enhet de säljer. Eftersom skatten skiftar utbudskurvan åt vänster måste alltså subventionen skifta utbudskurvan åt höger. Effekten blir som vid en skatt - men tvärtom! Handeln ökar (och blir ineffektivt stor), konsumentens pris faller, företagen får mer betalt (när de fått subventionen), och staten får en stor utgift för att subventionera allt som handlas.

Övningsuppgifter

I det här kapitlet har du lärt dig hur politiker kan gripa in på marknaden med sina ekonomisk-politiska verktyg för att ändra priser eller mängden som produceras och konsumeras. Här nedanför får du träna på den här typen av uppgifter. Tryck som vanligt på Show Answers när du vill att datorn ska rätta dina svar. Lycka till!

Skatter dödar

Du ska nu analysera hur en skatt påverkar marknaden för brödlimpor. En viktig lärdom är att skatter dödar. Följande figurer visar hur marknaden såg ut innan skatter infördes. Du ser att marknadspriset är 2 euro per limpa och att det säljs 100 limpor.

  1. Tänk dig nu att staten inför en skatt på 1 euro per brödlimpa. Det är producenterna som ska skicka in skatten till staten. Vad händer i figuren ovan när staten ger denna käftsmäll åt företagen? Svar: .
  2. Priset i butiken för kunden .
  3. Priset i för säljarna efter skatt .
  4. Den grupp som i praktiken får bära största delen av skatten är , vilket beror på att den gruppen är mest desperat och därför kan mycket av skatten “vältras över” på denna grupp.
  5. Att införa en skatt på 1 euro på en marknad där det från början säljs 100 limpor leder alltså till skatteintäkter som är
  6. Anta nu i stället att skatten, rent administrativt, läggs på konsumenterna i stället för producenterna. Det är alltså konsumenterna som ska skicka in skatten till staten varje gång de köper en limpa. Vad händer i så fall i figuren ovan? Svar: .
  7. Priset som säljaren får .
  8. Priset för köparen när hon också skickat in skatten .
  1. Allt som är dåligt för företagen borde leda till att utbudet minskar; vid varje prisnivå vill företagen bjuda ut mindre än tidigare.
  2. Av skatten på 1 euro landar 80 cent på kunden. Konsumenterna bär därför 80 procent av skattebördan.
  3. Av skatten på 1 euro landar 20 cent på kunden. Producenterna bär därför 20 procent av skattebördan.
  4. Fundera i några sekunder på vad det här betyder. Tänk till exempel på företaget som du startade i en övningsuppgift i kapitel 3. Tror du att kunderna i den branschen har en oelastisk efterfråga med avseende på priset? Så kan det bli om din produkt är unik eller upplevs som unik (tänk: “konsumenterna är hjärntvättade av reklam”). I så fall kan du ju låta konsumenterna betala en stor del av skatten eftersom de de flesta kommer att fortsätta att köpa din produkt fastän den blir dyrare.
  5. Kom ihåg att skatter dödar - vilket gör att skattebasen krymper; det finns helt enkelt mindre handel kvar som du får skatteintäkter från.
  6. Hittills har vi sagt att det är företagen som på pappret betalar in skatten, men i den här uppgiften är det i stället kunden som ska skicka in skatten till staten. Något borde alltså hända med efterfrågekurvan. Kom ihåg att efterfrågekurvan visar priset som gör att kunderna vill ha en viss mängd av varan. För att kunderna exempelvis ska vilja köpa 100 limpor måste priset vara 2 euro per limpa. Vad händer om kunden nu dessutom måste betala in en avgift på 1 euro per limpa? Jo, brödpriset som gör att kunderna fortfarande vill köpa 100 limpor måste falla till 1 euro! Att köpa en limpa för 2 euro (skattefritt) måste ju vara samma sak som att köpa en limpa för 1 euro och dessutom behöva skicka in 1 euro till myndigheterna. Skifta alltså ner efterfrågekurvan med skattens storlek.
  7. Läs av den nya jämvikten. Det här blir priset i butiken, det pris som säljarna får.
  8. Priset i butiken blir inte konsumentens “slutgiltiga” pris, för utöver detta ska hon ju nu också skicka in en euro till staten. Gå alltså upp till den ursprungliga efterfrågekurvan (som ju ligger 1 euro längre upp). Här ser du konsumentens slutgiltiga pris (när skatten är betald). En lärdom från den här övningen är att det i praktiken är fullständigt oväsentligt huruvida skatten, rent adiministrativt, läggs på producenten eller konsumenten.


Ingrepp på marknaden för begagnad kurslitteratur

I slutet av Kapitel 3 startade du en sajt för handel med begagnad kurslitteratur. Din marknadsplats har gjort stor succé. Efterfrågan är \(\small Q_D=7\,000 - 100P\) och utbudet är \(\small Q_S=50P - 500\), där Q är antalet kursböcker och P är priset i euro. Vi antar för enkelhets skull att alla böcker säljs för samma pris.

  1. I jämvikt blir priset per bok och det handlas .

Allt fler rop hörs dock på behovet av olika typer av ingrepp på marknaden. Du ska nu analysera hur respektive ingrepp skulle påverka marknaden:

  1. Studentkåren har hört av sig med arga klagomål. De tycker att priset på din marknad är orimligt högt. “Alla studenter måste ha råd med kurslitteratur”, hävdar de. De kräver därför att myndigheterna inför ett pristak på 30 euro per bok. Om pristaket införs kommer det att säljas böcker; producentöverskottet PÖ faller från euro till euro och konsumentöverskottet KÖ ökar från euro till maximalt euro.
  2. Även Föreningen för en aktiv ungdom klagar. De tycker att ungdomar ska vara ute i naturen i stället för att läsa kursböcker. De kräver därför att myndigheterna inför en kvot på 1 000 böcker. Anta att kvoten införs. Priset på marknaden blir i så fall , vilket ger en dödviktsförlust på euro.
  3. Själv vill du införa en avgift på marknaden (tänk ‘skatt’): Varje gång en bok handlas måste säljaren betala dig 6 euro. Effekten av en sådan avgift blir att att handeln på marknaden faller till , att priset för köparna höjs till , att säljarna efter avgiften är betald får per bok och att dina intäkter från avgiften blir sammantaget euro.
  1. Sätt \(\small Q_D=Q_S\) och lös ut vilket pris som gör att kunderna vill köpa lika mycket som säljarna vill sälja.
  2. Det här är en svår uppgift. Tricket är att rita upp figuren och ta det lugnt. Vid priset 30 euro visar utbudskurvan att säljarna vill sälja 1 000 böcker, så det blir den nya mängden som handlas (man kan ju inte tvinga säljare att sälja om de inte vill). I utgångsläget var PÖ den stora nedre triangeln, vars yta är 40 000 euro (eftersom basen är 2 000 och höjden är 40). När pristaket 30 euro är infört blir PÖ endast 10 000 euro (eftersom basen i den nya triangeln är 1 000 och höjden 20). KÖ i utgångsläget var 20 000 euro (eftersom basen är 2 000 och höjden är 20). Tänk så här för att räkna ut det nya KÖ: Detta område består av en stor rektangel och en liten triangel. Tricket här är att lista ut vilket pris som gör att konsumenterna vill köpa 1 000 böcker. Sätt därför in \(\small Q=1\,000\) i den inversa efterfrågefunktionen så får du \(\small P_D=70 - 0,01*1\,000=60\). Arean av den lilla triangeln längst upp blir därför 5 000 euro och ytan av den stora rektangeln blir 30 000 euro.
  3. Det nya priset blir 60. För att räkna ut DÖ behöver du först lista ut vilket pris som gör att säljarna vill sälja 1 000 böcker. Sätt därför in \(\small Q=1\,000\) i den inversa utbudsfunktionen så får du \(\small P_S=10 + 0,02*1\,000=30\). Nu har du alltså siffror du behöver för att räkna ut dödviktsförlusten; DÖ är ju arean av triangeln som har basen 30 och höjden 1 000.
  4. Som alltid är det viktigt att du ritar upp figuren för dig själv för att se vad som händer. Du är sajtens ägare, du kan tänka att du är “staten”. Att tvinga säljarna att betala 6 euro i avgift varje gång de säljer en bok innebär att utbudskurvan skiftar upp med 6 euro. Du hittar därför den ny jämvikten genom att ta \(\small 10+0,02Q+6 = 70-0,01Q\), vilket ger dig \(\small Q = 1800\). Vilket pris gör att kunderna vill köpa 1 800 böcker? Jo, \(\small P_D=70 - 0,01*1\,800=52\). Säljarnas pris efter att de har skickat in avgiften blir alltså 46 euro. Dina intäkter från avgiften blir 10 800 euro (eftersom det handlas 1800 böcker och du får 6 euro per bok).


Pristak på hyresmarknaden

Det är lätt att få ett förstahandskontrakt på en bostad i Åbo centrum, men nästan omöjligt i Stockholm city. Varför är det egentligen så? Anta att följande skiss visar utbudet och efterfrågan på små hyresrätter i Åbo. Om du vill läsa mer om bostadsmarknaden i Sverige vs Finland kan du läsa här.

Hur ett pristak påverkar försäljningen

  1. Förklara med egna ord varför hyresrätten i Åbo kommer att kosta 700 euro, givet att vi inte infört något pristak.
  2. I frånvaro av pristak blir konsumentöverskottet KÖ i figuren , men kan du med egna ord förklara vad den siffran betyder i klartext?
  3. I frånvaro av pristak blir producentöverskottet PÖ i figuren , men kan du med egna ord förklara vad den siffran betyder i klartext?
  4. Studentorganisationerna rasar: Det är orimligt att små hyresrätter ska kosta 700 euro i månaden, studenterna har ju inte råd! De kräver därför ett pristak på 400 euro. Antalet hyresrätter som hyrs ut blir i så fall , medan antalet hyresrätter som efterfrågas vid detta låga pris blir .
  5. Hur bör de ansvariga, enligt dig, fördela de 200 hyresrätterna bland de 800 personerna som vill ha dem?
  1. Tänk på vad som skulle hända om priset inte var 700, utan till exempel 400 euro eller 900 euro.
  2. Att förklara KÖ är inte enkelt. Skriv alltså ner ditt svar på papper, så att du inte gör det för första gången när det är en stressad tentamenssituation. Ett svar som ger full poäng vore något i stil med “De konsumenter som fick handla på marknaden värderade sammantaget sina köp till 100 000 euro mer än vad de faktiskt tvingades betala”. Ett svar som till exempel saknar ordet “euro” får poängavdrag. Var alltså noggrann och uttryck dig så enkelt och tydligt som möjligt.
  3. Träna på att formulera ett bra svar. Skriv ner ditt svar och läs det noga. Är det begripligt? Är det exakt? Har du med ordet “euro” i ditt svar? “De säljare som fick handla på marknaden fick sammantaget 125 000 euro mer när de sålde än vad de faktiskt innerst inne hade varit beredda att sälja för”.
  4. Vad skulle hända på en oreglerad marknad om priset vore 400 euro?
  5. Lottning? Köer? Ett system där alla sökande får skriva ansökningar där de beskriver varför just de förtjänar en lägenhet? Dela ut lägenheter till släktingar? Dela ut lägenheter till sökande som kommer förbi och bjuder på tårta (och andra mutor)?


Minimilön

Den 1 april 2024 chockhöjde Kalifornien minimilönen för alla som jobbar inom snabbmatsrestauranger från 16 dollar till 20 dollar. I den här uppgiften ska du visa vilka effekten den här reformen troligen kommer att få. Titta först på följande korta nyhetsinslag om reformen:

  1. Figuren nedan är en skiss över arbetsmarknaden i en stad i Kalifornien. Gäller lagen om utbudet, givet att ingen minimilön införts? Svar: .

  2. Varför blir lönen 16 dollar i timmen när vi inte har en minimilön? Förklara!

  3. Facket rasar: “Det är orimligt att arbetare bara ska tjäna 16 dollar i timmen. Arbetarna, ofta studenter, har inte råd att leva!” Facket kräver därför att en minimilön på 20 dollar införs. Antalet arbetare som restaurangerna anställer blir i så fall , medan antalet arbetare som vill bjuda ut sin arbetskraft vid denna höga lön blir .

  4. Hur bör man, enligt dig, fördela de 400 jobben bland de 1 500 personerna som vill ha dem?

  5. Är du för eller emot höjda minimilöner? Svar: .

  1. Vill fler jobba när lönen går upp?
  2. Vad skulle hända om timlönen inte vore 16 dollar?
  3. Notera alltså att minimilöner ger upphov till arbetslöshet.
  4. Intervjuer? Tid i arbetslöshet? Lottning? Personliga kontakter?
  5. Det här beror på dina värderingar, det finns alltså inget rätt eller fel.


Finland höjer momsen 1 september 2024

Den 1 september 2024 höjdes konsumtionsskatterna i Finland. Tidigare var det momsen oftast 24 procent. Nu höjdes denna plötsligt till 25,5 procent. I den här uppgiften ska du fundera över hur de höjda skatterna påverkar priserna i butikerna.

  1. Vad säger teorin ska hända med priserna i butikerna när momsen höjs? Förklara med enkla ord!
  2. Före reformen, när momsen fortfarande var 24%, köpte jag en elcykel. I figuren har jag illustrerat jämvikten i rött: Skatten (som motsvarade ungefär 706 euro för min cykel) gjorde att priset för mig som konsument blev 3 649 euro medan cykelbutiken fick 2 943 euro kvar när de skickat in skatten till staten. Momshöjningen innebar att skatten höjdes med ytterligare cirka 45 euro. Vad händer troligen med priset i butiken när momsen höjs? Svar: .
  3. Hur påverkar momshöjningen troligen hur många elcyklar som säljs? Svar: .
  4. Förklara med egna ord: Vad är det som påverkar hur stor del av skattehöjningen på 45 euro som butikerna kan “vältra över” på kunderna?
  5. Förklara med egna ord: Tror du att elcykelbutiken kan vältra över en större del av momshöjningen på konsumenterna jämfört med blomsteraffären Tähkäs möjligheter att vältra över momshöjningen på sina konsumenter? Motivera!
  1. Skatten kommer troligen att höja priset i butik men inte med hela skattens storlek. Bördan av skatten faller på både kunder och företag. Exakt hur skattebördan fördelas beror på priselasticiteten hos respektive grupp; den part som är mest okänslig för priset kommer att bära en större del av skatten.
  2. Se ovan.
  3. Se ovan.
  4. Skriv ner ett bra eget svar på papper. På tentamen finns ingen tid att fundera, utan det måste sitta direkt.
  5. Skriv ner ett bra eget svar på papper. På tentamen finns ingen tid att fundera, utan det måste sitta direkt.


Subvention av högre utbildning

I ett land bedrivs universitetsutbildningen uteslutande i privat regi. Efterfrågan och utbudet ges av \(\small Q_D=120\,000-160P\) respektive \(\small Q_S=-36\,000+100P\), där Q är antalet utbildningsplatser och P är terminsavgiften i dollar.

  1. Terminsavgiften på marknaden blir och antalet studenter blir .
  2. För att få fler studenter att plugga väljer nu regeringen att subventionera varje plats med 260 dollar. Den nya terminsavgiften för en student blir därmed .
  3. Många andra grupper i samhället behöver också ekonomiskt stöd. Vad kostar det totalt sett staten att subventionera utbildningen? Svar: .
  1. Se lösningen nedan. Sätt Qd=Qs och se vilket priset som säkerställer att universitetet vill sälja många utbildningsplatser som studenterna vill köpa. Illustrera lösningen så blir det lättare. Att ta de inversa funktionerna är användbart för framtiden. \(\small Q_D=120\,000-160P\) kan skrivas om till \(\small P_D=750-0,00625Q\) och \(\small Q_S=-36\,000+100P\) som \(\small P_S=360+0,01Q\).
  2. Tänk dig att universiteten får 260 dollar för varje student. Detta kommer att skifta ner utbudskurvan med subventionens storlek (en skatt skiftar ju upp utbudskurvan och en subvention är ju motsatsen till en skatt). Den nya utbudskurvan blir därför \(\small P_S=100+0,01Q\). Nu kan du räkna ut den nya terminsavgiften för studenterna.
  3. Du kan räkna ut att antalet studenter tack vare subventionen ökar till 40 000. För varje student ska universiteten får 260 dollar.

Matematisk uträkning av hur en subvention påverkar försäljningen


Skatten på arbete

Nationalekonomer har ofta ett mycket stort inflytande i politiken. I det här videoklippet diskuterar ekonomen Arthur Laffer hur det gick till när han för första gången ritade Laffer-kurvan på en servett, och därigenom påverkade skattepolitiken i USA men också i stora delar av världen.

  1. Vad säger Lafferkurvan? Sammanfatta i en mening!
  2. Tror du att höjda skatter på arbete i Finland skulle göra att skatteintäkterna ökar eller minskar?
  1. Skriv upp ett bra svar. Notera att Laffer ritar sin kurva med skattesatsen på den vertikala och skatteintäkterna på den horisontella men det är ju en smaksak.
  2. Det här är en intressant forskningsfråga. I till exempel kursen Arbetsmarknadsekonomi får du lära dig mycket mer om olika fenomen i arbetslivet.


  • Mer om skatterna i Finland kan du lära dig här och här.