Statistiek IV
Inhoud
Libraries……………………………………………………………………………………………………………………………………………………………………………………………………
………………p2
Errors……………………………………………………………………………………………………………………………………………………………………………………………………………
………………p2
Verkenning
data……………………………………………………………………………………………………………………………………………………………………………………………p3-15
Meervoudige
regressie…………………………………………………………………………………………………………………………………………………………………………p16-38
Logistische
regressie…………………………………………………………………………………………………………………………………………………………………………p39-56
ANOVA………………………………………………………………………………………………………………………………………………………………………………………………………………
……p57-67
Factoriële
ANOVA………………………………………………………………………………………………………………………………………………………………………………………p68-79
Repeated measures & mixed design
ANOVA……………………………………………………………………………………………………………………………p80-95
Factoranalyse - Principale Componenten Analyse (PCA)
……………………………………………………………………………………p96-111
Clusteranalyse………………………………………………………………………………………………………………………………………………………………………………………
p112-123
SAMENVATTING……………………………………………………………………………………………………………………………………………………………………………………………
p124-136
Legende
Paars = oefening uit oefeningenbundel
Zwart = uitleg en notities
Groen = uitleg en notities van RStudio / antwoorden
Kaders = syntax van RStudio
Oranje = vervangbare syntax
Gele fluo = gebruikte cijfers uit syntax
1
,Libraries
install.packages("data.table") install.packages("naniar")
library(data.table) library(naniar)
install.packages("ggplot2") install.packages("effects")
library(ggplot2) library(effects)
install.packages("dplyr") install.packages("multcomp")
library(dplyr) library(multcomp)
install.packages("tidyr") install.packages("lsr")
library(tidyr) library(lsr)
install.packages("magrittr") install.packages("corpcor")
library(magrittr) library(corpcor)
install.packages("tidyverse") install.packages("GPArotation")
library(tidyverse) library(GPArotation)
install.packages("MASS") install.packages("foreign")
library(MASS) library(foreign)
install.packages("psych") install.packages("cluster")
library(psych) library(cluster)
install.packages("car") install.packages("plotly")
library(car) library(plotly)
install.packages("lmtest") install.packages(“emmeans”)
library(lmtest) library(emmeans)
install.packages("GLDEX") install.packages(“ez”)
library(GLDEX) library(ez)
install.packages("corrplot") install.packages(“nlme”)
library(corrplot) library(nlme)
install.packages("nnet") install.packages(“codingMatrices”)
library(nnet) library(codingMatrices)
install.packages("misty") install.packages(“interactions”)
library(misty) library(interactions)
Errors
could not find function "summarise" = Package “dplyr” nog eens
installen
could not find function "mutate" = Package “dplyr” nog eens
installen
could not find function "recode" = Package “dplyr” nog eens
installen
could not find function “arrange” = Package “dplyr” nog eens installen
could not find function "%>%" = Package “magrittr” nog eens
installen
could not find function "fread" = Package “data.table” nog eens
installen
could not find function "stepAIC" = De package “MASS” nog eens installen
could not find function "crPlots" = De package “car” nog eens installen
could not find function "bptest" = Package “lmtest” nog eens
installen
could not find function "miss_var_summary" = Package “naniar” nog eens installen
could not find function "leveneTest" = Package “car” nog eens
installen
2
, could not find function "etaSquared" = Package “lsr” nog eens
installen
could not find function "ezANOVA" = Package “ez” nog eens installen
could not find function "cortest.bartlett" = Package “psych” nog eens installen
could not find function "corPlot" = Package “psych” nog eens installen
could not find function "principal” = Package “psych” nog eens
installen
Verkenning data
VOORBEREIDING
1. OEFENING 1: Zoek op hoe je een CSV bestand inleest en importeer het bestand. Let goed op het
scheidingsteken van de gegevens.
A. Lees de data in.
Volgende stap is de data inlezen
Voor volgende code moet het CSV bestand in de downloads staan van de computer
#Oefening 1
#A Data inlezen
setwd("/Users/hannahmarie/Downloads/")
df <- fread("WPO1.csv", header = TRUE, sep = ",")
B. Controleer steeds ook je data type: zijn numerieke variabelen ook ingelezen als getallen en niet als
string/character?
Volgende stap is checken of de variabelen met characters (chr) of met numbers (num) werken
Als er woorden staan bij de observaties dan moet er “chr” bijstaan
Als er cijfers staan bij de observaties dan moet er “num” bijstaan
#pop_2023 en gdp_pcap_2023 lijken nog niet numeriek te zijn
#inkomensgroepen zijn text, zou ordinaal kunnen zijn
Indien dit ergens niet het geval is dan moet dit aangepast worden
Als iets ordinaal is en het als nominaal staat in de observaties, dan kunnen we dit als ordinaal forceren
Door de variabele om te zetten naar een factor
#B chr variabelen naar factor, behalve country, pop_2023, gdp_pcap_2023
df$main_religion_2008 <- as.factor(df$main_religion_2008)
df <- df %>%
mutate_if(is.character, as.factor) %>%
mutate(country = as.character(country),
pop_2023 = as.character(pop_2023),
gdp_pcap_2023 = as.character(gdp_pcap_2023))
Mogelijk alternatief dat geen “dplyr” gebruikt
#alternatief zonder dplyr
df <- as.data.frame(lapply(df, function(x) if(is.character(x)) as.factor(x) else
x))
df$country <- as.character(df$country)
df$pop_2023 <- as.character(df$pop_2023)
df$gdp_pcap_2023 <- as.character(df$gdp_pcap_2023)
?lapply
2. Zet de bevolkingsgrootte (pop_2023) om naar een numerieke variabele (M = miljoen, k = duizend).
3
, A. Transformeer de variabele zoals hierboven beschreven. (Internet is je vriend hier.)
Wat je hier eerst wil doen is: de getallen en de getallen met letters (M & k) opsplitsen
#Oefening 2: populatie
#Laatste teken is letter
df$pop_letter <- substr(df$pop_2023, nchar(df$pop_2023), nchar(df$pop_2023))
df$pop_value <- as.numeric(substr(df$pop_2023, 1, nchar(df$pop_2023)-1))
Of op een ‘gevorderde’ manier:
#met regular expression - gevorderd
df$pop_value <- as.numeric(gsub("[^0-9.]", "", df$pop_2023))
df$pop_letter <- gsub("[0-9.]", "", df$pop_2023)
Je kan zien hoe deze zijn opgesplitst door alle variabelen weer te geven in je transcript
Voeg volgende code toe & run
str(df)
Nu de letters gesplist zijn van de getallen, moeten deze letters omgezet worden naar getallen
Als je hiervoor eerst wil opzoeken welke letters er allemaal zijn, geef je volgende code in
unique(df$pop_letter)
Geef volgende code in & run
Hierbij zal een nieuwe variabele gevormd worden
#transformeer naar numerische variabele: k = *1000, M = *1000000 and B = *1000000000
df$pop_numeric <- ifelse(df$pop_letter == "k", df$pop_value * 1000,
ifelse(df$pop_letter == "M", df$pop_value * 1000000,
ifelse(df$pop_letter == "B", df$pop_value * 1000000000,
NA)))
B. Geef de totale bevolking weer per continent (world_4region)
Geef volgende code in & run
De ‘summarise’ zal een klein overzicht geven van de totale bevolking per continent
+ Vragen voor een overzicht van populatie in miljoenen (totaal delen door 1 miljoen)
#totale bevolking per continent
df %>%
group_by(world_4region) %>%
summarise(total_pop = sum(pop_numeric, na.rm = TRUE), total_pop_million = sum(pop_numeric, na.rm =
TRUE)/1000000)
Alternatieven (assistent vindt deze minder mooi)
#alternatief tapply
tapply(df$pop_numeric, df$world_4region, sum, na.rm = TRUE)
#alternatief aggregate
aggregate(df$pop_numeric, by = list(df$world_4region), FUN = sum, na.rm = TRUE)
Antwoord van RStudio:
world_4region total_pop total_pop_million
<fct> <dbl> <dbl>
1 africa 1471740000 1472.
2 americas 1034836000 1035.
3 asia 4673512000 4674.
4 europe 848500000 848.
C. Welke godsdienst heeft de meeste aanhangers? Bereken dit via de totale populatie per godsdienst en
plot dit in een gepaste grafiek.
Als je de eerste code hier runt, dan zie je dat er een lege categorie is
Deze zet je daarna als NA = n.v.t. (je kan die ook een andere naam geven zoals “other”)
4