Veckodagsnamnsanalys

Här är lite kommentarer och R-kod till Mats Anderssons Veckodagsstatistik, där han undersökt fördelningen av veckodagsnamnen på google. Se även hans tidigare Veckodagar. Av tidsskäl skriver jag inte detta som en flådig HTML-fil, utan endast som text rakt upp och ned. Har du några frågor etc är det bara att maila mig.
Datafilen days.dat

Fredag,Lordag,Sondag,Mandag,Tisdag,Onsdag,Torsdag
Mandag,121000,117000,120000,130000,123000,127000,126000
Tisdag,99300,85900,86100,93200,87000,86200,87600
Onsdag,108000,102000,101000,107000,102000,102000,109000
Torsdag,117000,121000,124000,126000,119000,117000,120000
Fredag,130000,128000,126000,138000,126000,125000,131000
Lordag,99400,94200,96000,101000,96700,95200,98600
Sondag,88100,86800,81100,84000,85800,80900,80600

Nedan använder jag R för att analysera saker och ting.
Kommentarer
"<-" är tilldelningstecknet
De ">" som är först på vissa rader är prompten. De ska inte 
skrivas in. Men det visar tydligt vilka kommando som används

> days <- read.table("~/blogg/days.dat", header=T, sep=",")

t() transponerar, dvs vänder tabellen 90 grader så att raderna är
de dagar sökningen gjordes

> days2<-t(days)
> days2

        Mandag Tisdag Onsdag Torsdag Fredag Lordag Sondag
Fredag  121000  99300 108000  117000 130000  99400  88100
Lordag  117000  85900 102000  121000 128000  94200  86800
Sondag  120000  86100 101000  124000 126000  96000  81100
Mandag  130000  93200 107000  126000 138000 101000  84000
Tisdag  123000  87000 102000  119000 126000  96700  85800
Onsdag  127000  86200 102000  117000 125000  95200  80900
Torsdag 126000  87600 109000  120000 131000  98600  80600


# differens från föregående dags sökning
> diff(days2) 
        Mandag Tisdag Onsdag Torsdag Fredag Lordag Sondag
Lordag   -4000 -13400  -6000    4000  -2000  -5200  -1300
Sondag    3000    200  -1000    3000  -2000   1800  -5700
Mandag   10000   7100   6000    2000  12000   5000   2900
Tisdag   -7000  -6200  -5000   -7000 -12000  -4300   1800
Onsdag    4000   -800      0   -2000  -1000  -1500  -4900
Torsdag  -1000   1400   7000    3000   6000   3400   -300


Dela med 1000, så får vi differenserna likt de som Mats skrev:
> diff(days2)/1000
        Mandag Tisdag Onsdag Torsdag Fredag Lordag Sondag
Lordag      -4  -13.4     -6       4     -2   -5.2   -1.3
Sondag       3    0.2     -1       3     -2    1.8   -5.7
Mandag      10    7.1      6       2     12    5.0    2.9
Tisdag      -7   -6.2     -5      -7    -12   -4.3    1.8
Onsdag       4   -0.8      0      -2     -1   -1.5   -4.9
Torsdag     -1    1.4      7       3      6    3.4   -0.3



Här är två medelvärden
Först medelvärde för dagen man söker.
Det bekräftar Mats kommentar att sökningen i måndags gav flest resultat.
Kan det vara en google-dans-effekt?

apply tar en tabell och anropar en funktion (här mean) för varje rad (1 som
andra parameter) eller kolumn (2).

> apply(days2, 1, mean)
  Fredag   Lordag   Sondag   Mandag   Tisdag   Onsdag  Torsdag 
108971.4 104985.7 104885.7 111314.3 105642.9 104757.1 107542.9 


Sedan: medelvärdet för antalet träffar på veckodagens namn.
Detta bekräftar att måndag, torsdag och fredag är de mest populära dagarna 
i google. Fortfarande vet vi dock inte varför.

> apply(days2,2,mean)
   Mandag    Tisdag    Onsdag   Torsdag    Fredag    Lordag    Sondag 
123428.57  89328.57 104428.57 120571.43 129142.86  97300.00  83900.00 



FÖNSTEREFFEKTEN
---------------
Här studerar vi "fönstereffekten", dvs att sökning på "dagens" namn skulle
vara kopplat till antal träffar. Om diagonaltesen är korrekt, ska värdena i
och kring diagonalen vara större än övriga värden

Först mixtra så att det blir en korrekt tabell (dvs så vi får en diagonal):
> days3<-days2[,c(5:7,1:4)]
> days3 
        Fredag Lordag Sondag Mandag Tisdag Onsdag Torsdag
Fredag  130000  99400  88100 121000  99300 108000  117000
Lordag  128000  94200  86800 117000  85900 102000  121000
Sondag  126000  96000  81100 120000  86100 101000  124000
Mandag  138000 101000  84000 130000  93200 107000  126000
Tisdag  126000  96700  85800 123000  87000 102000  119000
Onsdag  125000  95200  80900 127000  86200 102000  117000
Torsdag 131000  98600  80600 126000  87600 109000  120000


# arbeta med 1000-tal för att lite enklare se.
> days3/1000
        Fredag Lordag Sondag Mandag Tisdag Onsdag Torsdag
Fredag     130   99.4   88.1    121   99.3    108     117
Lordag     128   94.2   86.8    117   85.9    102     121
Sondag     126   96.0   81.1    120   86.1    101     124
Mandag     138  101.0   84.0    130   93.2    107     126
Tisdag     126   96.7   85.8    123   87.0    102     119
Onsdag     125   95.2   80.9    127   86.2    102     117
Torsdag    131   98.6   80.6    126   87.6    109     120


Så använder vi which.max, vilket är funktionen för att returnera _positionen_
för det största värden i en lista (här är listan kolumnvärdet).

Om diagonalhypotesen är korrekt ska det bli ungefär en stigande serie.
Men vi ser att måndagar (4) är det största värdet för 4 kolumner och fredagen 
är max för 2. Verkar alltså inte alls stämma med vår hypotes.

# notera att jag använder days3
> apply(days3,2,which.max)
 Fredag  Lordag  Sondag  Mandag  Tisdag  Onsdag Torsdag 
      4       4       1       4       1       7       4 


Ett möjligt alternativ skulle vara att största värdet skulle komma någon dag
senare eller tidigare. T.ex. att sökning på "fredag" ger flest resultat en 
fredag eller lördag. Men det bör väl även kunna uteslutas av samma skäl: det
verkar inte finnas någon som helst tendens i maxvärdena.