DĂ©roulement de l’Étude ExpĂ©rimentale

1. Le terrain d’investigation

L’étude expĂ©rimentale repose sur une exploration du terrain afin d’identifier le contexte et les acteurs impliquĂ©s. Il est crucial de dĂ©finir prĂ©cisĂ©ment le cadre de l’étude, qu’il s’agisse d’une enquĂȘte auprĂšs de consommateurs, d’une analyse de comportements en entreprise ou d’une Ă©tude de cas spĂ©cifique. La dĂ©limitation du terrain permet d’assurer une cohĂ©rence entre la problĂ©matique et les donnĂ©es collectĂ©es.

2. Le choix des répondants

La sĂ©lection des rĂ©pondants est une Ă©tape dĂ©terminante dans la validitĂ© des rĂ©sultats. Il est nĂ©cessaire d’adopter un Ă©chantillonnage reprĂ©sentatif, alignĂ© avec les objectifs de l’étude. La mĂ©thode d’échantillonnage peut ĂȘtre probabiliste (Ă©chantillonnage alĂ©atoire simple, stratifiĂ©) ou non probabiliste (Ă©chantillonnage par convenance, boule de neige). Les critĂšres de sĂ©lection des participants doivent ĂȘtre dĂ©finis en fonction des caractĂ©ristiques pertinentes Ă  analyser, telles que l’ñge, le secteur d’activitĂ© ou les habitudes de consommation.

3. La méthode de collecte des données

La collecte des donnĂ©es peut ĂȘtre rĂ©alisĂ©e par diffĂ©rentes techniques selon l’approche retenue. Dans le cadre d’une Ă©tude quantitative, le recours aux questionnaires en ligne ou en face-Ă -face est frĂ©quent. Pour une approche qualitative, les entretiens semi-directifs, les focus groups ou l’observation participante peuvent ĂȘtre privilĂ©giĂ©s. La mĂ©thode choisie doit garantir l’objectivitĂ© et la fiabilitĂ© des donnĂ©es collectĂ©es.

4. La construction du questionnaire final

La conception du questionnaire repose sur une adaptation des Ă©chelles de mesure issues de la littĂ©rature scientifique. Chaque concept du modĂšle est Ă©valuĂ© Ă  l’aide de plusieurs items afin d’assurer une mesure valide et fiable. Les questions sont gĂ©nĂ©ralement formulĂ©es selon une Ă©chelle de Likert (ex. : de 1 = Pas du tout d’accord Ă  7 = Tout Ă  fait d’accord).

L’objectif du questionnaire est de permettre une analyse statistique rigoureuse en limitant les biais de rĂ©ponse. Une prĂ©-test du questionnaire peut ĂȘtre rĂ©alisĂ© auprĂšs d’un Ă©chantillon rĂ©duit afin d’identifier d’éventuelles ambiguĂŻtĂ©s ou incohĂ©rences.

5. Les caractĂ©ristiques de l’échantillon Ă©tudiĂ©

La description de l’échantillon comprend plusieurs Ă©lĂ©ments :

  • Le nombre de participants et le taux de rĂ©ponse obtenu.
  • Les caractĂ©ristiques sociodĂ©mographiques des rĂ©pondants (Ăąge, sexe, catĂ©gorie socioprofessionnelle, etc.).
  • Les comportements spĂ©cifiques des individus interrogĂ©s en lien avec l’objet de l’étude.

L’analyse descriptive de ces donnĂ©es permet d’assurer que l’échantillon est reprĂ©sentatif et adaptĂ© aux objectifs de recherche.


La Procédure de Test, le Choix et la Validation des Instruments de Mesure Retenus

1. La procédure de test des instruments de mesure

Cette section est consacrĂ©e Ă  la procĂ©dure de test des instruments de mesure dĂ©taillera les mĂ©thodes employĂ©es pour Ă©valuer la fiabilitĂ© et la validitĂ© des Ă©chelles utilisĂ©es dans l’étude. Cette validation repose sur des analyses statistiques rigoureuses, en particulier l’Analyse en Composantes Principales (ACP) et l’alpha de Cronbach.

Ces deux mĂ©thodes doivent ĂȘtre expliquĂ©es en soulignant comment elles sont utilisĂ©es pour garantir que les instruments de mesure sont adaptĂ©s et valides avant d’analyser les rĂ©sultats de l’étude.

2. Le choix et la validation des instruments de mesure retenus

2.1. Les critÚres de choix des différents instruments de mesure

Cette section vise Ă  justifier la sĂ©lection des Ă©chelles de mesure utilisĂ©es dans l’étude. Le choix des instruments de mesure est une Ă©tape cruciale, car il dĂ©termine la pertinence et la fiabilitĂ© des donnĂ©es collectĂ©es. Le choix des Ă©chelles repose sur des critĂšres tels que leur validitĂ© thĂ©orique, leur utilisation dans des Ă©tudes antĂ©rieures et leur capacitĂ© Ă  mesurer fidĂšlement le phĂ©nomĂšne Ă©tudiĂ©.

L’objectif est de s’assurer que les Ă©chelles retenues permettent de mesurer prĂ©cisĂ©ment le phĂ©nomĂšne Ă©tudiĂ© en se basant sur trois critĂšres essentiels :

  • La ValiditĂ© ThĂ©orique : Les Ă©chelles doivent ĂȘtre ancrĂ©es dans la littĂ©rature scientifique et correspondre aux concepts thĂ©oriques dĂ©finis dans le modĂšle de recherche. Une Ă©chelle est considĂ©rĂ©e comme valide si elle a Ă©tĂ© dĂ©veloppĂ©e Ă  partir de thĂ©ories reconnues et validĂ©es dans des Ă©tudes acadĂ©miques.
  • L’Utilisation dans des Études AntĂ©rieures : Il est essentiel de privilĂ©gier des Ă©chelles ayant dĂ©jĂ  Ă©tĂ© employĂ©es et testĂ©es dans des recherches similaires. Cela permet de garantir leur fiabilitĂ© et leur adĂ©quation au contexte Ă©tudiĂ©, tout en assurant une comparabilitĂ© des rĂ©sultats avec d’autres travaux.
  • La CapacitĂ© Ă  Mesurer FidĂšlement le PhĂ©nomĂšne : Une Ă©chelle pertinente doit couvrir l’ensemble des dimensions du concept Ă©tudiĂ© et ĂȘtre suffisamment prĂ©cise pour distinguer des variations significatives dans les rĂ©ponses des participants. Elle doit Ă©galement prĂ©senter des qualitĂ©s psychomĂ©triques solides, comme une cohĂ©rence interne Ă©levĂ©e (alpha de Cronbach) et une bonne validitĂ© factorielle.

Cette section permet donc d’expliquer les choix mĂ©thodologiques justifiant l’adoption des Ă©chelles de mesure et de dĂ©montrer leur pertinence dans le cadre de l’étude menĂ©e.

2.2. Les Ă©chelles de mesure retenues

Cette section s’intĂ©resse Ă  l’évaluation des Ă©chelles de mesure utilisĂ©es dans l’étude afin d’assurer leur validitĂ© et leur fiabilitĂ©. En effet, une fois les donnĂ©es collectĂ©es, il est essentiel d’évaluer la validitĂ© et la fiabilitĂ© des Ă©chelles utilisĂ©es.
Les Ă©chelles de mesure sĂ©lectionnĂ©es doivent ĂȘtre opĂ©rationnalisĂ©es et adaptĂ©es au contexte de l’étude. L’explication dĂ©taillĂ©e de leur origine et de leur validitĂ© thĂ©orique permet de garantir la soliditĂ© des analyses Ă  venir. AprĂšs la collecte des donnĂ©es, plusieurs analyses statistiques sont effectuĂ©es pour garantir que les items mesurent bien le concept thĂ©orique auquel ils sont associĂ©s.
Un tableau synthétique viendra présenter les résultats obtenus pour chacun des outils de mesure utilisés comme vous pouvez le voir içi :

La premiĂšre Ă©tape consiste en une purification des Ă©chelles, qui permet d’éliminer les items non pertinents ou redondants grĂące Ă  des indicateurs comme la corrĂ©lation item-total et l’alpha de Cronbach.

Ensuite, une analyse factorielle exploratoire (AFE) est réalisée pour identifier la structure sous-jacente des échelles et regrouper les items en facteurs cohérents. Cette analyse repose sur plusieurs tests, notamment :

  • Le test KMO et le test de Bartlett, qui vĂ©rifient l’adĂ©quation des donnĂ©es Ă  une analyse factorielle.
  • L’analyse en composantes principales (ACP) et la rotation factorielle (ex. : Varimax), qui facilitent l’interprĂ©tation des rĂ©sultats.
  • L’examen de la variance totale expliquĂ©e, qui mesure la part du phĂ©nomĂšne Ă©tudiĂ© capturĂ©e par les facteurs extraits.

La robustesse des mesures est ensuite Ă©valuĂ©e Ă  travers les contributions factorielles des items et leur qualitĂ© de reprĂ©sentation. Un item est considĂ©rĂ© comme fiable si sa charge factorielle est Ă©levĂ©e et si l’alpha de Cronbach dĂ©passe 0,7, garantissant ainsi une bonne cohĂ©rence interne.

L’ensemble de ces analyses permet de valider les instruments de mesure retenus et d’assurer leur pertinence pour tester les hypothùses du modùle de recherche.


Les Choix MĂ©thodologiques pour le Test des HypothĂšses

Les hypothĂšses du modĂšle sont testĂ©es Ă  l’aide de mĂ©thodes statistiques adaptĂ©es. Parmi les techniques les plus utilisĂ©es, on retrouve :

  1. Les rĂ©gressions linĂ©aires, qui permettent d’analyser l’influence d’une variable indĂ©pendante sur une variable dĂ©pendante.
  2. Les analyses de variance (ANOVA), qui comparent les différences entre plusieurs groupes de répondants.
  3. Les modĂšles d’équations structurelles, qui Ă©valuent l’ensemble des relations d’un modĂšle thĂ©orique en une seule analyse globale.

Ces analyses permettent de déterminer si les hypothÚses formulées dans le cadre du travail de recherche sont confirmées ou non.


L’approche mĂ©thodologique adoptĂ©e garantit la rigueur scientifique de l’étude en s’appuyant sur des analyses fiables et validĂ©es. L’ensemble du processus, depuis la construction du questionnaire jusqu’aux tests statistiques, permet d’assurer des rĂ©sultats robustes et interprĂ©tables. Ce travail ne vise pas Ă  valider dĂ©finitivement des hypothĂšses, mais Ă  les mettre Ă  l’épreuve du rĂ©el, contribuant ainsi Ă  l’enrichissement des connaissances dans le domaine Ă©tudiĂ©.


CODE PYTHON ACP

Vous devez rĂ©aliser une ACP pour chaque concept Ă©tudiĂ© (Normes Subjectives, Risques Perçus, etc., y compris l’intention de payer en BTC) en utilisant le code Python ci-aprĂšs :

  • installation des bibliothĂšques Python,
  • lire les donnĂ©es,
  • rĂ©aliser l’ACP.

Cette ACP permettra de rĂ©duire la dimensionnalitĂ© des donnĂ©es et d’extraire un score factoriel unique pour chaque individu sur chaque concept.

L’alpha de Cronbach que vous avez calculĂ© reprĂ©sente un indicateur de fiabilitĂ© de votre Ă©chelle de mesure et montre la cohĂ©rence interne des Ă©chelles.

  • Attention :
    • Une fois les bibliothĂšques installĂ©es et les donnĂ©es lues, n’utiliser que le code rĂ©aliser l’ACP. Dans le cas contraire, les scores factoriels enregistrĂ©s seront effacĂ©s
    • Le nom de la composante extraite ne doit pas comprendre d’apostrophe, d’espace ou de caractĂšre avec accent. Il vous faut trouver un codage unique et simple (exemple : nom du concept = normes subjective, nom de la composante = NornesSubjectives)
    • Pensez Ă  copier/coller le tableau de synthĂšse avec de cliquer sur “enregistrer les rĂ©sultats” :

Voici ci-aprÚs, le code Pyhton à utiliser pour vérifier la structure factorielle de vos mesures et obtenir les résultats à intégrer dans la régression multiple :

Charger le fichier de données

Copiez le code ci-dessous et collez-le sous Google Colab :

import pandas as pd

# Demander Ă  l'utilisateur d'entrer le chemin du fichier
file_path = input("Veuillez coller le chemin complet du fichier XLS : ")

# Charger le fichier XLS dans un DataFrame
data_original = pd.read_excel(file_path)

# Afficher le contenu du DataFrame
data_original

Installer les bibliothÚques nécessaires

Copiez le code ci-dessous et collez-le sous Google Colab :

!pip install factor_analyzer
!pip install --upgrade scikit-learn
!pip install --upgrade --no-deps scikit-learn
!pip install --upgrade imbalanced-learn xgboost

ProcĂ©der Ă  l’Analyse en Composantes Principales sans rotation

Copiez le code ci-dessous et collez-le sous Google Colab :

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from factor_analyzer import FactorAnalyzer
from factor_analyzer.factor_analyzer import calculate_kmo, calculate_bartlett_sphericity
from ipywidgets import interactive
import ipywidgets as widgets

# Fonction pour calculer l'alpha de Cronbach
def cronbach_alpha(df):
  if len(df.columns) > 1:
    k = df.shape[1]
    variances = df.var(axis=0, ddof=1)
    total_variance = df.sum(axis=1).var(ddof=1)
    return (k / (k - 1)) * (1 - (variances.sum() / total_variance))

  else:
    print("⚠ Pas assez de variables pour calculer l'alpha sans item.")

# Chargement des données (supposées déjà chargées dans data_original)
def select_columns(data):
    print("\nColonnes disponibles :", list(data.columns))
    selected_columns = input("Entrez les noms des colonnes pour l'ACP (séparées par une virgule) : ").strip().split(',')
    selected_columns = [col.strip() for col in selected_columns]
    if not all(col in data.columns for col in selected_columns):
        print("Erreur : certaines colonnes n'existent pas. RĂ©essayez.")
        return select_columns(data)
    return selected_columns

# Étape 1 : SĂ©lection des colonnes pour l'ACP
selected_columns = select_columns(data_original)
df = data_original[selected_columns]

# Étape 2 : Normalisation des donnĂ©es
scaler = StandardScaler()
data_scaled = scaler.fit_transform(df)

# Étape 3 : Test KMO et Bartlett
kmo_all, kmo_model = calculate_kmo(df)
chi_square_value, p_value = calculate_bartlett_sphericity(df)
print(f"\nKMO global : {kmo_model:.3f}")
print(f"Test de Bartlett : ChiÂČ = {chi_square_value:.3f}, p = {p_value:.3f}")

# Étape 4 : CommunalitĂ©s
# Affichage des communalités
fa_temp = FactorAnalyzer(rotation=None, method='principal', is_corr_matrix=False)
fa_temp.fit(data_scaled)
eigenvalues, _ = fa_temp.get_eigenvalues()
n_factors = sum(eigenvalues > 1)
print(f"Nombre de composantes retenues (valeurs propres > 1) : {n_factors}")
fa_temp = FactorAnalyzer(rotation=None, method='principal', n_factors=n_factors,is_corr_matrix=False)
fa_temp.fit(data_scaled)
communalities = pd.DataFrame({
    'Variable': df.columns,
    'Initial': [1.000] * len(df.columns),  # Les valeurs initiales sont toujours 1
    'Communalité': fa_temp.get_communalities()
}).round(3)
print("\nCommunalités des variables:")
print(communalities)

# Étape 5 : DĂ©termination du nombre de facteurs
eigenvalues, _ = fa_temp.get_eigenvalues()
n_factors = sum(eigenvalues > 1)
print(f"Nombre de composantes retenues (valeurs propres > 1) : {n_factors}")

# Tableau des variances expliquées
explained_variance_ratio = eigenvalues / np.sum(eigenvalues)
cumulative_variance = np.cumsum(explained_variance_ratio)
variance_table = pd.DataFrame({
    'Composante': [f"Composante {i+1}" for i in range(len(eigenvalues))],
    'Valeurs propres': eigenvalues,
    'Variance expliquée (%)': explained_variance_ratio * 100,
    'Variance expliquée cumulée (%)': cumulative_variance * 100
}).round(3)
display(variance_table)

# Graphique Scree Plot
plt.figure(figsize=(8, 6))
plt.plot(range(1, len(eigenvalues) + 1), eigenvalues, marker='o')
plt.title("Graphique des valeurs propres (Scree Plot)")
plt.xlabel("Composantes")
plt.ylabel("Valeurs propres")
plt.grid(True)
plt.show()

# Étape 6 : Choix du nombre de facteurs par l'utilisateur

# Demander Ă  l'utilisateur le nombre de composantes Ă  retenir au moment de la sauvegarde
n_factors = int(input("Entrez le nombre de composantes Ă  retenir pour les scores factoriels : "))

# Étape 7 : Analyse factorielle avec le nombre de facteurs sĂ©lectionnĂ©
fa = FactorAnalyzer(rotation=None, method='principal', n_factors=n_factors)
fa.fit(data_scaled)

# Matrice des charges factorielles
loadings = fa.loadings_
components_matrix = pd.DataFrame(loadings, index=df.columns).round(3)
display(components_matrix)

# Étape 8 : Cercle des corrĂ©lations
if n_factors > 1:
    fig, ax = plt.subplots(figsize=(6, 6))
    ax.set_xlim(-1, 1)
    ax.set_ylim(-1, 1)
    ax.axhline(0, color='black', linestyle='-', linewidth=0.8)
    ax.axvline(0, color='black', linestyle='-', linewidth=0.8)
    ax.grid(True, linestyle='--', linewidth=0.5, alpha=0.7)
    for i in range(loadings.shape[0]):
        ax.scatter(loadings[i, 0], loadings[i, 1], color='b', alpha=0.5, s=50)
        ax.text(loadings[i, 0], loadings[i, 1], df.columns[i], color='r', fontsize=8, ha='center')
    ax.set_title("Cercle des corrélations", fontsize=10)
    ax.set_xlabel("Composante 1")
    ax.set_ylabel("Composante 2")
    plt.show()

# Demander Ă  l'utilisateur s'il souhaite une rotation
rotation_choice = input("Souhaitez-vous procéder à une rotation des variables ? (oui/non) : ").strip().lower()

if rotation_choice == "non":
    fa = FactorAnalyzer(n_factors=n_factors, rotation=None, method='principal')
    fa.fit(data_scaled)
    factor_scores = fa.transform(data_scaled)
    # Demander Ă  l'utilisateur le nom des composantes
    component_names = []
    for i in range(n_factors):
      name = input(f"Entrez le nom pour la composante {i+1} : ")
      component_names.append(name)
    components_matrix.columns = component_names


    factor_scores_df = pd.DataFrame(factor_scores, columns=component_names)

    # Affichage des scores factoriels
    display(factor_scores_df)


    # Calcul de l'alpha de cronbach
    global_alpha = cronbach_alpha(df)
    print(f"Alpha de Cronbach global : {global_alpha:.3f}")

    alpha_sans_item = {col: cronbach_alpha(df.drop(columns=[col])) for col in selected_columns}
    df_alpha = pd.DataFrame.from_dict(alpha_sans_item, orient='index', columns=['Alpha sans item']).round(3)
    display(df_alpha)


############# ROTATION ##################@@



else:
    rotation_types = ["varimax", "promax", "oblimin", "quartimax"]
    print("Types de rotation disponibles :", rotation_types)
    rotation_type = input("Veuillez entrer le type de rotation souhaité : ").strip().lower()

    if rotation_type not in rotation_types:
        print("Type de rotation non valide. Par défaut, 'varimax' sera utilisé.")
        rotation_type = "varimax"

    fa = FactorAnalyzer(n_factors=n_factors, rotation=rotation_type, method='principal')
    fa.fit(data_scaled)
    loadings = fa.loadings_
    components_matrix = pd.DataFrame(loadings, index=df.columns).round(3)


# Affichage des scores factoriels
#    display(factor_scores_df)

# Étape 8 : Cercle des corrĂ©lations
    if n_factors > 1:
        fig, ax = plt.subplots(figsize=(6, 6))
        ax.set_xlim(-1, 1)
        ax.set_ylim(-1, 1)
        ax.axhline(0, color='black', linestyle='-', linewidth=0.8)
        ax.axvline(0, color='black', linestyle='-', linewidth=0.8)
        ax.grid(True, linestyle='--', linewidth=0.5, alpha=0.7)
        for i in range(loadings.shape[0]):
            ax.scatter(loadings[i, 0], loadings[i, 1], color='b', alpha=0.5, s=50)
            ax.text(loadings[i, 0], loadings[i, 1], df.columns[i], color='r', fontsize=8, ha='center')
        ax.set_title("Cercle des corrélations", fontsize=10)
        ax.set_xlabel("Composante 1")
        ax.set_ylabel("Composante 2")
        plt.show()

# Demander Ă  l'utilisateur le nom des composantes
    component_names = []
    for i in range(n_factors):
      name = input(f"Entrez le nom pour la composante {i+1} : ")
      component_names.append(name)
    components_matrix.columns = component_names
    factor_scores = fa.transform(data_scaled)
    factor_scores_df = pd.DataFrame(factor_scores, columns=component_names)

    # Affichage des scores factoriels
    display(factor_scores_df)
    global_alpha = cronbach_alpha(df)
    print(f"Alpha de Cronbach global : {global_alpha:.3f}")

    alpha_sans_item = {col: cronbach_alpha(df.drop(columns=[col])) for col in selected_columns}
    df_alpha = pd.DataFrame.from_dict(alpha_sans_item, orient='index', columns=['Alpha sans item']).round(3)
    display(df_alpha)

def generate_pca_summary(data_original, n_factors, fa, kmo_model, global_alpha, eigenvalues):
    """
    GénÚre un tableau de synthÚse des résultats de l'ACP si une seule dimension est retenue.
    
    Args:
        df (pd.DataFrame): Les données utilisées pour l'ACP.
        n_factors (int): Nombre de facteurs extraits.
        fa (FactorAnalyzer): Analyseur factoriel aprÚs ajustement des données.
        kmo_model (float): Indice KMO global.
        alpha_cronbach (float): Alpha de Cronbach de l'Ă©chelle.
        eigenvalues (list): Valeurs propres des composantes.

    Returns:
        pd.DataFrame: Un tableau de synthÚse des résultats.
    """
    if n_factors == 1:
        communalities = fa.get_communalities()
        loadings = fa.loadings_

        summary_data = []
        for i, var in enumerate(df.columns):
            summary_data.append([
                var,
                loadings[i][0],
                "-",  # Alpha sans item (à calculer si nécessaire)
                communalities[i],
                1.000 if i == 0 else round(np.corrcoef(df.iloc[:, 0], df.iloc[:, i])[0, 1], 3)
            ])

        summary_data.append(["KMO", kmo_model, "-", "-", "-"])
        summary_data.append(["α de l’échelle", global_alpha, "-", "-", "-"])
        summary_data.append(["Valeur propre du facteur", eigenvalues[0], "-", "-", "-"])
        summary_data.append(["Variance expliquée", round((eigenvalues[0] / sum(eigenvalues)) * 100, 3), "-", "-", "-"])


        columns = ["Items", "Contributions factorielles", "α sans item", "Qualité Extraction", "Correl. Items"]
        return pd.DataFrame(summary_data, columns=columns)
    
    return None  # Retourne None si plus d'un facteur est extrait

# Génération du tableau si une seule dimension est extraite
pca_summary = generate_pca_summary(data_original, n_factors, fa, kmo_model, global_alpha, eigenvalues)

# Affichage du tableau
if pca_summary is not None:
    #import ace_tools as tools
    #tools.display_dataframe_to_user(name="Tableau de SynthĂšse PCA", dataframe=pca_summary)
    #print(pca_summary)
    from IPython.display import display
    display(pca_summary)

# Demander à l'utilisateur s'il souhaite enregistrer les résultats
def save_results():
    global data_original
    data_original = pd.concat([data_original, factor_scores_df], axis=1)
    output_file = "Analyse_Factorielle_Resultats.xlsx"
    with pd.ExcelWriter(output_file) as writer:
        factor_scores_df.to_excel(writer, sheet_name="Scores_Factoriels", index=False)
        df_alpha.to_excel(writer, sheet_name="Alpha_Cronbach", index=True)
    print(f"\nLes résultats ont été sauvegardés dans {output_file}.")

save_btn = widgets.Button(description="Enregistrer les résultats")
save_btn.on_click(lambda b: save_results())
display(save_btn)

Un bout de code pour sauvegarder votre fichier contenant les scores factoriels des ACP réalisées

data_original.to_excel('data_original.xlsx', index=False)

# Télécharger le fichier Excel automatiquement sur votre ordinateur (spécifique à Google Colab)
from google.colab import files
files.download('data_original.xlsx')