Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Menu
Calculatrices
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC
Liens
¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Cours/E-activities >> Graph 35 à 100 >> Maths >> Stat_2
Stat_2
Version : 1 Taille : 12600 octets Ajouté le : 2026-05-08 22:37 Modifié le : 2026-05-08 22:50
Auteur et posteur :
MamoreaumaHors ligneMembrePoints: 20 Défis: 0 Message
Aucune image disponible
Nombre de visites sur cette page : 16
Score au progrank : 0
Pas encore de note !
Vous devez être connecté(e) pour noter (inscription).
3 téléchargements | Soumettre un test


Description :

from math import sqrt

def r(v, d=3):
    try:
        fmt = "%." + str(d) + "f"
        return fmt % float(v)
    except:
        return str(v)

def get_list(name):
    print("Donnees " + name)
    try:
        txt = input("? ")
        txt = txt.replace(',', ' ')
        return [float(x) for x in txt.split()]
    except:
        return []

def mean(L):
    if not L: return 0
    return sum(L)/len(L)

def variance(L):
    if len(L) < 2: return 0
    m = mean(L)
    return sum([(x-m)**2 for x in L])/(len(L)-1)

def pause():
    print("-" * 15)
    input("OK >")

# --- GENERATEUR D'HYPOTHESES ---
def hyp(h0, h1):
    print("\n--- 1. HYPOTHESES ---")
    print("H0: " + h0)
    print("H1: " + h1)
    input("Recopier puis Entree >")

# --- ASSISTANT DE REDACTION ---
def concl(val_obs, stat_name, ddl_str, h0):
    print("\n- CONCLUSION -")
    print("H0:", h0)
    try:
        txt = input("Seuil table ("+stat_name+") ? ")
        txt = txt.replace(',', '.')
        s = float(txt)
        v_abs = abs(val_obs)

        print("\n--- A ECRIRE SUR COPIE ---")
        print(stat_name + " obs(" + ddl_str + ") = " + r(v_abs))

        if v_abs >= s:
            print(r(v_abs) + " >= " + r(s) + " (Seuil)")
            print("=> On REJETTE H0")
            print("=> Effet SIGNIFICATIF")
        else:
            print(r(v_abs) + " < " + r(s) + " (Seuil)")
            print("=> On CONSERVE H0")
            print("=> NON Significatif")
    except:
        print("Erreur de seuil")
    pause()

def concl_a2(nom, F_obs, ddl1, ddl2):
    print("\n- Effet", nom, "-")
    try:
        txt = input("Seuil F("+str(ddl1)+","+str(ddl2)+")? ")
        s = float(txt.replace(',', '.'))
        print("\n--- A ECRIRE ---")
        print("F(" + str(ddl1) + "," + str(ddl2) + ") = " + r(F_obs))
        if F_obs >= s:
            print(r(F_obs) + " >= " + r(s))
            print("=> REJET H0 (Signif)")
        else:
            print(r(F_obs) + " < " + r(s))
            print("=> GARDE H0 (Non Signif)")
    except:
        pass

# --- AIDE THEORIQUE ---
def theorie():
    while True:
        print("\n"*3)
        print("--- AIDE & THEORIE ---")
        print("1. Choix du Test")
        print("2. Cond. Application")
        print("3. Tests R (p-value)")
        print("4. Residus")
        print("0. Retour")
        c = input("Choix? ")

        if c == "1":
            print("\n- CHOIX DU TEST -")
            print("1 Var Quanti + 1 Quali:")
            print(" 2 grp Indep -> T-Indep")
            print(" 2 grp Lies  -> T-Pair")
            print(" >2 groupes  -> ANOVA 1")
            print("1 Var Quanti + 2 Quali:")
            print(" -> ANOVA 2")
            print("2 Variables Quanti:")
            print(" -> Reg / Correlation")
            print("Var(s) Quali (Effectifs):")
            print(" -> Chi-2")
            pause()
        elif c == "2":
            print("\n- COND. APPLICATION -")
            print("Pour Student & ANOVA:")
            print("1. Independance (EAS)")
            print("2. Normalite")
            print(" (Chaque grp ou Residus)")
            print("3. Homoscedasticite")
            print(" (Variances egales)")
            print("---")
            print("Pour Chi-2:")
            print("Effectifs Theo >= 5")
            pause()
        elif c == "3":
            print("\n- TESTS SOUS R -")
            print("Regle p-value (alpha=5%):")
            print(" p < 0.05 => REJET H0")
            print(" p >= 0.05 => GARDE H0")
            print("---")
            print("SHAPIRO (Normalite)")
            print("H0: Loi Normale")
            print("BARTLETT (Variances)")
            print("H0: Homoscedasticite")
            print("(On espere p>=0.05 !)")
            pause()
        elif c == "4":
            print("\n- RESIDUS -")
            print("Definition:")
            print("Ecart entre val. obs.")
            print("et moyenne du groupe.")
            print("Formule:")
            print("e_ij = X_ij - Moy_i")
            print("---")
            print("Propriete absolue:")
            print("Somme(Residus) = 0")
            pause()
        elif c == "0":
            break

# --- TESTS STATISTIQUES ---
def stat_desc():
    L = get_list("X")
    if len(L)<2: return
    n = len(L)
    m = mean(L)
    v = variance(L)
    s = sqrt(v)
    sem = s/sqrt(n)
    print("- DESC -")
    print("n=", n)
    print("Moy=", r(m))
    print("Var=", r(v))
    print("EcT=", r(s))
    print("ErrS=", r(sem))
    pause()

def t_indep():
    L1 = get_list("G1")
    L2 = get_list("G2")
    if len(L1)<2 or len(L2)<2: return

    # Hypotheses formelles
    hyp("mu_1 = mu_2 (Moy. identiques)", "mu_1 != mu_2 (Moy. diff.)")

    n1, n2 = len(L1), len(L2)
    m1, m2 = mean(L1), mean(L2)
    v1, v2 = variance(L1), variance(L2)
    vp = ((n1-1)*v1 + (n2-1)*v2)/(n1+n2-2)
    se = sqrt(vp*(1/n1+1/n2))
    t = (m1-m2)/se
    ddl = n1+n2-2
    print("- 2. RESULTATS T INDEP -")
    print("m1=", r(m1), " m2=", r(m2))
    print("v1=", r(v1), " v2=", r(v2))
    print("Vp=", r(vp))
    print("---")
    print("t_obs=", r(t))
    print("ddl=", ddl)
    concl(t, "t", str(ddl), "mu_1 = mu_2")

def t_pair():
    L1 = get_list("Avt")
    L2 = get_list("Apr")
    if len(L1)!=len(L2) or len(L1)<2: return

    hyp("mu_d = 0 (Pas de diff.)", "mu_d != 0 (Difference)")

    D = [L1[i]-L2[i] for i in range(len(L1))]
    n = len(D)
    md = mean(D)
    vd = variance(D)
    sd = sqrt(vd)
    t = md/(sd/sqrt(n))
    ddl = n-1
    print("- 2. RESULTATS T PAIR -")
    print("md=", r(md))
    print("vd=", r(vd))
    print("sd=", r(sd))
    print("---")
    print("t_obs=", r(t))
    print("ddl=", ddl)
    concl(t, "t", str(ddl), "mu_d = 0")

def anova_1():
    print("Nb Groupes? ")
    try: k = int(input("? "))
    except: return
    grps, all_d = [], []
    for i in range(k):
        g = get_list("G"+str(i+1))
        grps.append(g)
        all_d += g
    N = len(all_d)
    if N==0: return

    # Hypotheses formelles pour ANOVA 1
    hyp("mu_1 = mu_2 = ... = mu_k", "Au moins 1 moy. differe")

    gm = mean(all_d)
    st = sum([(x-gm)**2 for x in all_d])
    sf = 0
    m_list = []
    for g in grps:
        if g:
            mg = mean(g)
            m_list.append(mg)
            sf += len(g)*(mg-gm)**2
    sr = st - sf

    df_t = N - 1
    df_f, df_r = k-1, N-k
    if df_f*df_r == 0: return

    cm_t = st/df_t if df_t>0 else 0
    cm_f = sf/df_f
    cm_r = sr/df_r
    F = cm_f/cm_r

    print("- 2. RESULTATS ANOVA 1 -")
    print("MoyG=", r(gm))
    print("MGrp=", ", ".join([r(x) for x in m_list]))
    print("SCT=", r(st), " CMT=", r(cm_t))
    print("SCF=", r(sf), " CMF=", r(cm_f))
    print("SCR=", r(sr), " CMR=", r(cm_r))
    print("---")
    print("F_obs=", r(F))
    print("ddl(F,R)=", df_f, ",", df_r)
    concl(F, "F", str(df_f)+";"+str(df_r), "Moy. identiques")

def anova_2():
    print("Niv. Fact. A ?")
    try: a = int(input("? "))
    except: return
    print("Niv. Fact. B ?")
    try: b = int(input("? "))
    except: return
    print("Nb repet (n) ?")
    try: n = int(input("? "))
    except: return

    cells = {}
    all_d = []
    for i in range(a):
        for j in range(b):
            vals = get_list("A"+str(i+1)+" B"+str(j+1))
            if len(vals) != n: return
            cells[(i,j)] = vals
            all_d += vals

    # Hypotheses formelles pour Anova 2
    print("\n--- 1. HYPOTHESES H0 ---")
    print("H0(A): mu_A1 = mu_A2 = ... = mu_Aa")
    print("H0(B): mu_B1 = mu_B2 = ... = mu_Bb")
    if n > 1:
        print("H0(AB): Pas d'interaction")
    print("H1: Au moins 1 moyenne differe")
    input("Recopier puis Entree >")

    gm = mean(all_d)

    mean_A = []
    for i in range(a):
        s = 0
        for j in range(b): s += sum(cells[(i,j)])
        mean_A.append(s/(b*n))

    mean_B = []
    for j in range(b):
        s = 0
        for i in range(a): s += sum(cells[(i,j)])
        mean_B.append(s/(a*n))

    sce_t = sum([(x-gm)**2 for x in all_d])
    sce_a = n * b * sum([(mA-gm)**2 for mA in mean_A])
    sce_b = n * a * sum([(mB-gm)**2 for mB in mean_B])

    df_t = (a * b * n) - 1
    df_a, df_b = a-1, b-1

    if n > 1:
        sce_sub = 0
        for i in range(a):
            for j in range(b):
                cm = mean(cells[(i,j)])
                sce_sub += n * (cm-gm)**2
        sce_ab = sce_sub - sce_a - sce_b
        sce_r = sce_t - sce_sub
        df_ab = df_a * df_b
        df_r = a * b * (n-1)
        ms_ab = sce_ab/df_ab if df_ab>0 else 0
    else:
        sce_ab, df_ab, ms_ab = 0, 0, 0
        sce_r = sce_t - sce_a - sce_b
        df_r = df_a * df_b

    if df_r == 0: return

    ms_t = sce_t/df_t if df_t>0 else 0
    ms_a = sce_a/df_a if df_a>0 else 0
    ms_b = sce_b/df_b if df_b>0 else 0
    ms_r = sce_r/df_r

    F_a = ms_a/ms_r
    F_b = ms_b/ms_r
    F_ab = ms_ab/ms_r if df_ab>0 else 0

    print("\n- 2. RESULTATS : P1 -")
    print("MoyG=", r(gm))
    print("MA=", ", ".join([r(x) for x in mean_A]))
    print("MB=", ", ".join([r(x) for x in mean_B]))
    input("Suite >")

    print("\n- P2: SC & ddl -")
    print("SCA=", r(sce_a), " ddl=", df_a)
    print("SCB=", r(sce_b), " ddl=", df_b)
    if n > 1: print("SCAB=", r(sce_ab), " ddl=", df_ab)
    print("SCR=", r(sce_r), " ddl=", df_r)
    print("SCT=", r(sce_t), " ddl=", df_t)
    input("Suite >")

    print("\n- P3: CM -")
    print("CMA=", r(ms_a))
    print("CMB=", r(ms_b))
    if n > 1: print("CMAB=", r(ms_ab))
    print("CMR=", r(ms_r))
    input("Suite >")

    concl_a2("Facteur A", F_a, df_a, df_r)
    concl_a2("Facteur B", F_b, df_b, df_r)
    if n > 1:
        concl_a2("Interaction AB", F_ab, df_ab, df_r)
    pause()

def chi2_fit():
    O = get_list("Obs")
    print("1.Theo 2.Prob")
    ch = input("? ")
    if ch == "1": T = get_list("Theo")
    else:
        P = get_list("Prob")
        s = sum(O)
        T = [p*s for p in P]
    if len(O)!=len(T): return

    hyp("Prop. obs. = Prop. theo.", "Les prop. different")

    chi2 = 0
    print("- 2. RESULTATS FIT -")
    print("Eff Theo:", ", ".join([r(x) for x in T]))
    print("---")

    for i in range(len(O)):
        if T[i] > 0:
            chi2 += ((O[i]-T[i])**2)/T[i]

    ddl = len(O)-1
    print("Chi2=", r(chi2))
    print("ddl=", ddl)
    concl(chi2, "Chi2", str(ddl), "Obs = Theo")

def chi2_indep():
    print("Nb Lignes ?")
    try: r_lines = int(input("? "))
    except: return
    rows = []
    for i in range(r_lines):
        rows.append(get_list("Lig "+str(i+1)))

    if len(rows) == 0: return

    hyp("Var. Independantes", "Liaison / Dependance")

    c = len(rows[0])
    total = sum([sum(row) for row in rows])

    chi2 = 0
    for i in range(r_lines):
        for j in range(c):
            tot_lig = sum(rows[i])
            tot_col = sum([rows[x][j] for x in range(r_lines)])
            theo = (tot_lig * tot_col) / total
            obs = rows[i][j]
            if theo > 0:
                chi2 += ((obs-theo)**2)/theo

    ddl = (r_lines-1)*(c-1)
    print("- 2. RESULTATS INDEP -")
    print("Chi2=", r(chi2))
    print("ddl=", ddl)
    concl(chi2, "Chi2", str(ddl), "Independance")

def reg_corr():
    X = get_list("X")
    Y = get_list("Y")
    if len(X)!=len(Y): return

    # Hypotheses formelles pour Correlation
    hyp("rho = 0 (Pas de lien lineaire)", "rho != 0 (Lien lineaire)")

    n = len(X)
    mx = mean(X)
    my = mean(Y)

    cov = sum([(X[i]-mx)*(Y[i]-my) for i in range(n)])/(n-1)
    vx = variance(X)
    vy = variance(Y)

    a = cov/vx
    b = my - a*mx
    r_val = cov/(sqrt(vx)*sqrt(vy))
    r2 = r_val**2

    sce_t = vy * (n - 1)
    sce_m = r2 * sce_t
    sce_r = sce_t - sce_m

    df_t = n - 1
    cm_t = sce_t / df_t if df_t > 0 else 0

    if abs(r_val) < 0.99999:
        t_corr = (r_val * sqrt(n-2)) / sqrt(1 - r2)
    else:
        t_corr = 1000

    ddl = n-2
    print("- 2. RESULTATS REG -")
    print("y = ax + b")
    print("a=", r(a), " b=", r(b))
    print("r=", r(r_val))
    print("---")
    print("SCT=", r(sce_t), " CMT=", r(cm_t))
    print("SCM=", r(sce_m))
    print("SCR=", r(sce_r))
    print("---")
    print("Test de Rho=0:")
    print("t_obs=", r(t_corr))
    print("ddl=", ddl)
    concl(t_corr, "t", str(ddl), "rho = 0")

def menu():
    while True:
        print("\n"*3)
        print("--- STAT V21 (ACADEMIQUE) ---")
        print("1.Desc   2.T-Ind")
        print("3.T-Pair 4.Anova1")
        print("5.Anova2 6.Chi2F")
        print("7.Chi2I  8.RegCor")
        print("9.THEORIE 0.Quitter")
        ch = input("Choix? ")

        if ch == "1": stat_desc()
        elif ch == "2": t_indep()
        elif ch == "3": t_pair()
        elif ch == "4": anova_1()
        elif ch == "5": anova_2()
        elif ch == "6": chi2_fit()
        elif ch == "7": chi2_indep()
        elif ch == "8": reg_corr()
        elif ch == "9": theorie()
        elif ch == "0": break

menu()


Commentaires :



Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2026 | Il y a 88 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd