Background
This research project was part of my Master Thesis in Organizational Psychology at the University of Paris-Cité (Université Paris-Cité). The goal was to conduct quantitative research to analyse creativity at work based on Innovation and Risk taking. I worked on Risk taking.
Psychometric process
1️⃣ Principal Component Analysis
2️⃣ Cronbach’s alpha and item correlations
3️⃣ Factor analysis
5️⃣ Fit calculation
Principal Component Analysis
Items : based on the literature and dozens of definitions we started writing down 60 items that are linked to risk taking.
Sensibility : we deleted the items that didn't follow the normal distribution.
Extraction of factors : based on the Horn's criterion we could have a 4 factors structure.
Varimax rotation : we kept the items that has a saturation higher than .40.
# Installer les packages si vous ne les avez pas déjà installés
install.packages("factoextra")
install.packages("ggplot2")
install.packages("readxl")
# Charger les packages
library(factoextra)
library(ggplot2)
library(readxl)
# Spécifier le chemin complet vers le fichier Excel
chemin <- "~/Downloads/data.xlsx" # Assurez-vous de remplacer "~" par votre nom d'utilisateur si vous utilisez un chemin absolu.
# Importer les données Excel
data <- read_excel(chemin)
# Supprimer les colonnes non numériques si nécessaire
data_num <- data[, sapply(data, is.numeric)]
# Vérifier les premières lignes des données pour s'assurer qu'elles sont correctement importées
head(data_num)
# Effectuer l'analyse en composantes principales (ACP)
acp <- prcomp(data_num, scale. = TRUE)
# Résumé de l'ACP
summary(acp)
# Visualiser la variance expliquée par chaque composante
fviz_eig(acp, addlabels = TRUE, ylim = c(0, 50))
# Visualiser les individus dans le premier plan factoriel
fviz_pca_ind(acp, geom = "point", col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
# Visualiser les variables dans le premier plan factoriel
fviz_pca_var(acp, col.var = "contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
Cronbach’s alpha and item correlations
Cronbach's alpha & inter-item correlations
Here is our four factors, the number of items, the Cronbach's alpha and the inter-item correlations.
The name of our four factors are :
- Avoidance of uncertainty
- Willingness to take risks
- Perception of purpose
- Environment / Context
# Installer les packages si vous ne les avez pas déjà installés
install.packages("psych")
install.packages("readxl")
# Charger les packages
library(psych)
library(readxl)
# Charger à nouveau les données
data <- read_excel("~/Downloads/data.xlsx")
# Calculer les corrélations inter-items
correlations <- cor(data)
# Afficher les corrélations inter-items
print(correlations)
# Calculer l'alpha de Cronbach
cronbach_alpha <- alpha(data)
# Afficher l'alpha de Cronbach
print(cronbach_alpha)
Factor analysis
We now go deeper in the correlations and covariance between the variables.
We had 4 factors with the criterion of Horns, but after a varimax rotation we kept 3 factors and we could precise their names :
- Belief in the positive effect of risk
- Willingness to take risks
- Tendency to take risks
# Charger le package
library(psych)
# Charger à nouveau les données si nécessaire
data <- readxl::read_excel("~/Downloads/data.xlsx")
# Réaliser une analyse factorielle à partir du critère de Kaiser-Guttman avec ULS
fact_analysis_kaiser <- fa(data, fm = "uls", rotate = "varimax")
kaiser_eigenvalues <- fact_analysis_kaiser$values
# Extraire les valeurs propres
kaiser_factors <- sum(kaiser_eigenvalues > 1)
cat("Nombre de facteurs selon le critère de Kaiser-Guttman:", kaiser_factors, "\n")
# Réaliser une analyse factorielle et afficher le Scree Plot
fact_analysis_scree <- fa(data, fm = "uls", rotate = "varimax")
# Calculer le nombre de facteurs à partir du Scree Plot
scree_factors <- sum(fact_analysis_scree$values > 1)
cat("Nombre de facteurs selon le Scree Plot:", scree_factors, "\n")
# Réaliser une analyse factorielle à partir du critère de Cattell avec ULS
fact_analysis_cattell <- fa(data, fm = "uls", rotate = "varimax")
cattell_factors <- sum(fact_analysis_cattell$values > mean(fact_analysis_cattell$values) + 2 * sd(fact_analysis_cattell$values))
cat("Nombre de facteurs selon le critère de Cattell:", cattell_factors, "\n")
# Effectuer une analyse de la structure parallèle pour obtenir une estimation
# du nombre de facteurs
parallel_factors <- fa.parallel(data, fa = "both", n.iter = 1000)$nfactors
cat("Nombre de facteurs selon l'analyse de la structure parallèle:", parallel_factors, "\n")
Finding the right model
Here, is an example of the code I wrote on R to find the right model that fits the best with my data
The bifactor model fits the best
Here is the model that fits the best with our data: The bifactor model. It is composed of three independent factors and one general factor.
Fit calculation
Here are the different fit criterions.
chisq | rmsea | agfi | srmr | cfi | tli |
223,8 | .06 | .09 | .05 | .93 | .91 |
Testing the validity
We then test the validity of our model :
- Construct
- Content
- Criterion