Les posteurs les plus actifs de la semaine
doc.bass
 
ycaba
 
zezima
 
lenny868
 


t-test et regression pour variable binaire

Aller en bas

t-test et regression pour variable binaire

Message par lenny868 le Mar 16 Jan 2018 - 16:37

Bonjour à tous,

Je sollicite votre aide pour mon projet de recherche.

je dispose de données suivante : Y est le numéro d'un item et X est un binaire indiquant pour une personne donnée à qui on a proposé cet item si elle l'a acheté ou pas. Je souhaite démontrer que certains choix sont couplés à des produits plus que d'autres.

J'aurais donc trois questions :

1-Est-ce qu'un t-test me permettra de répondre correctement à cette question et est-ce que ma démarche est correcte ? est-ce qu'il faudrait exploiter les autre données ?(t=38,35) et si oui comment ?

Code:
t.test(df$X,df$Y)

        Welch Two Sample t-test

data:  df$X,df$Y
t = 38.353, df = 530.58, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 20.30138 22.49334
sample estimates:
  mean of x   mean of y
21.49717514  0.09981168
h0= pas de relation entre les deux variables, h1=il existe une relation , p-value <0.05, on rejette la h0

2- En quoi pourrait me renseigner la fonction lm sur cette relation ? comment interpréter les résultats ?
Code:

m=lm(df$X,df$Y)
summary(m)
Code:
Call:

Residuals:
    Min      1Q  Median      3Q     Max
-17.161 -11.345  -1.528   6.839  36.839

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)    21.1611     0.5866  36.074   <2e-16 ***
df$X             3.3672     1.8567   1.814   0.0703 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 12.82 on 529 degrees of freedom
Multiple R-squared:  0.006179,  Adjusted R-squared:  0.0043
F-statistic: 3.289 on 1 and 529 DF,  p-value: 0.07032

3- est ce possible de refaire la même démarche pour deux variables binaires ?

Code:
Mes données:
df=structure(list(X = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0), Y = c(9L, 25L, 23L, 50L,
9L, 4L, 20L, 36L, 25L, 28L, 32L, 26L, 26L, 26L, 26L, 4L, 16L,
9L, 25L, 26L, 28L, 32L, 4L, 6L, 6L, 6L, 6L, 6L, 4L, 44L, 15L,
9L, 4L, 4L, 9L, 6L, 26L, 33L, 44L, 44L, 4L, 36L, 14L, 4L, 4L,
36L, 9L, 32L, 32L, 4L, 44L, 26L, 9L, 6L, 4L, 33L, 26L, 26L, 26L,
23L, 26L, 9L, 14L, 36L, 44L, 4L, 35L, 32L, 28L, 28L, 9L, 6L,
4L, 36L, 26L, 9L, 9L, 9L, 4L, 4L, 14L, 33L, 15L, 4L, 4L, 58L,
26L, 4L, 33L, 9L, 4L, 4L, 4L, 39L, 26L, 9L, 6L, 33L, 28L, 33L,
20L, 33L, 6L, 14L, 20L, 50L, 58L, 17L, 36L, 28L, 33L, 50L, 16L,
4L, 33L, 50L, 9L, 26L, 28L, 4L, 58L, 9L, 17L, 6L, 14L, 58L, 28L,
9L, 6L, 50L, 9L, 9L, 9L, 4L, 26L, 9L, 9L, 14L, 36L, 44L, 20L,
26L, 50L, 6L, 9L, 16L, 14L, 11L, 44L, 9L, 58L, 9L, 14L, 9L, 36L,
28L, 17L, 28L, 23L, 11L, 33L, 6L, 14L, 36L, 9L, 9L, 11L, 17L,
17L, 20L, 9L, 14L, 11L, 20L, 6L, 4L, 9L, 14L, 11L, 4L, 6L, 14L,
23L, 36L, 23L, 20L, 11L, 9L, 9L, 14L, 26L, 9L, 6L, 16L, 18L,
23L, 43L, 23L, 6L, 6L, 9L, 28L, 20L, 58L, 36L, 11L, 51L, 20L,
26L, 33L, 9L, 6L, 9L, 17L, 14L, 58L, 11L, 20L, 6L, 17L, 14L,
28L, 16L, 6L, 6L, 28L, 6L, 6L, 9L, 28L, 9L, 22L, 14L, 6L, 6L,
14L, 17L, 36L, 37L, 20L, 20L, 35L, 23L, 9L, 25L, 23L, 23L, 33L,
18L, 51L, 9L, 6L, 6L, 9L, 17L, 9L, 29L, 28L, 20L, 28L, 14L, 50L,
14L, 17L, 6L, 11L, 11L, 28L, 20L, 28L, 20L, 6L, 6L, 9L, 9L, 47L,
9L, 9L, 11L, 17L, 23L, 23L, 44L, 20L, 36L, 52L, 17L, 17L, 44L,
28L, 11L, 14L, 28L, 23L, 9L, 9L, 17L, 18L, 22L, 28L, 9L, 14L,
14L, 14L, 23L, 23L, 52L, 17L, 28L, 14L, 28L, 9L, 6L, 6L, 28L,
23L, 23L, 4L, 37L, 51L, 51L, 14L, 23L, 6L, 28L, 20L, 17L, 26L,
11L, 35L, 15L, 14L, 20L, 18L, 4L, 29L, 6L, 30L, 51L, 23L, 9L,
23L, 14L, 23L, 14L, 15L, 36L, 9L, 37L, 29L, 28L, 30L, 23L, 51L,
51L, 17L, 17L, 30L, 18L, 23L, 28L, 15L, 14L, 9L, 28L, 33L, 14L,
23L, 9L, 14L, 26L, 9L, 23L, 14L, 9L, 44L, 43L, 15L, 4L, 14L,
14L, 23L, 52L, 23L, 14L, 32L, 17L, 17L, 44L, 20L, 30L, 28L, 43L,
33L, 23L, 9L, 44L, 33L, 23L, 18L, 26L, 26L, 26L, 9L, 6L, 11L,
6L, 18L, 30L, 51L, 44L, 23L, 43L, 30L, 23L, 17L, 44L, 43L, 23L,
15L, 28L, 17L, 18L, 23L, 26L, 14L, 9L, 28L, 15L, 16L, 9L, 17L,
30L, 15L, 20L, 6L, 23L, 18L, 32L, 30L, 18L, 17L, 23L, 18L, 18L,
6L, 17L, 30L, 51L, 44L, 23L, 28L, 18L, 15L, 18L, 28L, 26L, 44L,
23L, 23L, 17L, 28L, 30L, 17L, 44L, 43L, 30L, 38L, 17L, 28L, 26L,
17L, 17L, 18L, 23L, 28L, 6L, 30L, 17L, 9L, 28L, 28L, 28L, 11L,
17L, 17L, 20L, 9L, 30L, 18L, 47L, 30L, 23L, 33L, 18L, 30L, 17L,
36L, 30L, 23L, 17L, 30L, 33L, 14L, 18L, 15L, 32L, 23L, 23L, 30L,
23L, 30L, 30L, 43L, 30L, 30L, 17L, 36L, 17L, 17L, 51L, 30L, 17L,
15L, 50L, 11L, 11L, 4L, 32L, 26L, 17L)), .Names = c("X", "Y"), row.names = c(NA,
-531L), class = "data.frame")

En vous remerciant pour votre aide précieuse

lenny868

Nombre de messages : 40
Date d'inscription : 16/01/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par Eric Wajnberg le Mar 16 Jan 2018 - 16:54

La démarche ici n'est pas correcte. Tout d'abord, un test t compare la moyenne de deux échantillons, pas un lien entre deux variables d'un même échantillon. Par ailleurs, les deux échantillons doivent être gaussiens, or ici la variable X est binomiale.

L'idée de la régression est meilleure, mais - dans R - une régression se note avec la notation "formula" avec la syntaxe utilisant le tilde "~". La syntaxe que vous utilisez n'est pas la bonne.

Une démarche possible est de se mettre dans le cadre de la régression logistique et de voir si la probabilité d'acheter (binomiale) dépend du numéro de l'item. A cet égard, il est dommage que vous n'ayez (apparemment) qu'un individu testé par numéro d'item.

HTH, Eric.
avatar
Eric Wajnberg

Nombre de messages : 950
Date d'inscription : 14/09/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par lenny868 le Mar 16 Jan 2018 - 17:03

merci pour votre retour. Est-ce la bonne syntaxe pour la regression ? comment devrais-je interpreter les résultats ?

Code:
m=lm(formula = df$X ~ df$Y)
summary(m)

Call:
lm(formula = df$X ~ df$Y)

Residuals:
    Min      1Q  Median      3Q     Max
-17.161 -11.345  -1.528   6.839  36.839

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)    21.1611     0.5866  36.074   <2e-16 ***
df$X            3.3672     1.8567   1.814   0.0703 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 12.82 on 529 degrees of freedom
Multiple R-squared:  0.006179,  Adjusted R-squared:  0.0043
F-statistic: 3.289 on 1 and 529 DF,  p-value: 0.07032

Il me semble avoir plusieurs individu par item ?
Code:
table(df$X,df$Y)
   4   6   9   11   14   15   16   17   18   20   22   23   25   26   28   29   30   32   33   35   36   37   38   39   43   44   47   50   51   52   58
0   30   41   55   17   34   11   5   35   17   21   2   34   4   25   32   3   22   5   15   2   13   3   1   1   7   15   2   7   10   2   7
1   0   0   7   0   3   1   1   5   1   0   0   10   0   3   7   0   1   4   2   1   3   0   0   0   0   2   0   1   0   1   0

Merci,
Lenny

lenny868

Nombre de messages : 40
Date d'inscription : 16/01/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par Eric Wajnberg le Mer 17 Jan 2018 - 5:36

Ok, très bien si vous avez plusieurs mesures par item.

Non, ce n'est pas la bonne syntaxe (ni le bon modèle) pour la régression, car la variable que vous voulez expliquez (X) ne suit pas une distribution normale, mais une distribution binomiale. Il vous faut une régression logistique, qui peut par exemple s'ajuster avec la fonction glm() sous R. Il y a pas mal de tutoriels sur le web.

Tachez de vous en sortir seul, et en cas de problème n'hésitez pas à revenir vers nous.

Eric.
avatar
Eric Wajnberg

Nombre de messages : 950
Date d'inscription : 14/09/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par lenny868 le Mer 17 Jan 2018 - 15:10

Bonjour, Merci pour ces conseils.

J'ai fais comme suit : aggregation par "product" des choix "yes" ou "no"
Code:
df=structure(list(Product = c(4L, 6L, 9L, 11L, 14L, 15L, 16L, 17L,
18L, 20L, 22L, 23L, 25L, 26L, 28L, 29L, 30L, 32L, 33L, 35L, 36L,
37L, 38L, 39L, 43L, 44L, 47L, 50L, 51L, 52L, 58L), No = c(30L,
41L, 55L, 17L, 34L, 11L, 5L, 35L, 17L, 21L, 2L, 34L, 4L, 25L,
32L, 3L, 22L, 5L, 15L, 2L, 13L, 3L, 1L, 1L, 7L, 15L, 2L, 7L,
10L, 2L, 7L), Yes = c(0L, 0L, 7L, 0L, 3L, 1L, 1L, 5L, 1L, 0L,
0L, 10L, 0L, 3L, 7L, 0L, 1L, 4L, 2L, 1L, 3L, 0L, 0L, 0L, 0L,
2L, 0L, 1L, 0L, 1L, 0L)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -31L), .Names = c("Product", "No", "Yes"
))

J'ai suivi un tuto cmme suit :
Code:

attach(df)
> glm(cbind(Yes,No) ~ Product , family=binomial)

Call:  glm(formula = cbind(Yes, No) ~ Product, family = binomial)

Coefficients:
(Intercept)      Product  
   -2.63639      0.01917  

Degrees of Freedom: 30 Total (i.e. Null);  29 Residual
Null Deviance:      52.83
Residual Deviance: 49.69        AIC: 97.24
> 1-pchisq(49.69,29)
[1] 0.009751491
>

Est-ce que c'est la bonne démarche ?
il s'agit de quel hypothèses on part dans ce genre de test ? Que peut-on conclure de ces résultats ?
Merci,

Lenny

lenny868

Nombre de messages : 40
Date d'inscription : 16/01/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par Eric Wajnberg le Mer 17 Jan 2018 - 16:04

Oui, c'est a priori la bonne démarche. Il s'agit ici de savoir si la variable Product a un effet sur le choix Yes/No.

Une fois que vous avez ajusté ce modèle, vous pouvez faire un test, par exemple comme suit :

Code:
> anova(glm(cbind(Yes,No) ~ Product, family=binomial),test="Chisq")
Analysis of Deviance Table

Model: binomial, link: logit

Response: cbind(Yes, No)

Terms added sequentially (first to last)


        Df Deviance Resid. Df Resid. Dev Pr(>Chi)  
NULL                       30     52.831          
Product  1   3.1387        29     49.692  0.07646 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Et l'on remarque qu'il n'y a pas d'effet significatif du Produit sur le choix Yes/No, ce qui répond à votre question, je pense.

Attention cependant, ce modèle prend la variable Product comme un trait quantitatif, c'est-à-dire, par exemple, que le produit 18 est supposé avoir un effet double que le produit 9 (dans l'espace du modèle), etc., ce qui n'a peut être pas de sens dans votre cas. Les numéros des produits sont comme des étiquettes "a", "b", "c", etc., par exemple. C'est justement parce que cette variable est prise comme quantitative, que le df de son test vaux 1, comme une pente dans une régression normale. Si ceci n'a pas de sens, il faut forcer R à prendre cette variable comme qualitative, avec la fonction factor(), comme ça :

Code:
> anova(glm(cbind(Yes,No) ~ factor(Product), family=binomial),test="Chisq")
Analysis of Deviance Table

Model: binomial, link: logit

Response: cbind(Yes, No)

Terms added sequentially (first to last)


                Df Deviance Resid. Df Resid. Dev Pr(>Chi)  
NULL                               30     52.831            
factor(Product) 30   52.831         0      0.000 0.006188 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Et là sort un très fort effet de la variable Product (et le df change).

D'une manière générale, il est piégeux de coder des variables qualitatives avec des nombres.

A vous de voir ce qui vous convient le mieux.

HTH, Eric.
avatar
Eric Wajnberg

Nombre de messages : 950
Date d'inscription : 14/09/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par lenny868 le Mer 17 Jan 2018 - 16:49

Ah super, merci d'avoir souligné le trait Quantitatif / Qualitatif. En effet, la numérotation englobe un score de qualité (plus le score est élevé plus c'est mieux).
Donc j'en conclu en effet, que les choix ne sont pas plus élevé quand la qualité croit, plutôt comme si les choix s'orientait vers un niveau de qualité spécifique semble-t-il.

J'utilise la même méthode pour integrer une variable en plus : Tranche d'age (Age)

Code:
df=structure(list(Age = structure(c(1L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L,
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 9L,
9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L,
9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 11L,
11L, 11L, 11L, 11L, 11L, 11L, 12L, 13L, NA), .Label = c("(10,15]",
"(15,20]", "(20,25]", "(25,30]", "(30,35]", "(35,40]", "(40,45]",
"(45,50]", "(50,55]", "(55,60]", "(60,65]", "(65,70]", "(70,75]",
"(75,80]"), class = "factor"), Product = c(6L, 16L, 4L, 6L, 9L,
11L, 14L, 15L, 17L, 20L, 23L, 26L, 28L, 30L, 32L, 33L, 36L, 44L,
47L, 4L, 6L, 9L, 11L, 14L, 15L, 17L, 18L, 20L, 23L, 25L, 26L,
28L, 30L, 32L, 33L, 36L, 44L, 50L, 51L, 4L, 6L, 9L, 11L, 14L,
15L, 16L, 17L, 18L, 20L, 22L, 23L, 26L, 28L, 29L, 30L, 32L, 33L,
36L, 37L, 39L, 43L, 44L, 50L, 51L, 58L, 4L, 6L, 9L, 11L, 14L,
15L, 17L, 18L, 20L, 23L, 26L, 28L, 30L, 32L, 33L, 36L, 37L, 47L,
58L, 4L, 6L, 9L, 11L, 14L, 15L, 17L, 18L, 20L, 23L, 25L, 26L,
28L, 30L, 33L, 35L, 36L, 44L, 4L, 6L, 9L, 14L, 15L, 17L, 20L,
22L, 23L, 25L, 26L, 28L, 29L, 30L, 33L, 36L, 38L, 43L, 44L, 50L,
51L, 58L, 4L, 6L, 9L, 11L, 14L, 15L, 16L, 17L, 20L, 23L, 25L,
26L, 28L, 30L, 32L, 33L, 35L, 36L, 37L, 43L, 44L, 50L, 51L, 52L,
58L, 4L, 6L, 9L, 11L, 14L, 15L, 16L, 17L, 18L, 20L, 23L, 26L,
28L, 29L, 30L, 32L, 33L, 36L, 43L, 44L, 50L, 51L, 52L, 4L, 6L,
9L, 14L, 17L, 18L, 20L, 23L, 25L, 26L, 28L, 30L, 32L, 33L, 35L,
36L, 43L, 44L, 51L, 52L, 58L, 6L, 9L, 20L, 23L, 26L, 28L, 36L,
4L, 15L, 6L), Yes = c(2L, 1L, 4L, 5L, 2L, 1L, 2L, 2L, 2L, 2L,
1L, 3L, 4L, 4L, 1L, 4L, 1L, 1L, 1L, 6L, 2L, 4L, 4L, 8L, 1L, 4L,
1L, 1L, 3L, 1L, 5L, 1L, 1L, 0L, 2L, 1L, 1L, 1L, 2L, 4L, 4L, 8L,
2L, 6L, 1L, 1L, 4L, 4L, 2L, 1L, 9L, 3L, 3L, 1L, 2L, 1L, 2L, 2L,
1L, 1L, 1L, 1L, 1L, 3L, 1L, 4L, 3L, 13L, 2L, 1L, 2L, 4L, 3L,
2L, 3L, 2L, 5L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 4L, 9L, 9L, 4L, 5L,
1L, 8L, 2L, 1L, 3L, 1L, 0L, 3L, 1L, 1L, 1L, 2L, 2L, 3L, 7L, 3L,
2L, 1L, 7L, 3L, 1L, 1L, 1L, 3L, 8L, 1L, 2L, 1L, 3L, 1L, 1L, 2L,
1L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 2L, 3L, 2L, 2L, 1L, 3L, 3L,
6L, 0L, 0L, 1L, 0L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 2L, 3L, 8L, 2L,
6L, 1L, 1L, 1L, 3L, 3L, 7L, 5L, 4L, 1L, 2L, 1L, 2L, 3L, 3L, 3L,
3L, 1L, 0L, 1L, 3L, 6L, 3L, 3L, 4L, 2L, 3L, 1L, 2L, 1L, 2L, 1L,
2L, 0L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 0L, 3L, 2L, 0L, 2L, 1L, 1L,
1L, 1L), No = c(0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 2L, 0L, 1L, 0L,
0L, 0L, 0L, 1L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L,
0L, 0L, 3L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 2L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 3L, 0L, 1L, 1L,
0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 1L, 0L, 3L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA,
-203L), .Names = c("Age", "Product", "Yes", "No"))

J'obtiens

Code:
anova(glm(cbind(Yes,No) ~ Age + Product, family=binomial),test="Chisq")
Analysis of Deviance Table

Model: binomial, link: logit

Response: cbind(Yes, No)

Terms added sequentially (first to last)


        Df Deviance Resid. Df Resid. Dev Pr(>Chi)  
NULL                      201     176.98          
Age     12  24.4260       189     152.56  0.01779 *
Product  1   1.8942       188     150.66  0.16873  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Pourrais-je dans ce cas m'orienter vers l'effet de l'age ?
Une autre question en terme de méthode : pourquoi combiner l'anova et le glm ?

Je suis impressionnée par la méthode et les apports, merci beaucoup !
Lenny

lenny868

Nombre de messages : 40
Date d'inscription : 16/01/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par Eric Wajnberg le Mer 17 Jan 2018 - 17:22

Oui, il semble y avoir un effet âge.

En revanche pour cet autre modèle :

1) Le codage de l'âge que vous utilisez (intervales) est qualitatif, ce qui explique - une fois encore - que vous avez pas mal de df pour ce terme (12). Je vous invite à replacer la variable âge décrite en intervalles par le point médian de ces intervalles et traiter l'âge comme une variable quantitative, ce qui a du sens ici.

2) Vous pourriez/devriez ajouter dans cet autre modèle l’interaction entre Product et âge. L'effet Product n'est peut-être pas le même d'un âge à un autre, ou réciproquement.

Il ne s'agit pas de combiner ANOVA et glm ici. Il n'y a pas d'ANOVA ici. C'est une ambiguïté de R, je trouve. La fonction anova() (dans ce cas) demande à R de présenter les résultats sous forme d'un tableau d'ANOVA, pas de faire une ANOVA.. Pas mal de gens se plantent sur ce point.

HTH, Eric.
avatar
Eric Wajnberg

Nombre de messages : 950
Date d'inscription : 14/09/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par lenny868 le Mer 17 Jan 2018 - 20:10

Merci encore, J'essai de prendre en compte vos remarques

Pourquoi les p-value changent de valeur en inversant l'ordre des variables :
Code:
anova(glm(cbind(Yes,No) ~ Age + Product, family=binomial),test="Chisq")
anova(glm(cbind(Yes,No) ~ Product + Age, family=binomial),test="Chisq")

Je crois que c'est de la gourmandise  de vouloir y intégrer une dernière variable   Sad  : Client habitué ou pas 'Type'. Avec mes données agrégés par intervalle d'age, j'hésite entre le fait d'agréger par somme le nombre d'habitué comme suit :

Code:
res=structure(list(Product = structure(c(1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L,
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L,
9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L,
9L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
11L, 11L, 11L, 11L, 11L, 11L, 11L, 12L, 13L, NA), .Label = c("(10,15]",
"(15,20]", "(20,25]", "(25,30]", "(30,35]", "(35,40]", "(40,45]",
"(45,50]", "(50,55]", "(55,60]", "(60,65]", "(65,70]", "(70,75]",
"(75,80]"), class = "factor"), Age = c(6L, 16L, 4L, 6L, 9L, 11L,
14L, 15L, 17L, 20L, 23L, 26L, 28L, 30L, 32L, 33L, 36L, 44L, 47L,
4L, 6L, 9L, 11L, 14L, 15L, 17L, 18L, 20L, 23L, 25L, 26L, 28L,
30L, 32L, 33L, 36L, 44L, 50L, 51L, 4L, 6L, 9L, 11L, 14L, 15L,
16L, 17L, 18L, 20L, 22L, 23L, 26L, 28L, 29L, 30L, 32L, 33L, 36L,
37L, 39L, 43L, 44L, 50L, 51L, 58L, 4L, 6L, 9L, 11L, 14L, 15L,
17L, 18L, 20L, 23L, 26L, 28L, 30L, 32L, 33L, 36L, 37L, 47L, 58L,
4L, 6L, 9L, 11L, 14L, 15L, 17L, 18L, 20L, 23L, 25L, 26L, 28L,
30L, 33L, 35L, 36L, 44L, 4L, 6L, 9L, 14L, 15L, 17L, 20L, 22L,
23L, 25L, 26L, 28L, 29L, 30L, 33L, 36L, 38L, 43L, 44L, 50L, 51L,
58L, 4L, 6L, 9L, 11L, 14L, 15L, 16L, 17L, 20L, 23L, 25L, 26L,
28L, 30L, 32L, 33L, 35L, 36L, 37L, 43L, 44L, 50L, 51L, 52L, 58L,
4L, 6L, 9L, 11L, 14L, 15L, 16L, 17L, 18L, 20L, 23L, 26L, 28L,
29L, 30L, 32L, 33L, 36L, 43L, 44L, 50L, 51L, 52L, 4L, 6L, 9L,
14L, 17L, 18L, 20L, 23L, 25L, 26L, 28L, 30L, 32L, 33L, 35L, 36L,
43L, 44L, 51L, 52L, 58L, 6L, 9L, 20L, 23L, 26L, 28L, 36L, 4L,
15L, 6L), Type = c(2L, 1L, 4L, 5L, 2L, 1L, 2L, 2L, 2L, 2L, 1L,
3L, 4L, 4L, 1L, 4L, 1L, 1L, 1L, 6L, 2L, 4L, 4L, 8L, 1L, 4L, 1L,
1L, 3L, 1L, 5L, 1L, 1L, 0L, 2L, 1L, 1L, 1L, 2L, 4L, 4L, 8L, 2L,
6L, 1L, 1L, 4L, 4L, 2L, 1L, 9L, 3L, 3L, 1L, 2L, 1L, 2L, 2L, 1L,
1L, 1L, 1L, 1L, 3L, 1L, 4L, 3L, 13L, 2L, 1L, 2L, 4L, 3L, 2L,
3L, 2L, 5L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 4L, 9L, 9L, 4L, 5L, 1L,
8L, 2L, 1L, 3L, 1L, 0L, 3L, 1L, 1L, 1L, 2L, 2L, 3L, 7L, 3L, 2L,
1L, 7L, 3L, 1L, 1L, 1L, 3L, 8L, 1L, 2L, 1L, 3L, 1L, 1L, 2L, 1L,
2L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 2L, 3L, 2L, 2L, 1L, 3L, 3L, 6L,
0L, 0L, 1L, 0L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 2L, 3L, 8L, 2L, 6L,
1L, 1L, 1L, 3L, 3L, 7L, 5L, 4L, 1L, 2L, 1L, 2L, 3L, 3L, 3L, 3L,
1L, 0L, 1L, 3L, 6L, 3L, 3L, 4L, 2L, 3L, 1L, 2L, 1L, 2L, 1L, 2L,
0L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 0L, 3L, 2L, 0L, 2L, 1L, 1L, 1L,
1L), Yes = c(0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 2L, 0L, 1L, 0L,
0L, 0L, 0L, 1L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L,
0L, 0L, 3L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 2L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 3L, 0L, 1L, 1L,
0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 1L, 0L, 3L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L),
    No = c(2L, 0L, 3L, 4L, 3L, 1L, 1L, 2L, 1L, 2L, 0L, 3L, 5L,
    4L, 1L, 4L, 1L, 1L, 1L, 6L, 2L, 3L, 3L, 8L, 1L, 4L, 0L, 1L,
    3L, 1L, 5L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 4L, 4L, 7L, 1L,
    5L, 1L, 1L, 5L, 4L, 1L, 1L, 9L, 3L, 3L, 1L, 2L, 1L, 2L, 2L,
    1L, 1L, 1L, 1L, 1L, 2L, 1L, 4L, 3L, 11L, 1L, 0L, 2L, 5L,
    3L, 2L, 4L, 1L, 4L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 4L, 7L, 10L,
    3L, 6L, 1L, 9L, 2L, 1L, 3L, 1L, 1L, 5L, 1L, 1L, 1L, 1L, 2L,
    2L, 5L, 3L, 2L, 2L, 7L, 3L, 1L, 3L, 0L, 4L, 9L, 1L, 2L, 1L,
    4L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 3L, 3L, 2L, 1L, 3L, 4L,
    2L, 3L, 1L, 3L, 6L, 6L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 2L, 1L,
    1L, 1L, 2L, 3L, 7L, 2L, 5L, 1L, 1L, 1L, 3L, 2L, 10L, 5L,
    4L, 1L, 2L, 2L, 2L, 3L, 2L, 4L, 2L, 1L, 1L, 1L, 3L, 6L, 3L,
    2L, 4L, 2L, 4L, 0L, 2L, 1L, 2L, 1L, 2L, 0L, 3L, 1L, 2L, 2L,
    1L, 0L, 0L, 1L, 3L, 2L, 1L, 2L, 1L, 1L, 1L, 1L)), class = "data.frame", row.names = c(NA,
-203L), .Names = c("Product", "Age", "Type", "Yes", "No"))

ou de laisser qualitativement 0/1 (factor)
Code:
res=structure(list(Product = structure(c(1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,
7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L,
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 9L,
9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L,
9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L,
12L, 13L, NA), .Label = c("(10,15]", "(15,20]", "(20,25]", "(25,30]",
"(30,35]", "(35,40]", "(40,45]", "(45,50]", "(50,55]", "(55,60]",
"(60,65]", "(65,70]", "(70,75]", "(75,80]"), class = "factor"),
    Age = c(6L, 16L, 4L, 4L, 6L, 6L, 9L, 11L, 14L, 14L, 15L,
    17L, 17L, 20L, 23L, 26L, 28L, 30L, 32L, 33L, 36L, 44L, 47L,
    4L, 6L, 9L, 9L, 11L, 11L, 14L, 14L, 15L, 17L, 18L, 20L, 23L,
    25L, 26L, 28L, 30L, 32L, 32L, 33L, 33L, 36L, 44L, 50L, 51L,
    4L, 6L, 9L, 9L, 11L, 11L, 14L, 14L, 15L, 16L, 17L, 18L, 20L,
    20L, 22L, 23L, 26L, 28L, 29L, 30L, 32L, 33L, 36L, 37L, 39L,
    43L, 44L, 50L, 51L, 51L, 58L, 4L, 6L, 9L, 9L, 11L, 11L, 14L,
    15L, 17L, 18L, 20L, 23L, 26L, 26L, 28L, 28L, 30L, 30L, 32L,
    33L, 36L, 37L, 47L, 58L, 4L, 6L, 6L, 9L, 11L, 11L, 14L, 14L,
    15L, 17L, 18L, 20L, 23L, 25L, 26L, 28L, 30L, 33L, 35L, 36L,
    36L, 44L, 4L, 4L, 6L, 6L, 9L, 9L, 14L, 15L, 17L, 17L, 20L,
    22L, 23L, 23L, 25L, 26L, 28L, 29L, 30L, 33L, 36L, 38L, 43L,
    44L, 50L, 51L, 58L, 4L, 4L, 6L, 6L, 9L, 9L, 11L, 14L, 15L,
    16L, 17L, 20L, 23L, 25L, 26L, 28L, 30L, 32L, 33L, 35L, 36L,
    37L, 43L, 44L, 50L, 51L, 52L, 58L, 4L, 6L, 9L, 9L, 11L, 14L,
    14L, 15L, 16L, 17L, 18L, 18L, 20L, 20L, 23L, 26L, 28L, 29L,
    30L, 32L, 33L, 36L, 43L, 43L, 44L, 50L, 50L, 51L, 52L, 4L,
    6L, 9L, 14L, 17L, 17L, 18L, 20L, 23L, 25L, 26L, 28L, 30L,
    32L, 33L, 35L, 36L, 43L, 44L, 51L, 52L, 58L, 6L, 9L, 20L,
    23L, 23L, 26L, 28L, 36L, 4L, 15L, 6L), Type = structure(c(2L,
    1L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 2L,
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L,
    2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L,
    2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L,
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
    1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L,
    2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L,
    2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L,
    2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
    2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L,
    2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L), .Label = c("0", "1"), class = "factor"), Yes = c(2L,
    1L, 1L, 3L, 1L, 4L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 3L,
    4L, 4L, 1L, 4L, 1L, 1L, 1L, 6L, 2L, 2L, 2L, 1L, 3L, 1L, 7L,
    1L, 4L, 1L, 1L, 3L, 1L, 5L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
    1L, 2L, 4L, 4L, 1L, 7L, 1L, 1L, 1L, 5L, 1L, 1L, 4L, 4L, 1L,
    1L, 1L, 9L, 3L, 3L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L,
    1L, 2L, 1L, 4L, 3L, 2L, 11L, 1L, 1L, 1L, 2L, 4L, 3L, 2L,
    3L, 1L, 1L, 1L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 4L, 2L,
    7L, 9L, 1L, 3L, 1L, 4L, 1L, 8L, 2L, 1L, 3L, 1L, 0L, 3L, 1L,
    1L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 5L, 1L, 2L, 2L, 1L, 1L, 6L,
    3L, 1L, 1L, 0L, 1L, 3L, 8L, 1L, 2L, 1L, 3L, 1L, 1L, 2L, 1L,
    2L, 2L, 1L, 1L, 1L, 2L, 0L, 2L, 3L, 2L, 1L, 2L, 3L, 2L, 2L,
    1L, 3L, 3L, 6L, 0L, 0L, 1L, 0L, 1L, 1L, 3L, 1L, 1L, 1L, 1L,
    2L, 3L, 1L, 7L, 2L, 1L, 5L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 7L,
    5L, 4L, 1L, 2L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 1L, 0L, 1L,
    3L, 6L, 3L, 1L, 2L, 4L, 2L, 3L, 1L, 2L, 1L, 2L, 1L, 2L, 0L,
    2L, 1L, 2L, 2L, 1L, 1L, 1L, 0L, 3L, 1L, 1L, 0L, 2L, 1L, 1L,
    1L, 1L), No = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
    0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
    1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L,
    1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
    0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
    0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
    0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 2L, 0L, 1L, 0L, 0L, 0L,
    0L, 1L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
    0L, 1L, 0L, 1L, 0L, 0L, 0L, 3L, 0L, 1L, 1L, 0L, 0L, 0L, 1L,
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L,
    1L, 1L, 0L, 1L, 0L, 0L, 3L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L,
    1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
    1L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L,
    0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
    0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L,
    1L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA,
-242L), .Names = c("Product", "Age", "Type", "Yes", "No"))

Dans les deux cas Type ne semble pas être significatif, pourtant la grande proportion des clients "acheteurs"  sont des habitués.

Je crois qu'à ce niveau il faudrait tester le type a part ? J'hésite entre chi2 ou utiliser la même méthode

chi 2 :

Code:
chi=structure(c(49L, 443L, 3L, 50L), .Dim = c(2L, 2L), .Dimnames = structure(list(
c("Irregular", "Regular"), c("No", "Yes")), .Names = c("", "")), class = "table")  
chisq.test(chi)
data:  a
X-squared = 0.58696, df = 1, p-value = 0.4436
Code:

              No    Yes
  Irregular  49   3
  Regular   443  50




GLM
Code:
res= structure(list(Type = structure(1:2, .Label = c("0", "1"), class = "factor"),
    Yes = c(49L, 443L), No = c(3L, 50L)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -2L), .Names = c("Type",
"No", "Yes"))

   Ty   Type    No   Yes
  (fctr) (int) (int)
1      0    49     3
2      1   443    50


 anova(glm(cbind(Yes,No) ~  Type, family=binomial),test="Chisq")
     Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL                     1     1.1663        
Type  1   1.1663         0     0.0000   0.2802

Quelle est le moyen correct pour y arriver ?
En vous remerciant encore pour votre aide précieuse

Lenny,

lenny868

Nombre de messages : 40
Date d'inscription : 16/01/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par Eric Wajnberg le Jeu 18 Jan 2018 - 10:01

L'ordre des variables entrées dans le modèle à de l'importance. Car chaque variable est testée avec la précédente déjà dans le modèle.

Encore une fois, éviter de coder des variables qualitatives par des nombres. C'est clairement une source d'erreur (c'est ce que vous faites à présent avec la variable Tyoe).

Enfin, une régression logistique est largement plus puissante qu'un simple Chi2 sur un table de contingence, notamment -entre autre- car elle permet de tester plusieurs variables explicatives simultanément.

Cordialement, Eric.
avatar
Eric Wajnberg

Nombre de messages : 950
Date d'inscription : 14/09/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par lenny868 le Jeu 18 Jan 2018 - 11:05

J'ai remplacé mes binaires avec des "oui" et "non". J'ai tenté de représenter graphiquement la problématique.La fait que Type "oui" (Regulier) ne ressort pas dans les stat m'intrigue. on voit clairement que la bonne majorité des non habitué n'achètent pas. J'essai de comprendre ou se situe mon erreur dans ma démarche  bounce


lenny868

Nombre de messages : 40
Date d'inscription : 16/01/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par Eric Wajnberg le Jeu 18 Jan 2018 - 16:54

On cherche à modéliser (à expliquer) le pourcentage de oui/non. Du coup, un graphique pour comprendre doit forcément avoir cette variable, ou la proba de oui, etc. en ordonnée..

Eric.
avatar
Eric Wajnberg

Nombre de messages : 950
Date d'inscription : 14/09/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par lenny868 le Sam 27 Jan 2018 - 20:12

Merci de m'avoir fourni ces informations qui m'ont permis d'avancer sur mes données et surtout m'améliorer.

Pour revenir à l'Anova et chisq utilisé. Je comprends mieux qu'en utilisant la GLM on a trois méthode statistiques : le Wald test, le LRT et le score test. Notre approche se situe dans le LRT qui semble être la meilleure méthode parmi ces trois.

Puisque l'anova ajoute séquentiellement les paramètres, elle teste la difference des log des deux modèles et affiche le Pr(>Chi) qui est la différence des log des deux modèles. Je conclus donc que l'hypothèse null est qu'il n'existe pas de différence significative entre les log des deux modèles.


Pour un Pr(>|t|) , l'hypothèse nulle part du principe que le coefficient est nulle (pas d'effet)


Pour Pr(>|z|) , je n'arrive pas faire une conclusion  Sad


Est-ce que les deductions que je viens de citer sont correctes ? J'ai regardé pas mal d'articles et d'exemples.


En vous remerciants


Lenny

lenny868

Nombre de messages : 40
Date d'inscription : 16/01/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par Eric Wajnberg le Dim 28 Jan 2018 - 6:59

lenny868 a écrit:Pour revenir à l'Anova et chisq utilisé. Je comprends mieux qu'en utilisant la GLM on a trois méthode statistiques : le Wald test, le LRT et le score test. Notre approche se situe dans le LRT qui semble être la meilleure méthode parmi ces trois.
Un test du rapport de vraisemblance (LRT) est - de loin - la démarche qu'il faut préférer, pour plein de raisons. Et c'est ce que fait la fonction anova().
lenny868 a écrit:Puisque l'anova ajoute séquentiellement les paramètres, elle teste la difference des log des deux modèles et affiche le Pr(>Chi) qui est la différence des log des deux modèles. Je conclus donc que l'hypothèse null est qu'il n'existe pas de différence significative entre les log des deux modèles.
Les log?? Il n'y a aucun log dans ces modèles ! Vous voulez dire logit ? Il s'agit de tests de rapport de vraisemblance. On teste donc la différence de vraisemblance entre les deux modèles, ce qui se fait par la comparaison de leur déviance. Ca revient à ce qu'on fait avec un F dans une ANOVA toute simple (i.e., tester la variation entre les deux modèles pondérée par la variation à l'intérieur des modèles). D'ailleurs, un test F n'est rien moins qu'un cas particulier d'un test de rapport de vraisemblance.
lenny868 a écrit:Pour un Pr(>|t|) , l'hypothèse nulle part du principe que le coefficient est nulle (pas d'effet)
Pour Pr(>|z|) , je n'arrive pas faire une conclusion  Sad
Dans tous les cas, l'hypothèse nulle correspond à l’absence d'effet (coefficient = zero). Si la proba est faible (disons < 0.05) on rejette l'hypothèse nulle avec un risque faible. C'est tout.

HTH, Eric.
avatar
Eric Wajnberg

Nombre de messages : 950
Date d'inscription : 14/09/2012

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: t-test et regression pour variable binaire

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum