Aller au contenu

Challenge sampling


Mathieu_D

Messages recommandés

J'ai un challenge pour vous messieurs mesdames.

 

J'ai une base avec des individus qui des jours sont là, des jours sont pas là. J'ai y jours par individus.

LEs données se présentent de la forme

Id date

1 03/09/2018

1 04/09/2018

1 07/09/2018

1 11/09/2018

2 17/10/2018

2 30/10/2018
2 17/11/2018

 

Je veux tirer au hasard n jours par individus. n est un multiple de 5. On ne garde pas les week-ends.

 

Je veux que le tirage global : 

  • équilibre le nombre d'observation par semaine (numero iso de la semaine)
  • équilibre le nombre de jours nommés (c(lundi, mardi, mercredi, jeudi, vendredi)

 

Et je veux que le tirage par individu :

  • comporte n/5 lundi, n/5 mardi...
  • ai au moins n semaines différentes

 

Pour la simplicité on ne garde que les individus présents au moins 2 jours nommés de chaque. (2 lundi, 2 mardi...) et présents au moins n semaine.

 

 

Si vous avez un programme R ou SAS, ou un algo qui fait ça, je suis tout ouïe.

Lien vers le commentaire

Déjà pour faire le ménage je convertirais les dates en un format non horrible.

> strptime("03/09/2018", "%d/%m/%Y", tz="GMT")
[1] "2018-09-03 GMT"

 

Ensuite je rajouterais des colonnes avec le numéro de la semaine et le jour puisque c'est important.

# Week of the year as decimal number (00–53) using the first Sunday as day 1 of week 1
> strftime("2018-09-03 GMT", format = "%U")
[1] "35"

# Abbreviated weekday name in the current locale. (Also matches full name on input.)
> strftime("2018-09-03 GMT", format = "%a")
[1] "lun."

Cf. http://www.astrostatistics.psu.edu/su07/R/html/base/html/strptime.html pour les options.

Lien vers le commentaire

Spontanément, j'irai dénombrer le nombre de possibilités P par individu et pour chaque individu sampler 1/P.

 

Ensuite le dénombrement est assez dégueulasse. Ca doit être un truc du genre, avec S le nombre de semaines :

(n parmi S)(n parmi S-5)(n parmi S-10)...(n parmi S-20) - (coefficient de dénombrement lié aux impasses)

Le deuxième terme me semblant un peu galère.

Lien vers le commentaire

Bah si j'ai bien compris du coup on a un dataframe comme ça :

Id	W	D
1	1	1 *
1	1	2
1	1	3
1	1	4
1	1	5
1	2	1
1	2	2 *
1	2	3
1	2	4
1	2	5
1	3	1
1	3	2
1	3	3 *
1	3	4
1	3	5
1	4	1
1	4	2
1	4	3
1	4	4 *
1	4	5
1	5	1
1	5	2
1	5	3
1	5	4
1	5	5 *
2	1	1
2	1	2 *
2	1	3
2	1	4
2	1	5
2	2	1
2	2	2
2	2	3 *
2	2	4
2	2	5
2	3	1
2	3	2
2	3	3
2	3	4 *
2	3	5
2	4	1
2	4	2

Et si on contrôle là où il y a les étoiles (sujet 1 = semaine 1 jour 1, semaine 2 jour 2, semaine 3 jour 3..., sujet 2 = semaine 1 jour 2, semaine 2 jour 3, semaine 3 jour 4...) ça respecte les contraintes à la fois sur le tirage global et par individu. C'est généralisable à un nombre arbitraire de sujets mais pas forcément de semaines (la flemme de tester avec 10 pour voir mais à vue de nez je dirais que ça marche en doublant le nombre de tirages et en continuant la série). Reste à randomiser en reparamétrant pour assigner à chaque semaine/jour un nouveau nombre aléatoire.

 

Mais bon, c'est vendredi soir, je suis fatigué, je loupe sûrement un truc :mrgreen:

Lien vers le commentaire

Est-ce qu'on est sûr qu'au moins une solution existe ? Si non, ça peut commencer à devenir intéressant de faire N tirages valables au niveau local et de déterminer une mesure de la distance par rapport à un tirage équilibré au niveau global. Si des tirages sont valables aussi au niveau global on en prend un au hasard, sinon on en prend un au hasard parmi les plus proches. Selon ce qui est mesuré on peut même envisager de faire du bootstrapping :jesaispo:

Lien vers le commentaire
10 hours ago, Noob said:

Tu peux pas faire l'inverse ? Tu sélectionnes tout, tu classes comme tu veux, tu définis tes quotas pour chaque catégorie et ensuite tu jètes des éléments au hasard tant que tu tes quotas sont pas ce que tu attends.

 

Oui je comptais tester comme ça, sachant que la condition "n jours par gugusse" est plus importante que "n jours par semaine au global".

 

Le problème mineur c'est qu'en R en faisant comme ça c'est long un tirage. (plusieurs centaines de secondes contre quelques dixièmes le sampling simple)

J'vais p'être devoir y aller en rcpp (api c++ dans r) et ça me déprime. (quoique je n'ai pas testé avec SAS)

Lien vers le commentaire
×
×
  • Créer...