knitr::opts_chunk$set(fig.width = 7, fig.height = 4, fig.align = "center")
library(survival)
library(AER) # StrikeDuration
library(dplyr)
library(ggplot2)
if (requireNamespace("survminer", quietly = TRUE)) {
library(survminer)
}
# -------------------------
# Données brutes de grève
# -------------------------
data("StrikeDuration")
strikes_raw <- StrikeDuration
# Construction d'un jeu de données pour le TD
# - on crée une censure artificielle à 200 jours
# - on construit 2 versions catégorielles du choc d'activité
strikes <- strikes_raw |>
mutate(
# variable de durée
time = pmin(duration, 200),
status = ifelse(duration > 200, 0, 1), # 1 = fin de grève observée avant 200, 0 = censuré à 200
# choc d'activité non anticipé (déjà continu) :
# uoutput > 0 -> cycle favorable ; < 0 -> cycle défavorable
uoutput_sign = case_when(
uoutput < 0 ~ "Cycle défavorable",
uoutput == 0 ~ "Cycle neutre",
uoutput > 0 ~ "Cycle favorable"
),
# version en 3 classes par terciles (plutôt pour les KM)
uoutput_q = cut(
uoutput,
breaks = quantile(uoutput, probs = c(0, .33, .66, 1), na.rm = TRUE),
labels = c("Choc faible", "Choc moyen", "Choc fort"),
include.lowest = TRUE
)
)
# Objet de survie pour les grèves (avec censure artificielle à 200 jours)
S_strikes <- Surv(time = strikes$time, event = strikes$status)