Bakgrund

Grafen ovan publicerades i en stor dagstidning under september 2025 men avsikten här är inte att förstå eller förklara vad grafens fakta visar.
Med ‘statistikögon’ kollar man dock axlarna men också om kurvorna visar verklig variation. Inte sällan ser man grafer där kurvor har utjämnas med någon typ av algoritm. Men eftersom antalet födslar varje år är mycket stort så finns det kanske inte mycket slumpmässig variation. (Mer om det senare.)
Självklart bör man utgå ifån hela datamaterialet om man vill gräva mer i informationen men utgångspunkten här är snarare lite ‘datadetektivarbete’, dvs hur kan man tolka och resonera och hantera det som finns vid handen.


Detta dokument delas in i tre delar:

   1. Beräkning av Weibull-parametrar utifrån två punkter på F(x)

   2. En diskussion om binomialfördelningen

   3. En diskussion om Poissonfördelningen



 1. Beräkning av Weibull-parametrar utifrån två punkter på F(x)

En Weibullfördelning. Nedanstående kommandon skapar en Weibullfördelning utifrån kända värden på parametrarna. Den vänstra grafen är sannolikhetsfördelningen och den högra fördelningsfunktionen. Fördelningsfunktionen innehåller två punkter (enbart valda som exempel i följande diagram). För X = 2.1 och X = 5.6 anges på Y-axeln (ungefär) 0.25 respektive 0.96 som betyder att 25% respektive 96% av all sannolikhetsyta ligger till vänster om X = 2.1 respektive X = 5.6:


library(ggplot2)     # För diagramritning
library(patchwork)   # För placering av diagram

a <- 2.5             # Formparameter
b <- 3.5             # Skalparameter

ovreXgrans <- qweibull(0.999, a, b)

ft <- function(xvar) {dweibull(xvar, a, b)}

ftdia <- ggplot(data.frame(x = c(0, ovreXgrans)), aes(x = x)) + xlab("X") + ylab("f(t)") +
         stat_function(fun = ft, colour = "red") +
         annotate("text", x = Inf, y = Inf, label = "Weibullfördelning", vjust = 1.8, hjust = 1.5, 
           fontface = "bold", color = "blue", size = 4) + 
         annotate("text", x = Inf, y = Inf, label = "Sannoliketsfördelning", vjust = 4.0, hjust = 1.4, 
           fontface = "bold", color = "red", size = 3.5)


Ft <- function(xvar) {pweibull(xvar, a, b)}

Yvanstra <- pweibull(2.1, a, b)
Yhogra   <- pweibull(5.6, a, b)

Ftdia <- ggplot(data.frame(x = c(0, ovreXgrans)), aes(x = x)) + xlab("X") + ylab("F(t)") + 
         stat_function(fun = Ft, colour = "red") +
         annotate("text", x = 0, y = Inf, label = "Weibullfördelning", vjust = 1.8, hjust = 0, 
           fontface = "bold", color = "blue", size = 4) + 
         annotate("text", x = 0, y = Inf, label = "Fördelningsfunktion", vjust = 4.0, hjust = 0, 
           fontface = "bold", color = "red", size = 3.5) + geom_point(aes(x = c(2.1, 5.6), 
                  y = c(Yvanstra, Yhogra)), color = "black", size = 3)

ftdia + Ftdia

Men antag att man bara har två punkter på en fördelningsfunktion och vill beräkna fördelningens parametrar (med antagande om Weibullfördelning), hur gör man då?

Fördelningsfunktionen har följande matematiska uttryck (där F(x) är ytan till vänster om x-värdet):

\[ \begin{align} \Large F(x)=1-e^{-(x/b)^a} \end{align} \]

Följande kommandon plockar fram parametrarna, efter en del matematiska manipulationer (som inte visas här), givet två punkter på fördelningsfunktionen. Här används indata enligt ovan:


X1 <- 2.1
X2 <- 5.6

p1 <- 0.243
p2 <- 0.960

X <- log(X2/X1)/(log(-log(1 - p2)) - log(-log(1 - p1)))

a <- 1/X
b <- X1/((-log(1 - p1))**(1/a))

paste0("a-parameter = ", round(a, 1),", b-parameter = ", round(b, 1))
## [1] "a-parameter = 2.5, b-parameter = 3.5"

De två parametervärdena (a, b) motsvarar exakt de värden som användes för fördelningen ovan.


Den ursprungliga grafen. Diagrammet angående förlossningar visar inte antal förlossningar men här används n = 90000 förlossnigar per år. Från diagrammet kan man utläsa följande för år 2010: antal tonårsmammor (< 20 år), cirka 1300, antal mammor > 40 år, cirka 5 800.


library(ggplot2)        # För diagramritning
library(patchwork)      # För placering av diagram

X1 <- 20                # Gräns för tonår
X2 <- 40                # 40-årsgräns

p1 <- 1300/90000        # Andel tonårsmammor.
p2 <- 1 - 5800/90000    # Andel < 40 år.

X <- log(X2/X1)/(log(-log(1 - p2)) - log(-log(1 - p1)))

a <- 1/X                           # Formparameter
b <- X1/((-log(1 - p1))**(1/a))    # Skalparameter

ovreXgrans <- qweibull(0.9999, a, b)

ft <- function(xvar) {dweibull(xvar, a, b)}

ftdia <- ggplot(data.frame(x = c(10, ovreXgrans)), aes(x = x)) + xlab("Ålder vid förlossning") + ylab("f(t)") +
         stat_function(fun = ft, colour = "red") +
         annotate("text", x = Inf, y = Inf, label = "Weibullfördelning", vjust = 1.8, hjust = 1.5, 
           fontface = "bold", color = "blue", size = 4)


Ft <- function(xvar) {pweibull(xvar, a, b)}

Yvanstra <- pweibull(20, a, b)
Yhogra   <- pweibull(40, a, b)

Ftdia <- ggplot(data.frame(x = c(10, ovreXgrans)), aes(x = x)) + xlab("Ålder vid förlossning") + ylab("F(t)") + 
         stat_function(fun = Ft, colour = "red") + 
         annotate("text", x = 12, y = Inf, label = "Weibullfördelning", vjust = 1.8, hjust = 0, 
           fontface = "bold", color = "blue", size = 4) +  geom_point(aes(x = c(20, 40), 
                  y = c(Yvanstra, Yhogra)), color = "black", size = 3)

ftdia + Ftdia

Fördelningen ovan är alltså den Weibullfördelning som skapas av de två punkterna från den ursprungliga grafen om ålder vid förlossning för år 2010. Det verkar som att fördelningen förändras för åren efter 2010 eftersom andelen tonårsgraviditeter går ned.

Om man har tillgång till hela datamängden är det naturligtvis bättre att studera den för att t.ex. anpassa en fördelning. Men antag att man vill sätta mål på t.ex. en tidsvariabel och anger en undre gräns och en övre gräns. Då är det praktiskt med en fördelning för att studera förväntat medelvärde och spridning som kan beräknas med de två parametrarna. Men antag att man har en tidsprocess och vill ange ett målvärde (medelvärde) och samtidigt en övre gräns. Detta är ju i sak samma som ovan men ibland mer praktiskt. Se t.ex. https://ovn.ing-stat.se/Rgoal/Rgoal3.php för en utförlig diskussion.



 2. En diskussion om binomialfördelningen

Kurvan för antal tonårsmammor har en viss variation men är variationen slumpmässig mellan de ursprungliga årliga antalen eller är kurvan utjämnad på något sätt (inte ovanligt) och i så fall hur?
Antag att vi bara betraktar antal tonårsmammor per år. Detta är då en diskret antalsfördelning en s.k. binomialfördelning som styrs av två parametrar, p och n. Standardavvikelsen, sigma, beräknas på följande sätt:


\[ \begin{align} \Large \sigma = \sqrt{ np(1-p)} = \sqrt{ 90000\cdot 0.0144\cdot (1-0.0144)}=35.7 \phantom{invisible}\text{(tonårsmödrar)} \end{align} \]


Den naturliga variationen i kurvan vid år 2010 är ungefär 100 (3*35.7) och kanske det är vad som grafen visar.



 3. En diskussion om Poissonfördelningen

Om man i stället betraktar förlossningar som en ström av händelser i tiden är Poissonfördelningen ett första val som sannolikhetsfördelning. Poissonfördelningen har endst en parameter, ofta betecknad med bokstaven λ och benämnd som processens intensitet.
En intensitet kan betraktas som en hastighet som ju kan anges på olika sätt t.ex. m/s, km/h, etc. På samma sätt kan intensiteten i en Poissonprocess anges som ‘antal händelser per timme’, ‘…per dag’ eller, som i detta fall kanske lämpligast, ‘antal förlossningar per år’.
För en Poissonfördelning gäller följande (dvs sigma är roten ur intensiteten):


\[ \begin{align} \Large \sigma = \sqrt{\lambda} = \sqrt{ 1300}=36.1 \phantom{invisible}\text{(tonårsmödrar)} \end{align} \]

Beräkningen av sigma i Poisson gav praktiskt taget samma resultat som beräkningen för binomialfördelningen. Detta är ingen slump utan ett faktum då andelen (p) är låg. Denna likhet mellan binomialfördelningen och Poissonfördelningen untnyttjades förr i tiden eftersom Poisson var lättare att beräkna.



Avslutningsvis
Ovanstående text avser inte att ge en uttömmande diskussion om problemet som diskuteras i den ursprungliga grafen. Snarare är avsikten att visa att det går att resonera och ifrågasätta t.ex. grafer eller påståenden med hjälp av lite statistisk teori.

(Analyserna har gjorts med datorprogrammet ‘R’ och med det grafiska gränssnittet ‘R-studio’ och bägge är gratis tillgängliga på nätet. Se https://www.indstat.se och knappen [Statistikprogram - R] för installation.)

(Se https://www.indstat.se för många andra simuleringsövningar.)