﻿# Skript for å kjøre analyser fra kapittel 4-10 i pensumboka.

# Last inn pakker
# Husk at pakkene må installeres før de kan lastes inn. 
# Installer med f.eks.: 
# install.packages("tidyverse")

library(confintr)
library(effectsize)
library(rstatix)
library(wooldridge)
library(tidyverse)

# ---------------------------------------------
# Kapittel 4 ----
# ---------------------------------------------

# Tabell 4.1
skandinavere <-  tribble(
  ~ id, ~ kjonn, ~ alder, ~ nasjonalitet, ~ iq, ~ hoyde,
  1, "jente", 13, "norsk", 133, 150,
  2, "gutt", 18, "dansk", 120, 181,
  3, "jente", 15, "svensk", 96, 163,
  4, "gutt", 15, "dansk", 108, 156,
  5, "gutt", 14, "svensk", 94, 145,
  6, "jente", 13, "norsk", 103, 143
  )
skandinavere

# ---------------------------------------------
# Kapittel 6 ----
# ---------------------------------------------

# Datasettet er fra pakka wooldridge
wage <- cps78_85

# Reverser log-transformasjonen av timelønn. Legg til rad-ID.
# Gjør union om til en faktor, og datasettet til en tibble.
wage <- wage |> 
  tibble() |> 
  mutate(
    wage = exp(1)^lwage
  ) |> 
  rowid_to_column(var = "id") |> 
  mutate(unionised = factor(union, labels = c("nei", "ja")))

# t-test 
# Last inn pakke rstatix for t_test()-funksjonen.


# Uavhengig t-test
t_test(
    data = wage, 
    formula = wage ~ unionised,
    var.equal = TRUE)

# Deskriptiv statistikk
wage_summary <- wage |> 
  group_by(unionised) |> 
  summarise(
    wage_m = mean(wage, na.rm = TRUE) |> round(2),
    wage_sd = sd(wage, na.rm = FALSE) |> round(2)
)
wage_summary

# Enkeltgruppe t-test

# Generer data for testen
set.seed(123)
sleepdat <- rnorm(n = 50)
sleepdat <- (sleepdat - mean(sleepdat)) / sd(sleepdat)
sleepdat <- sleepdat * 1.3 + 7.2

# Kontroller at m = 7.2 og sd = 1.3
mean(sleepdat)
sd(sleepdat)

# Sjølve t-testen
t.test(sleepdat, mu = 8)

# ---------------------------------------------
# Kapittel 7 ----
# ---------------------------------------------

# Lag datasett for araknoforbi-eksperimentet
experiment <- tibble(
  id = 1:15,
  group = rep(c("Ingenting", "Placebo", "Intervensjon"), each = 5) |>
    factor(levels = c("Ingenting", "Placebo", "Intervensjon")),

  score = c(c(5.5, 6, 4.5, 7, 6), c(3.5, 5.5, 3, 4, 4.5), c(3, 5, 3, 4.5, 4))
)

# Deskriptiv statistikk

exp_desc <- experiment |>
  group_by(group) |>
  summarise(
    mean = mean(score, na.rm = TRUE) |> round(2),
    sd = sd(score, na.rm = TRUE) |> round(2),
    n = length(score)
  )
exp_desc

# ANOVA
fit <- aov(score ~ group, experiment)
summary(fit)

# Tukey post hoc test 
TukeyHSD(fit)

# Effektstørrelse (omega) kommer fra pakka effectsize
omega_squared(fit)

# ---------------------------------------------
# Kapittel 8 ----
# ---------------------------------------------

# Klagestatistikk: Data opprinnelig fra
# https://www.universitetsavisa.no/eksamen-klage-pa-karakter-ntnu/flere-klager-men-faerre-gar-opp-i-karakter-enn-for/422540
# Kan også laste ned klager.csv (fjern sum-raden).
klager <- read_csv("klager.csv") |> 
  slice(-4)

# Kjikvadrattest
chi_fit <- klager |> 
  column_to_rownames(var = "Karakter") |> 
  chisq.test()

# Filmekseperimenter
# Generer datasett for første eksperiment
babe1 <- tibble(
  betingelse = c("Heldiggrisen Babe", "Happy feet"),
  redusere = c(21, 10),
  stabil = c(29, 42)
) |> 
  column_to_rownames("betingelse")

babe1_fit <- chisq.test(babe1)
babe1_fit

# For å regne ut effektstørrelsen Cramérs V, bruk pakka confintr
cramersv(babe1_fit)


babe2 <- tibble(
  betingelse = c("Heldiggrisen Babe", "Happy feet"),
  redusere = c(15, 10),
  stabil = c(35, 40)
) |> 
  column_to_rownames("betingelse")

babe2_fit <- chisq.test(babe2)

babe2_fit
cramersv(babe2_fit)

babe3 <- tibble(
  betingelse = c("Heldiggrisen Babe", "Happy feet", "Ingenting"),
  redusere = c(11, 9, 1),
  stabil = c(39, 41, 49)
) |> 
  column_to_rownames("betingelse")

babe3_fit <- chisq.test(babe3)

babe3_fit
cramersv(babe3_fit)

# ---------------------------------------------
# Kapittel 9 ----
# ---------------------------------------------

# Last inn datasett. Det er opprinnelig fra
# https://www.kaggle.com/datasets/mirichoi0218/insurance eller
# https://github.com/stedy/Machine-Learning-with-R-datasets
# kan også laste ned fila medical.csv og bruke den.

medical <- read_csv("medical.csv")

# Fornorske variablene
forsikring <- medical |>
  select(age, bmi, charges, children) |>
  rename(
    alder = age,
    kmi = bmi,
    utgifter = charges,
    barn = children
  )

# Korrelasjonstabell
forsikring |> cor() 

# Korrelasjonsanalyser
cor(forsikring$kmi, forsikring$utgifter, method = "pearson")
cor(forsikring$alder, forsikring$utgifter, method = "pearson")

# Mer informasjon
cor.test(forsikring$kmi, forsikring$utgifter, method = "pearson")
cor.test(forsikring$alder, forsikring$utgifter, method = "pearson")

# ---------------------------------------------
# Kapittel 10 ---
# ---------------------------------------------

# Trening og glede
glede <- read_csv("glede_trening.csv")

glede_fit1 <- lm(
  data = glede,
  glede ~ trening
)

summary(glede_fit1)

glede_fit2 <- lm(
  data = glede,
  glede ~ trening + sosmed
)

summary(glede_fit2)

# Deskriptiv statistikk
glede |> 
  summarise(
    trening_min = min(trening, na.rm = TRUE), 
    trening_max = max(trening, na.rm = TRUE), 
    sosmed_min = min(sosmed, na.rm = TRUE), 
    sosmed_max = max(sosmed, na.rm = TRUE), 
  )


# Søvnkvalitet
# Last inn datasett
sleepquality <- read_csv("sleepquality.csv")

# Tre enkle regresjonsmodeller
fit_u1 <- lm(SleepQuality ~ StressLevel, data = sleepquality)
fit_u2 <- lm(SleepQuality ~ Rumination, data = sleepquality) 
fit_u3 <- lm(SleepQuality ~ WorkShift, data = sleepquality)

summary(fit_u1)
summary(fit_u2)
summary(fit_u3)

# En sammensatt regresjonsmodell
fit_a <- lm(SleepQuality ~ StressLevel + Rumination + WorkShift, data = sleepquality)
summary(fit_a)
