---
title: ""

format: 
  html:
    fig-width: 9
    fig-height: 8
    fig-dpi: 300
    embed-resources: TRUE # Entwicklung
    theme: "null" # Entwicklung
    # embed-resources: FALSE # Veröffentlichung
    # theme: none # Veröffentlichung

execute: 
  echo: FALSE
  output: asis
  warning: FALSE
  error: FALSE
---

```{r}
#| label: pakete
#| output: false
library(tidyverse)
library(SMChelpR)
library(scales)
library(DT)
# library(zoo)
library(plotly)

try(setwd(dirname(rstudioapi::getActiveDocumentContext()$path)))


file_name_code <- "Windausbauszenarien.qmd"
imagepath <-
  file.path("fileadmin", "user_upload", "produkte", "Energiewendereport")
dir.create(imagepath, showWarnings = FALSE)

## workspace directory in RStudio interaktiv
if(rstudioapi::isAvailable()) {
  setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
}

if(is.na(file_name_code)){stop("Dateiname der qmd nicht gesetzt")}
if(imagepath == file.path("fileadmin", "user_upload", "produkte")){stop("Pfad für Dateien nicht gesetzt")}

file.copy(
  from = file_name_code, 
  to = file.path(imagepath, paste0(today(), "_", file_name_code)), 
  overwrite = TRUE)
```


```{r}
#| label: set-graphic-parameters
#| output: true

options(list(digits = 6, scipen = 999)) # set scientific notation to be off
SMC_theme_ggplot()

caption_MaSta <-
  "Quelle: Marktstammdatenregister, Berechnungen: Science Media Center Germany."

if(exists("caption_")){stop("Caption wurde nicht angepasst")}
```

```{r}
#| label: load data

# wind extended
wind_extended <-
  GraphQL_get_table_vec(
    variablen = c(
      "MastrNummer",
      "Nettonennleistung",
      "Bundesland",
      "EinheitBetriebsstatus",
      "Inbetriebnahmedatum",
      "Lage",
      "DatumEndgueltigeStilllegung",
      "DatumBeginnVoruebergehendeStilllegung"
    ),
    tabellenname = "data_marktstammdaten_wind_extended"
  ) |>
  left_join(
    GraphQL_get_table_vec(
      # permits_units
      tabellenname = "data_marktstammdaten_permits_units",
      variablen = c(
        "MastrNummer",
        "FristGenehmigung",
        "DatumGenehmigung",
        "ArtGenehmigung"
      )
    ),
    by = "MastrNummer"
  ) |>
  left_join(
    GraphQL_get_table_vec(
      # Ausschreibungen BNetzA
      tabellenname = "data_marktstammdaten_tenders_bnetza",
      variablen = c(
        "Ausschreibungsdatum_BNetzA",
        "Ausschreibungsnummer_BNetzA",
        "MastrNummer"
      )
    ),
    by = "MastrNummer"
  ) |>
  left_join(
    GraphQL_get_table_vec(
      # Meldedaten eeg
      variablen = c(
        "MastrNummer",
        "Ausschreibungsdatum_EEG",
        "Ausschreibungsnummer_EEG"
      ),
      tabellenname = "data_marktstammdaten_tenders_eeg"
    ),
    by = "MastrNummer"
  ) |>
  mutate(
    Inbetriebnahmedatum = as.Date(Inbetriebnahmedatum),
    DatumEndgueltigeStilllegung = as.Date(DatumEndgueltigeStilllegung),
    DatumBeginnVoruebergehendeStilllegung = as.Date(DatumBeginnVoruebergehendeStilllegung),
    FristGenehmigung = as.Date(FristGenehmigung),
    DatumGenehmigung = as.Date(DatumGenehmigung),
    Ausschreibungsdatum_BNetzA = as.Date(Ausschreibungsdatum_BNetzA),
    Ausschreibungsdatum_EEG = as.Date(Ausschreibungsdatum_EEG),
    Auschreibungsmonat = floor_date(Ausschreibungsdatum_BNetzA, "month"),
    Realisierungsdauer_Monate = as.numeric(Inbetriebnahmedatum - Ausschreibungsdatum_EEG) / (365 /
                                                                                                  12),
    `Nettonennleistung in MW` = Nettonennleistung / 1000
  )|>
filter(Lage == "Windkraft an Land")


## Korrektur Dubletten
ersteintrag <- c(
  "SEE950271895884",
  "SEE958839237145",
  "SEE964821060233",
  "SEE974913499520",
  "SEE969253203555",
  "SEE956093476317",
  "SEE974989546432",
  "SEE999767129621",
  "SEE953234557638",
  "SEE998173626847",
  "SEE943933689785",
  "SEE945200307392",
  "SEE948835953422",
  "SEE934245360936",
  "SEE907832445804",
  "SEE962629976688",
  "SEE940396128394",
  "SEE925954435411",
  "SEE906959307538",
  "SEE998723793487",
  "SEE930928931134",
  "SEE976915898585",
  "SEE930119071366",
  "SEE921221140514",
  "SEE942466803439",
  "SEE901479689096",
  "SEE979823110190",
  "SEE935249353016",
  "SEE930999482603",
  "SEE972782520383",
  "SEE981449567852",
  "SEE935518372724",
  "SEE957533975766",
  "SEE923899840635",
  "SEE954991990447",
  "SEE988474469175",
  "SEE938294673320",
  "SEE977175100746",
  "SEE980843719812",
  "SEE986904158972",
  "SEE934314622118",
  "SEE951316891281",
  "SEE998154307796",
  "SEE997528188092",
  "SEE968124847362",
  "SEE989306217193",
  "SEE902892573009",
  "SEE923032247550",
  "SEE933627958693",
  "SEE926196992090",
  "SEE980872491475",
  "SEE936663062324",
  "SEE967107796062",
  "SEE954210948051"
)

dublette <- c(
  "SEE929145282983",
  "SEE989863162646",
  "SEE961924553785",
  "SEE981123171559",
  "SEE980706304087",
  "SEE926820010701",
  "SEE979724982896",
  "SEE936322761209",
  "SEE980050227988",
  "SEE931802139516",
  "SEE955817380367",
  "SEE909273743037",
  "SEE912209308651",
  "SEE918226684280",
  "SEE941541371825",
  "SEE919099302769",
  "SEE994892807031",
  "SEE970274785159",
  "SEE937511941570",
  "SEE920165701096",
  "SEE950564441118",
  "SEE923531397947",
  "SEE930619222749",
  "SEE973787639278",
  "SEE997495827222",
  "SEE970991861914",
  "SEE925692729698",
  "SEE911188940227",
  "SEE966233135110",
  "SEE900718594580",
  "SEE969773416404",
  "SEE914843460641",
  "SEE983674072347",
  "SEE947202984502",
  "SEE979044888557",
  "SEE974032921988",
  "SEE971648090794",
  "SEE922464199468",
  "SEE949319291177",
  "SEE939186083272",
  "SEE922464199468",
  "SEE967553125973",
  "SEE977633937808",
  "SEE962424388006",
  "SEE976998345075",
  "SEE905026450283",
  "SEE953449560348",
  "SEE985983191924",
  "SEE925298034653",
  "SEE918465271586",
  "SEE968673887321",
  "SEE936663062324",
  "SEE906806953550",
  "SEE950890557774"
)

wind_extended <-
  wind_extended %>%
  filter(!(MastrNummer %in% dublette))



```


```{r}
#| label: Funktion Windkraftausbau abhängig Monatsgewichten
Ausbau_berechnen <- function(Monatsgewichte) {
  Zubau_bisher <-
  wind_extended |>
  filter(EinheitBetriebsstatus != "In Planung") |>
  mutate(Baudatum = floor_date(Inbetriebnahmedatum, "month")) |>
  summarise(
    `Zubau in MW` = sum(Nettonennleistung) / 1000,
    .by = c(`Baudatum`)
  ) |> 
left_join(
    wind_extended |>
    filter(EinheitBetriebsstatus == "Endgültig stillgelegt") |>
    mutate(Baudatum = floor_date(DatumEndgueltigeStilllegung, "month")) |>
    summarise(
    `Endgueltige Stilllegung in MW` = sum(Nettonennleistung) / 1000,
    .by = c(`Baudatum`)
    )
  )  |>
  left_join(
    wind_extended |>
    filter(EinheitBetriebsstatus == "Vorübergehend stillgelegt") |>
    mutate(Baudatum = floor_date(DatumBeginnVoruebergehendeStilllegung, "month")) |>
    summarise(
    `Voruebergehende Stilllegung in MW` = sum(Nettonennleistung) / 1000,
    .by = c(`Baudatum`)
    )
  )  |>
  replace_na(list(`Voruebergehende Stilllegung in MW` = 0, `Endgueltige Stilllegung in MW` = 0, `Zubau in MW` = 0)  ) |>
  mutate(`Nettonennleistung in MW` = `Zubau in MW` - `Endgueltige Stilllegung in MW` - `Voruebergehende Stilllegung in MW`) |> 
  full_join(
    tibble(
      Baudatum = seq.Date(floor_date(today(), "year"), 
                          floor_date(today() + years(3), "year"), 
                          by = "month")
      ), 
    by = "Baudatum") |> 
  mutate(`Nettonennleistung in MW` = 
           if_else(is.na(`Nettonennleistung in MW`), 
                   0, 
                   `Nettonennleistung in MW`), 
         status = "Gebaut")


Zubau_in_Planung <-
  wind_extended |>
  filter(EinheitBetriebsstatus == "In Planung",!is.na(Ausschreibungsdatum_BNetzA)) |>
  summarise(`Nettonennleistung in MW` = sum(`Nettonennleistung in MW`),
            .by = Ausschreibungsdatum_BNetzA) |>
  arrange(Ausschreibungsdatum_BNetzA) |>
  mutate(status = "Bezuschlagt") |>
  bind_rows(
    ### Hier zukuenftige Ausschreibungsdaten einfuegen
    tibble(
      Ausschreibungsdatum_BNetzA = as.Date(c("2023-8-01", "2023-11-01", "2024-02-01", "2024-05-01", "2024-08-01")),
      `Nettonennleistung in MW` = c(1670, 3210, 2500, 2500, 2500),
      status = "Zukünftige Ausschreibungen"
    )
  ) |>
  expand_grid(Realisierungsdauer_Monate = Monatsgewichte$Realisierungsdauer_Monate) |>
  mutate(`Baudatum` = Ausschreibungsdatum_BNetzA + months(Realisierungsdauer_Monate)) |>
  filter(`Baudatum` > today()) |>
  left_join(Monatsgewichte, by = "Realisierungsdauer_Monate") |>
  mutate(Nettonennleistung_Anteil =
           `Nettonennleistung in MW` * Anteil / sum(Anteil),
         .by = Ausschreibungsdatum_BNetzA) |>
  summarise(
    `Nettonennleistung in MW` = sum(Nettonennleistung_Anteil),
    .by = c(`Baudatum`, status)
  ) |>
  ## füge bisher gebaute ein
  bind_rows(
    Zubau_bisher
  ) |>
  arrange(`Baudatum`, status) |>
  mutate(
    `kumulierter Zubau in MW` = round(cumsum(`Nettonennleistung in MW`)),
    `Zubau in MW` = round(`Nettonennleistung in MW`),
    .by = status
  ) |>
  mutate(
    status = factor(
    status,
    levels = c(
               "Zukünftige Ausschreibungen",
               "Bezuschlagt", 
               "Gebaut"
               )
  ))
return(Zubau_in_Planung)
}

```

```{r}
#| label: Funktion Grafik erwarteter Zubau
Ausbau_darstellen <- function(Zubau_in_Planung, filename, title) {
Ausbau_gesamt <- 
  Zubau_in_Planung |> 
  filter(
   Baudatum >= as.Date("2023-01-01"),
   Baudatum <= as.Date("2024-12-31")
   ) |> 
  mutate(
    `Installierte Leistung (GW)` = `kumulierter Zubau in MW` / 1000, 
    Baudatum = factor(format(Baudatum, "%b '%y"), 
    levels = unique(format(Baudatum, "%b '%y")))
    ) %>% 
  summarise(`Installierte Leistung (GW)` = sum(`Installierte Leistung (GW)`), 
            .by = Baudatum)


tmp <- 
  Zubau_in_Planung |> 
  filter(
   Baudatum >= as.Date("2023-01-01"),
   Baudatum <= as.Date("2024-12-31")
   ) |> 
  mutate(
    `Installierte Leistung (GW)` = `kumulierter Zubau in MW` / 1000, 
    Baudatum = factor(format(Baudatum, "%b '%y"), 
    levels = unique(format(Baudatum, "%b '%y"))),
    Status = status
  ) |> 
  write_csv(
    file.path(imagepath, paste0(today(), "_", filename, ".csv"))
  ) |>
  ggplot(
    aes(
      x = Baudatum,
      y = `Installierte Leistung (GW)`,
      fill = Status,
      text = paste0(status, ": ", `Installierte Leistung (GW)`, " GW")
    )
  ) + 
  geom_col(
    data = Ausbau_gesamt,
    aes(
      x = Baudatum,
      y = `Installierte Leistung (GW)`,
      text = paste0("Gesamt: ", `Installierte Leistung (GW)`, " GW")
    ), inherit.aes = FALSE) +
  geom_col() +
  theme(
    axis.text.x = element_text(
      angle = 45,
      hjust = 1
    )
  ) + 
  coord_cartesian(ylim = c(58, 69))  +
  scale_y_continuous(breaks = 50:70, expand = c(0.01,0.01)) + 
  labs(title = title, 
       x = "")

# ausbauziel_2023 <- 66
ausbauziel_2024 <- 69

tmp <- tmp + 
  # geom_hline(yintercept = ausbauziel_2023) + # Zahlen validieren!
  geom_hline(yintercept = ausbauziel_2024) 

# tmp <- tmp +
#   annotate(
#     "text",
#     x = "Apr '23",
#     y = ausbauziel_2023 - 0.5,
#     label = paste0("Ziel 2023: ", ausbauziel_2023, " GW"),
#     hjust = 0,
#     size = 4.2
#   )

tmp <- tmp + 
  annotate(
    "text",
    x = "Apr '23",
    y = ausbauziel_2024 - 0.5,
    label = paste0("Ziel 2024: ", ausbauziel_2024, " GW"),
    hjust = 0,
    size = 4.2,
    text=paste("")
  )


return (tmp)
}

```


::: m-news-single__ce
 
- Windenergie-Ausbau wird (de facto) über Ausschreibungen der Bundesnetzagentur gesteuert
- aus Ausschreibungsergebnissen, Marktstammdatenregisterauswertung und künftigen Ausschreibungen ist eine erwartbare Ausbaumenge der Windleistung berechenbar
- Ergebnis: das vom EEG vorgegebene Ziel von 69 Gigawatt (GW) bis Ende 2024 ist wohl nicht mehr zu erreichen 

Der Zubau an Windenergieleistung beschleunigt sich weiter. Während es im Jahr 2022 einen Bruttozubau von
2,4 GW gab, sind für 2023 rund 3,8 GW erwartbar, für 2024 sogar 4,9 GW. Vorausgesetzt, die Anlagen werden auch weiter so schnell gebaut wie bisher. Für das vom [EEG](https://www.gesetze-im-internet.de/eeg_2014/index.html){target="_blank"} für 2024 vorgegebene Ziel von 69 GW installierter Leistung reicht das jedoch nicht. Das zeigt die folgende Analyse, die sich auf das Marktstammdatenregister sowie die Ergebnisse der Ausschreibungen zur Ermittlung der finanziellen Unterstützung geplanter Windkraftanlagen stützt. Weitere Aussendungen zur Energiewende finden Sie auf unserer [Übersichtsseite](https://www.sciencemediacenter.de/alle-angebote/energiewende/){target="_blank"}. Die detaillierte Erläuterung zu den Ausschreibungen, zum Modell, Brutto- und Netto-Ausbau und den dahinter stehenden Annahmen finden Sie im Anschluss an die Ergebnisse der Auswertung:

```{r}
#| label: Grafik erwarteter Zubau
filename <- "Basisszenario"

Monatsgewichte <-
  wind_extended |>
  mutate(Realisierungsdauer_Monate = as.integer(round(Realisierungsdauer_Monate))) |> 
  filter(
    !is.na(Realisierungsdauer_Monate),
    Realisierungsdauer_Monate > 0,
    Realisierungsdauer_Monate <= 40
  )  |>
  summarise(Leistung = sum(`Nettonennleistung in MW`), .by = Realisierungsdauer_Monate) |>  # Anteil Leistung
  mutate(Anteil = Leistung / sum(Leistung), 
         Verteilung = cumsum(Anteil))

Zubau_in_Planung <- Ausbau_berechnen(Monatsgewichte = Monatsgewichte)

tmp <- Ausbau_darstellen(Zubau_in_Planung = Zubau_in_Planung, filename = filename, title = "Windkraftausbau bis 2024") 


ggplotly_SMC(tmp, tooltip="text") |>
  plotly::layout(
    legend = list(y = -0.35),
    hovermode = "x unified"
  )

tmp |>
  image_helper(paste0(today(), "_", filename),
               imagepath,
               plotly = TRUE,
               caption = caption_MaSta)
```

- blau: die seit dem 1. Januar 2023 bis zum Veröffentlichungsdatum dieses Reports in Betrieb gegangene Windkraft-Leistung abzüglich der vom Netz gegangenen Altanlagen: Netto-Zubau. 
- grün: Windkraftanlagen, die einen Zuschlag für die Förderung erhalten haben, aber noch nicht gebaut sind und deren Inbetriebnahme entsprechend der durchschnittlichen, monatlichen Verteilung der Inbetriebnahmen in den vergangenen Jahren (siehe unten) erwartet werden kann, ohne Abzug zukünftig vom Netz gehender Anlagen: Brutto-Zubau.
- rot: Windkraftanlagen, die in den kommenden [sechs Ausschreibungen](https://www.gesetze-im-internet.de/eeg_2014/__28.html){target="_blank"}  noch einen Zuschlag für die Unterstützung bekommen dürften und danach gebaut würden. Als Mengen setzt das Modell: August-Ausschreibung 1,6 GW, November 3,2 GW, 2024 viermal je 2,5 GW. Das sind die maximal möglichen Mengen -- eine optimistische Annahme, denn das wurde in der Vergangenheit nur selten erreicht. Ohne Abzug künftig vom Netz gehender Anlagen: Brutto-Zubau. 
- Zielangabe für den Zubau [69 GW](https://www.gesetze-im-internet.de/eeg_2014/__4.html){target="_blank"}. 

Das Szenario zeigt: **Bei gleichbleibender Verteilung der Realisierungsdauer dürfte das Ausbauziel für 2024 deutlich verfehlt werden.** In der Modellrechnung fehlen knapp 3 GW installierte Leistung. Berücksichtigt man die geringere Auslastung von Windkraftanlagen, entspricht dies in etwa der Strommenge, die ein großer Braunkohlekraftwerksblock unter Volllast produziert.

Es besteht jedoch theoretisch die Möglichkeit, durch einen schnelleren Bau der Windkraftanlagen die Zeitspanne zur Inbetriebnahme -- die Realisierungsdauer -- zu verkürzen. Diskutiert wurde im Juli 2023 zum Beispiel über die Genehmigungen für Schwertransporte, mit denen Rotoren oder Turmsegmente geliefert werden. Diese benötigen offenbar bis zu drei Monate. Würde diese Spanne deutlich verkürzt, oder die Realisierungsdauer anderweitig beschleunigt, zum Beispiel um zwei Monate, fiele das Ergebnis etwas besser aus:   

```{r}
#| label: Grafik Szenario bei beschleunigter Realisierungsdauer
filename <- "Szenario2"

Monatsgewichte <-
  wind_extended |>
  mutate(Realisierungsdauer_Monate = as.integer(round(Realisierungsdauer_Monate)) - 2) |> 
  filter(
    !is.na(Realisierungsdauer_Monate),
    Realisierungsdauer_Monate > 0,
    Realisierungsdauer_Monate <= 40
  )  |>
  summarise(Leistung = sum(`Nettonennleistung in MW`), .by = Realisierungsdauer_Monate) |>  # Anteil Leistung
  mutate(Anteil = Leistung / sum(Leistung), 
         Verteilung = cumsum(Anteil))

Zubau_in_Planung <- Ausbau_berechnen(Monatsgewichte = Monatsgewichte)

tmp <- Ausbau_darstellen(Zubau_in_Planung = Zubau_in_Planung, filename = filename, title = "Szenario bei beschleunigter Realisierungsdauer") 


ggplotly_SMC(tmp, tooltip="text") |>
  plotly::layout(
    legend = list(y = -0.35),
    hovermode = "x unified"
  )

tmp |>
  image_helper(paste0(today(), "_", filename),
               imagepath,
               plotly = TRUE,
               caption = caption_MaSta)
```

Bis zum 69 GW Ziel im EEG fehlen jedoch immer noch knapp 2 GW installierte Windenergieleistung. Diese lassen sich im Szenario nur dann erreichen, wenn die Realisierungsdauer um fünf Monate verkürzt wird. Das erscheint unrealistisch. Die Frage ist, wie sich das Verfehlen des Ausbauziels für Windenergie an Land auf andere Bereiche der Energiewende auswirken wird. (Dazu wird das SMC in den kommenden Tagen eine Einschätzung durch Experten veröffentlichen).


### Das Modell

Hintergrund für das Modell ist das Verfahren, mit dem die Höhe der finanziellen Unterstützung für Windkraftanlagen an Land ermittelt wird (in dieses Verfahren fließen noch weitere Faktoren ein) und die dabei entstehenden Daten. 

Wer in Deutschland neue Windkraftanlagen bauen will, setzt in der Regel auf die Förderung durch eine Marktprämie. Das ist ein garantierter Mindestpreis für eine Kilowattstunde Strom, der für jeden Windpark gesondert ermittelt wird. Das [Verfahren](https://www.gesetze-im-internet.de/eeg_2014/BJNR106610014.html#BJNR106610014BJNG000701123){target="_blank"} ist im Erneuerbaren Energien Gesetz EEG geregelt. Kredite für den Bau werden dadurch deutlich günstiger, da Kreditgeber diese Vergütung als Sicherheit ansehen. Ein Faktor für die Höhe der Marktprämien ist der „Anzulegende Wert“ für die von Windkraft erzeugte Kilowattstunde Strom. Dieser wird in einer [Auktion](https://www.gesetze-im-internet.de/eeg_2014/__22.html){target="_blank"} ermittelt, die an [vier Stichtagen im Jahr]( https://www.gesetze-im-internet.de/eeg_2014/__28.html){target="_blank"} von der Bundesnetzagentur ausgeschrieben wird. Die Windenergie-Leistungsmenge ist dabei begrenzt, der Höchstpreis, den Projektierer angeben dürfen, ist ebenfalls vorgegeben. Die Idee ist: Gibt es Projekte mit mehr Leistung, als ausgeschrieben ist, unterbieten sie sich, um einen Zuschlag zu bekommen. So soll erreicht werden, dass die Marktprämie sich quasi von selbst auf das niedrigstmögliche Maß reduziert. Dafür müssten aber die Auktionen überzeichnet werden. Das sind sie in der Regel jedoch nicht. 

Im Prinzip muss kein Projektierer die Marktprämie in Anspruch nehmen. Allerdings kommt das nach Auskunft der Fachagentur Windenergie an Land derzeit so gut wie nicht vor. Nahezu alle Windkraft-an-Land-Projekte durchlaufen die Auktionen, diese bewirken daher eine Mengensteuerung des Windenergie-Zubaus. Das macht eine Berechnung der wahrscheinlich zu erwartenden Leistungsmenge für die kommenden zwei Jahre möglich. (Zu den Grenzen siehe Limitationen). 

Die bei diesem Prozess anfallenden Daten finden sich im 
[Marktstammdatenregister](https://www.marktstammdatenregister.de/MaStR){target="_blank"}, in dem die Projektierer unter anderem den Planungsstand ihrer Anlagen eintragen, und in den [Mitteilungen der Ausschreibungsergebnisse](https://www.bundesnetzagentur.de/DE/Fachthemen/ElektrizitaetundGas/Ausschreibungen/Wind_Onshore/BeendeteAusschreibungen/start.html){target="_blank"} durch die Bundesnetzagentur. Mit dem Zuschlag ist ein Stichtag verknüpft, von dem ab eine Frist von 24 bis 30 Monaten für die Inbetriebnahme der Anlage läuft. Diese Angaben nutzen wir für unser Modell, um den zu erwartenden Windkraftausbau in folgenden Schritten zu berechnen:

1. **Berechnung der Realisierungsdauer**: Wie viele Monate vergehen zwischen Zuschlag und Inbetriebnahme einer Anlage.

2. **Verteilung der Realisierungsdauer**: Nach wie viel Monaten wurde welcher Anteil der Anlagen einer Ausschreibungsrunde in Betrieb genommen.

3. **Berechnung der erwartbaren Ausbaumenge**: Wie vielen Windkraftanlagen, die einen Zuschlag erhalten haben, aber noch nicht in Betrieb gegangen sind, dürften gemäß der Verteilung der Realisierungsdauer bis Ende 2024 wahrscheinlich ihren Betrieb aufnehmen. 


#### 1. Berechnung der Realisierungsdauer
Die Zeitspanne zwischen Bekanntgabe der Ausschreibungsergebnisse und dem Eintrag der Inbetriebnahme im Marktstammdatenregister ist die **Realisierungsdauer**. 
 
Für bereits gebaute Anlagen kann dies anhand des Marktstammdatenregisters berechnet werden. Wichtig ist dabei, ob diese Zeitspanne stabil ist oder sich in den zurückliegenden Jahren verändert hat. Dazu wird die Realisierungsdauer aller bisherigen Ausschreibungstermine betrachtet:

```{r}
#| label: Realisierungsdauer beim Windradbau nach Ausschreibungsdatum
 
tmp <- wind_extended |>
  filter(
    !is.na(Realisierungsdauer_Monate),
    Realisierungsdauer_Monate > 0
  )  |>
  arrange(Ausschreibungsdatum_EEG) |>
  mutate(
    Ausschreibungstermin = Ausschreibungsdatum_EEG,
    Realisierungsdauer = Realisierungsdauer_Monate,
    Ausschreibungstermin = factor(format(Ausschreibungstermin, "%b '%y"), 
    levels = unique(format(Ausschreibungstermin, "%b '%y"))),
  ) |>
  write_csv(
    file.path(imagepath, paste0(today(), "_", "Realisierungsdauer_nach_Ausschreibungstermin.csv"))
  ) |>
  ggplot(
    aes(
      x = Ausschreibungstermin, y = Realisierungsdauer
    )
  ) +
  geom_boxplot() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(
    x = "Ausschreibungstermin",
    y = "Realisierungsdauer in Monaten",
    title = "Realisierungsdauer nach Ausschreibungstermin"
  ) +
  scale_y_continuous(
    expand = c(0.01, 0.01)
  ) +
  scale_x_discrete(
    expand = c(0.01, 0.01)
    # breaks must be as text
  ) 

# tmp |> ggplotly_SMC()

tmp |> image_helper(
  paste0(today(), "_Realisierungsdauer_nach_Ausschreibungstermin"), imagepath, plotly = FALSE, caption = caption_MaSta)
```

Lesehilfe Boxplots: Die Boxen zeigen für jeden Ausschreibungstermin die Lage der Realisierungsdauern der mittleren 50 Prozent der gebauten Anlagen an. Die Striche darüber und darunter zeigen jeweils den Bereich an, in denen fast das gesamte untere beziehungsweise obere Viertel der Realisierungsdauern liegt. Nur besonders starke Ausreißer werden als einzelne Punkte dargestellt.

Ergebnis: Die Realisierungsdauer pendelt innerhalb eines engen Korridors nur wenig, ist also relativ konstant geblieben. Das Absinken der Dauer bei den Ausschreibungen seit September 2021 liegt statistisch gesehen daran, dass eine wachsende Zahl der Anlagen pro Ausschreibungstermin noch nicht gebaut ist. Das ist zu erwarten, weil diese Termine immer näher an die Gegenwart heranrücken.  

Damit kann man als Voraussetzung für ein Modell annehmen, dass die Realisierungsdauer sich auch in Zukunft ähnlich verhält.

#### 2. Verteilung der Realisierungsdauer
Windkraftanlagen werden unterschiedlich schnell gebaut und in Betrieb genommen. Für ein realistisches Szenario betrachten wir daher nicht die durchschnittliche Realisierungsdauer, sondern die **Verteilung der Realisierungsdauer**. Dazu errechnet das Modell, welcher Anteil der Windkraft in den jeweiligen Monaten nach dem Zuschlag einer Ausschreibung durchschnittlich in Betrieb genommen wurde:

```{r}
#| label: Dichte Realisierungsdauer
#| fig-width: 9 
#| fig-height: 8

tmp <- wind_extended |>
  filter(
    !is.na(Realisierungsdauer_Monate),
    Realisierungsdauer_Monate > 0,
    Realisierungsdauer_Monate <= 40,
  )  |>
  mutate(Realisierungsdauer = as.integer(round(Realisierungsdauer_Monate))) |> 
  summarise(Leistung = sum(`Nettonennleistung in MW`), .by = Realisierungsdauer) |>  # Anteil Leistung
  mutate(Anteil = round(Leistung / sum(Leistung) * 100, 2), 
         Verteilung = cumsum(Anteil)) |>
  write_csv(file.path(imagepath, paste0(today(), "_", "Verteilung_Realisierungsdauer.csv"))) |> 
  ggplot(
    aes(
      x = Realisierungsdauer, 
      y = Anteil
    )
  ) +
  geom_col(fill = colors_SMC("blue")) +
  scale_y_continuous(
    labels = percent_format(scale = 1),
    expand = c(0.01, 0.01)
  ) +
  scale_x_continuous(
    expand = c(0.01, 0.01)
  ) +
  labs(
    x = "Realisierungsdauer in Monaten",
    y = "Anteil",
    title = "Verteilung der Realisierungsdauer beim Windradbau"
  ) 

tmp |> ggplotly_SMC()
tmp |> image_helper(
  paste0(today(), "_Verteilung_Realisierungsdauer"), imagepath, plotly = TRUE, caption = caption_MaSta)
```

Ergebnis: Der Großteil der gebauten Anlagen wird etwa 12 bis 31 Monate nach einer Ausschreibung in Betrieb genommen, ein kleiner Teil früher oder später. Diese Verteilung ist die Grundlage der weiteren Berechnungen. 

```{r}
#| output: false
wind_extended |> 
  ggplot(aes(x = Realisierungsdauer_Monate, y = Nettonennleistung)) + 
  geom_point()

wind_extended |> 
  filter(
!is.na(Realisierungsdauer_Monate)) |> 
  summarise(Korrelation = cor(Realisierungsdauer_Monate, Nettonennleistung))
```


#### 3. Berechnung der erwartbaren Ausbaumenge
Anhand der Veröffentlichung der Ausschreibungsergebnisse durch Bundesnetzagentur ist bekannt, wie viel GW Windkraft zu jedem Ausschreibungstermin einen Zuschlag erhalten hat. Weiterhin ist aus dem Marktstammdatenregister bekannt, wie viel davon bereits als „in Betrieb“ eingetragen wurden. Für die **erwartbare Ausbaumenge** interessieren uns nun alle Anlagen, die einen Zuschlag erhalten haben, aber noch nicht den Status „in Betrieb“ haben:

```{r}
#| label: Nennleistung nach Ausschreibungsdatum
wind_extended |> 
  filter(!is.na(Ausschreibungsdatum_BNetzA)) |> 
  mutate(`Nicht gebaute Leistung in MW` = if_else(EinheitBetriebsstatus == "In Planung", `Nettonennleistung in MW`, 0)) |> 
rename(Ausschreibungsdatum =Ausschreibungsdatum_BNetzA ) |> 
  summarise(`Bezuschlagt (MW)` = round(sum(`Nettonennleistung in MW`), 1), 
            `Noch nicht gebaut(MW)` = round(sum(`Nicht gebaute Leistung in MW`), 1), 
            .by = Ausschreibungsdatum) |> 
  arrange(desc(Ausschreibungsdatum)) |> 
  datatable()
```

Diese Leistung kann nun gemäß der oben gezeigten Verteilung auf die zukünftigen Monate aufgeteilt werden. **Daraus ergibt sich die zu erwartende Ausbaumenge.**


#### Anmerkungen und Limitationen

```{r}
#| label: Berechnung_Rueckbau
#| output: false

wind_extended %>% 
  filter(EinheitBetriebsstatus == "Endgültig stillgelegt") %>% 
  filter(DatumEndgueltigeStilllegung >= as.Date("2023-01-01"), 
         DatumEndgueltigeStilllegung < as.Date("2023-07-01")) %>% 
      summarise(
    `Endgueltige Stilllegung in MW` = sum(Nettonennleistung) / 1000)

wind_extended %>% 
  filter(EinheitBetriebsstatus == "Endgültig stillgelegt") %>% 
  filter(DatumEndgueltigeStilllegung >= as.Date("2020-01-01"), 
         DatumEndgueltigeStilllegung < as.Date("2023-01-01")) %>% 
  mutate(Jahr = floor_date(DatumEndgueltigeStilllegung, "year")) %>% 
      summarise(
    `Endgueltige Stilllegung in MW` = sum(Nettonennleistung) / 1000, .by = Jahr)
  
```


Anmerkungen:

- Neben dem Neubau von Windkraftanlagen werden jeden Monat auch alte Anlagen abgebaut. Werden diese durch neuere Anlagen ersetzt, nennt man diesen Prozess „Repowering“. In den zurückliegenden drei Jahren lag der Rückbau bei einer geringen Leistung von 0,2 bis 0,3 GW im Jahr. Im ersten Halbjahr 2023 lag dieser Wert allerdings schon bei 0,245 GW. Das wird in den Angaben Brutto- und Netto-Zubau berücksichtigt: Brutto-Zubau ist die installierte Leistung aller neuen Windkraftanlagen, für den Netto-Zubau wird abgezogen, wie viel Leistung durch den Abbau alter Anlagen vom Netz ging. Siehe hierzu auch Limitationen.
- Wenn sich die Realisierungsdauer nennenswert ändert, ändert sich auch die zu erwartende Ausbaumenge. Das bedeutet: Geht der Bau der bezuschlagten Anlagen schneller, würde die Lücke zum Ausbauziel 2024 kleiner, geht er langsamer, würde diese Lücke größer. 
- Im Marktstammdatenregister gibt es vereinzelt fehlerbehaftete Einträge, aus denen sich eine negative Realisierungsdauer ergibt. Da diese Fälle für die Verteilung der Realisierungsdauer quantitativ nicht ins Gewicht fallen, filtert das Modell diese heraus. Weiter gibt es einen kleinen Teil von Anlagen, die dem Eintrag zufolge erst nach über 40 Monaten realisiert wurden. Auch diese sind quantitativ nicht relevant, zudem sind  bereits fast alle Anlagen aus den Ausschreibungsterminen vor 40 Monaten (2020) gebaut.

- Das Datum für die Zuschläge erfolgt gut einen Monat nach der Ausschreibung, variiert jedoch und ist für zukünftige Ausschreibungen noch unbekannt. Das Modell setzt daher als Ausgangspunkt für die Verteilung das Datum der Ausschreibung. 

- Das Modell berechnet nur  den Ausbau der Windkraft an Land. Ausbau der Windkraft auf See wird mit einem anderen Verfahren gesteuert und müsste gesondert berechnet werden. 


Limitationen: 

- Je weiter in die Zukunft die Berechnung der zu erwartenden Ausbaumenge reichen soll, desto mehr gewinnen die Ergebnisse zukünftiger Ausschreibungen Gewicht. Das ist bereits bei dem Zeithorizont bis 2024 sichtbar an der wachsenden Länge des roten Säulenanteils in den ersten beiden Grafiken. Bei Zeithorizonten über zwei Jahren entstehen dadurch so große Unsicherheiten, dass diese Modellrechnung nicht mehr hilfreich ist. Daher beschränkt sich das Modell in dieser Ausgabe auf den Zeitraum bis Ende 2024.

- Das Modell berechnet die Netto-Zubaumenge für die zurückliegenden Monate, aber die Brutto-Zubaumenge für die kommenden. Der Grund: Es gibt keine verlässlichen Datenquellen für den Rückbau „ausgeförderter“ Windenergieanlagen. Die Ergebnisse des Szenarios sind daher etwas  optimistischer als tatsächlich eintreten dürfte. Allerdings fielen die Stilllegungen bis jetzt gering aus (siehe oben). Hält dieser Trend an, wäre die Abweichung des Modell-Ergebnisses vom Netto-Zubau nur gering. 

- Bürgeranlagen berücksichtig das Modell nicht. 

- Das Modell in dieser Form ist so lange sinnvoll, wie fast alle geplanten Windkraftanlagenbetreiber auf die Marktprämie setzen und mit ihren Projekten an den Auktionen für den „Anzulegenden Wert“ teilnehmen. Sollten Projektierer künftig auch andere Finanzierungsmodelle nutzen (etwa Contracts for Differences oder Strompartnerschaften -- Direktverträge zwischen Windkraft-Betreibern und Industrie zum Beispiel), müsste das Modell entsprechend angepasst werden.


### Datengrundlage und Code
Das Modell zur Berechnung des zu erwartenden Windkraftausbaus basiert auf einer Auswertung des
[Marktstammdatenregisters](https://www.marktstammdatenregister.de/MaStR){target="_blank"}
und den [Ausschreibungsergebnissen](https://www.bundesnetzagentur.de/DE/Fachthemen/ElektrizitaetundGas/Ausschreibungen/Wind_Onshore/BeendeteAusschreibungen/start.html){target="_blank"} der Bundesnetzagentur. 
Das Marktstammdatenregister ist eine von der Bundesnetzagentur geführte Datenbank zur Erfassung und Verwaltung von Informationen über alle Akteure und Anlagen im deutschen Strom- und Gasmarkt. Die Einträge erfolgen dabei von den Akteuren und Anlagenbetreibern in Eigenverantwortung selbst. Die Ausschreibungsergebnisse sind auf der [Seite der Bundesnetzagentur](https://www.bundesnetzagentur.de/DE/Fachthemen/ElektrizitaetundGas/Ausschreibungen/Wind_Onshore/BeendeteAusschreibungen/start.html){target="_blank"} als .csv verfügbar.

Den Code für diesen Data Report stellen wir [hier]( `r file.path(imagepath, paste0(today(), "_", file_name_code))` ){target="_blank"} zur Verfügung. Neben Standard R-Paketen wird ein eigenes Paket verwendet, das [hier](https://github.com/sciencemediacenter/SMChelpR) bereitgestellt wird.



### Ihre Ansprechpersonen in Redaktion und SMC Lab

Wenn Sie Fragen zu diesen Daten haben oder weitere Auswertungen erhalten wollen, kann das SMC Lab Auswertungen erzeugen.

Sönke Gäthke, Redakteur für Energie und Mobilität

Yannik Venohr, Datenwissenschaftler

Lars Koppers, Datenwissenschaftler

Telefon: +49 221 8888 25-0\
E-Mail Inhalt: [redaktion\@sciencemediacenter.de](mailto:redaktion@sciencemediacenter.de){.email}\
E-Mail Datenauswertung: [lab\@sciencemediacenter.de](mailto:lab@sciencemediacenter.de){.email}
:::
