-
Notifications
You must be signed in to change notification settings - Fork 0
/
4_filter_bubble_paper_results_polish.Rmd
187 lines (152 loc) · 10.5 KB
/
4_filter_bubble_paper_results_polish.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
---
title: "filter_bubble_paper_results"
author: "Remigiusz Żulicki"
date: "29 10 2019"
output:
html_document: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
df_md <- read_csv("df_final.csv")
df_long_md <- read_csv("df_long_final.csv")
```
## Rozkład wyników wyszukiwania
Osoby uczestniczące w naszym badaniu zostały poproszone o podanie dokładnego adresu url dla pięciu pierwszych wyników wyszukiwania hasła "Paweł Adamowicz" w wyszukiwarce Google. Zebraliśmy po pięć pierwszych wyników dla trybu normalnego (przy zalogowaniu na konto Google) i prywatnego przeglądarki internetowej. Uzyskaliśmy odpowiedzi od 105 osób, jednak po wyczyszczeniu tekstów, wprowadzonych jako adresy url, pozostawiliśmy odpowiedzi 73 osób [wyjaśnić w przyp. dolnym]. Zatem łącznie przeanalizowaliśmy 730 adresów url - po 10 dla jednego uczestnika. Każdy adres url skróciliśmy do domeny głównej. Każdej domenie przypisaliśmy znak (literę albo cyfrę), na potrzebę obliczenia różnicy między zestawami wyników wyszukiwania. Łącznie w obu trybach wyszukiwania uczestnicy naszego badania uzyskali 28 różnych domen (tabela 1).
```{r domaintbl, echo=FALSE}
knitr::kable(df_long_md %>%
group_by(url_top_domain, letter_top_domain) %>%
count() %>%
arrange(-n) %>%
rename(`Domena główna` = "url_top_domain",
`Znak przypisany` = "letter_top_domain",
`Liczebność [łączna ilość wystąpień domeny, n = 730]` = "n"),
caption = "Źródło: badania własne")
```
Domeny te ułożone były w różnej kolejności, od pierwszej do piątej pozycji na liście wyników wyszukiwania. W podziale na tryb przeglądarki różnice w kolejności były niewielkie dla najczęściej pojawiających się domen (pierwsza pozycja - pl.wikipedia.org; druga - www.facebook.com; trzecia - www.wprost.pl). Niektóre domeny (www.gdansk.pl; trojmiasto.onet.pl; wiadomosci.onet.pl) pojawiły się tylko w trybie normalnym przeglądarki, inne (tysol.pl; www.rp.pl) tylko w trybie prywatnym (wykres 1).
```{r domain_ord_mode_count, echo=FALSE, fig.height=10, fig.width=8}
df_long_md <- df_long_md %>%
mutate(browser_mode = factor(browser_mode)) %>%
mutate(browser_mode = forcats::fct_recode(
.f = browser_mode,
`tryb normalny` = "normal",
`tryb prywatny` = "incognito"))
ggplot(df_long_md, aes(x = fct_rev(fct_infreq(url_top_domain)),
fill = ordered(search_order_short))) +
geom_bar() + facet_grid(rows = vars(browser_mode)) +
coord_flip() +
labs(x = 'Domena główna',
y = 'Liczebność [łączna liczba wystąpień domeny, n = 730]',
title = 'Rozkład domen głównych w podziale na kolejność na liście\nwyników wyszukiwania i tryb przeglądarki',
caption = "Źródło: badania własne") +
scale_fill_ordinal(name = "Kolejność na liście\nwyników wyszukiwania") +
theme(legend.position = "bottom")
```
Jako zestaw wyników wyszukiwania (dalej: ZWW) traktujemy pięć domen, zapisanych w kolejności wyświetlania w wynikach wyszukiwarki Google dla jednego uczestnika badania. Przykładowo najczęściej pojawiający się ZWW (8 na 73 osoby w trybie prywatnym; 5 w trybie normalnym) IVB31 oznacza, że osoba w odpowiedzi na zapytanie "Paweł Adamowicz" w wyszukiwarce Google uzyskała następujące domeny w podanej kolejności (tabela 2):
```{r ivl3o, echo=FALSE}
knitr::kable(
df_long_md %>%
filter(letter_top_domain %in% c("I", "V", "B", "3", "1")) %>%
select(letter_top_domain, url_top_domain) %>%
distinct() %>%
rename(`Domena główna` = "url_top_domain",
`Znak przypisany` = "letter_top_domain"),
caption = "Źródło: badania własne")
```
Łącznie w dwóch trybach przeglądarki dla 73 osób uzyskano 73 różne ZWW. Nie oznacza to, że każdy uczestnik zobaczył inny zestaw, bowiem w trybie normalnym było to 50 ZWW, a w prywatnym 51. Niemniej ZWW powtarzają się rzadko. W trybie normalnym niepowtarzalny ZWW uzyskało 37 z 73 osób. W trybie prywatnym było to 38 osób. **Zatem większość uczestników badania widziało ZWW, którego nie widziała żadna inna osoba. To właśnie określane jest jako bańki informacyjne**. [odnieść się do wyników DDG] Żaden ZWW nie pojawił się więcej, niż osiem razy - wymienione IVB31 w trybie prywatnym. Pojedyncze ZWW występowały tylko w jednym trybie (wykres 2).
```{r countZWW, include=FALSE, echo=FALSE}
table(df_md$normal_count)
table(df_md$incognito_count)
```
```{r search_res_mode_count, echo=FALSE, fig.height=10, fig.width=8}
df_md %>% gather(incognito, normal, key = "browser_mode", value = "search_res") %>%
mutate(browser_mode = factor(browser_mode)) %>%
mutate(browser_mode = forcats::fct_recode(
.f = browser_mode,
`tryb normalny` = "normal",
`tryb prywatny` = "incognito")) %>%
ggplot(aes(x = search_res %>% fct_infreq() %>% fct_rev(), fill = browser_mode)) +
geom_bar(position = "dodge") +
facet_grid(col = vars(browser_mode)) +
coord_flip() +
labs(x = 'Zestaw wyników wyszukiwania (ZWW)',
y = 'Liczebność [liczba uczestników, która uzyskała ZWW, n = 73]',
title = 'Rozkład ZWW w podziale na tryb przeglądarki',
caption = "Źródło: badania własne") +
guides(fill = "none")
```
## Róźnica w zestawach wyników wyszukiwania: tryb normalny vs. tryb prywatny przeglądarki
Różnica wyrażona jest w liczbach całkowitych 0 - 5. Zero oznacza, że wyniki były identyczne. Róźnica > 0 oznacza, że wystąpiły różnice.
Różnicę obliczyliśmy metodą optimal string alignment distance (dalej: OSA) https://journal.r-project.org/archive/2014-1/loo.pdf [mendeley]
Metoda ta daje wyniki identyczne [przyp dolny] z metodą zastosowaną w badaniu DuckDuckGo [mendeley].
Do obliczenia OSA każdy ZWW jest traktowany jako ciąg pięciu znaków (por. tabela 1, wykres 2). Brane są pod uwagę cztery scenariusze różnic między ZWW jako ciągami znaków:
- Substytucja (substitution of a character), np. ‘foo’→‘boo’.
- Usunięcie (deletion of a character), np. ‘foo’→‘oo’.
- Umieszczenie (insertion of a character), np. ‘foo’→‘floo’.
- Transpozycja (transposition of two adjacent characters), as in ‘foo’→‘ofo’.
z których każdy ma wagę 1.
Naszym zdaniem w kontekście wyszukiwania informacji w internecie scenariusz, w którym pomiędzy ZWW występuje tylko transpozycja, różni się jakościowo od pozostałych. Choć kolejność wyników wyszukiwania ma znaczenie dla ich klikalności, to gdy wynik nie pojawi się w ogóle, użytkownik na pewno na niego nie kliknie. Zatem za pomocą przeszukania możliwych permutacji sprawdziliśmy, czy ZWW uzyskany w trybie prywatnym składa się z tych samych znaków (czyli domen), co w trybie normalnym.
**Uczestnicy badania najczęściej (29 z 73) zobaczyli ten sam ZWW (OSA = 0) w obu trybach przeglądarki** (wykres 3). Mediana OSA = 1, Q1 = 0, Q3 = 2, średnia = 1,356. **Jeszcze częściej ZWW w trybie prywatnym był tylko permutacją ZWW w trybie normalnym (36 z 73 osób)**.
```{r osasummary, include=FALSE, echo=FALSE}
summary(df_md$dist_osa)
table(df_md$dist_osa)
table(df_md$is_incognito_permutation_of_normal)
table(df_md$dist_osa, df_md$is_incognito_permutation_of_normal)
```
```{r osadistrib, echo=FALSE, fig.height=8, fig.width=8}
ggplot(df_md) +
geom_bar(aes(x = ordered(dist_osa), fill = is_incognito_permutation_of_normal)) +
labs(x = 'OSA',
y = 'Liczebność [liczba uczestników,\nktóra uzyskała OSA, n = 73]',
title = 'Róźnica w ZWW: tryb normalny vs. tryb prywatny przeglądarki',
subtitle = "obliczono metodą OSA",
caption = "Źródło: badania własne") +
scale_fill_discrete(name = "Czy ZWW w trybie prywatnym jest tylko\npermutacją ZWW w trybie normalnym?",
labels = c("nie", "tak")) +
theme(legend.position = "bottom")
```
## Testowanie hipotez
Na etapie projektowania badania postawiliśmy robocze hipotezy, że wynik OSA mogą różnicować zmienne:
- rok urodzenia osoby uczestniczącej w badaniu
- płeć
- rodzaj studiów
- umiejętność korzystania z trybu prywatnego przeglądarki
- światopogląd w wymiarze liberalizm/konserwatyzm
- nastawienie do kontroli prywatności użytkownika internetu
Z uwagi na specyfikę realizacji badania sprawdziliśmy także, czy wynik OSA różnicował czas odpowiedzi:
- miesiąc i dzień
- miesiąc.
We wszystkich wyżej wymienionych przypadkach różnice były nieistotne statystycznie.
W toku analizy postawiliśmy zatem kolejną hipotezę, że wyniki OSA może róznicować stopień personalizacji ZWW w trybie normalnym.
Jako wskaźnik tego stopnia personalizacji przyjęliśmy ilość wystąpień ZWW (od 0 do 5, por. wykres 2), za punkt odcięcia przyjmując dwa wystąpienia. **Dla mniej spersonalizowanych ZWW (czyli takich, które pojawiły się więcej niż dwojgu respondentów, Mediana OSA = 0), różnica OSA była istotnie niższa, niż dla bardziej spersonalizowanych ZWW (które pojawiły się tylko pojedynczym respondentom lub dwojgu, Mediana OSA = 1)**, *W* = 697,5; *p* < 0,05; *r* = -0,252. Wartość *r* wskazuje na wielkość efektu (*effect size*) między małą a średnią [Field pg. 666].
``` {r dist_osa_by_normal_count_test, include=FALSE, echo=FALSE}
w <- wilcox.test(dist_osa ~ normal_count > 2,
data = df_md, paired=FALSE, exact=FALSE, conf.int=TRUE)
print(w)
# Field, A., Miles, J., & Field, Z. (2012).
# Discovering Statistics Using R. SAGE Publications Ltd. pg. 665
rFromWilcox<-function(wilcoxModel, N){
z<- qnorm(wilcoxModel$p.value/2)
r<- z/ sqrt(N)
cat(wilcoxModel$data.name, 'Effect Size, r = ', r)
}
rFromWilcox(w, dim(df_md)[1])
```
Różnicę tę przedstawiamy na wykresie 4.
```{r dist_osa_by_normal_count_plot, echo=FALSE, fig.width=8}
ggplot(df_md, aes(x = normal_count > 2, y = dist_osa)) +
geom_boxplot() +
geom_dotplot(binaxis = "y", stackdir = "center",
binwidth = 1/5,
alpha = 3/4,
aes(fill = ordered(dist_osa),
colour = ordered(dist_osa))) +
labs(x = "Liczebność ZWW w trybie normalnym > 2",
y = 'OSA',
title = 'Różnica OSA w podziale na stopień personalizacji ZWW w trybie normalnym',
subtitle = "mniej spersonalizowane ZWW oznacza, że liczebność ZWW\nw trybie normalnym była większa niż 2",
caption = "Źródło: badania własne") +
guides(fill = "none", colour = "none") +
scale_x_discrete(labels = c("nie", "tak"))
```
Artykuł zostanie opublikowany w czasopiśmie Zarządzanie Mediami http://www.ejournals.eu/ZM/