Prace dyplomowe · Marketing

Statystyka w pracy z marketingu: postawy wobec marki, NPS, test A/B, intencja zakupu, mediacja i segmentacja

Jak przeanalizować ankietę konsumencką i eksperyment marketingowy: skalę postaw wobec marki, NPS z przedziałem ufności, test A/B ceny, regresję intencji zakupu, mediację i segmentację – wybór testu, wielkość efektu i gotowe zdania APA na danych do pobrania, z kodem R.

Strona główna / Blog / Statystyka w marketingu
W skrócie: W pracy z marketingu najczęściej analizujesz ankietę konsumencką (skale postaw wobec marki, NPS, intencję zakupu) albo eksperyment (test A/B, etykieta, reklama). Skale sprawdź α i ω, grupy porównaj testem t Welcha z g Hedgesa, a intencję zakupu – regresją wieloraką. NPS podawaj zawsze z 95% CI: przy 200 klientach przedział ma ponad 20 punktów szerokości. W teście A/B porównaj odsetki testem dla dwóch proporcji z CI Newcombe’a i nie kończ testu, gdy tylko p spadnie poniżej .05 – w symulacji fałszywe alarmy wzrosły z 5% do 22%.

Sześć typowych projektów w pracy z marketingu

Część empiryczna pracy z marketingu ma zwykle jedną z dwóch postaci. Najczęściej jest to ankieta konsumencka: pytasz o postawy wobec marki, gotowość polecenia, wrażliwość na cenę i zamiar zakupu. Coraz częściej jest to też eksperyment: losowo pokazujesz dwie wersje oferty, opakowania albo strony sklepu i porównujesz reakcje. Te dwie postaci wymagają innych analiz i dają wnioski o innej sile. Ankieta opisuje związki, a dobrze zaprojektowany eksperyment pozwala mówić o wpływie. Tabela porządkuje sześć projektów omówionych w tym poradniku.

Sześć typowych projektów prac z marketingu: pytanie, dane, analiza i wielkość efektu
ProjektTypowe pytanieDaneAnaliza głównaWielkość efektu
1. Skala postaw wobec markiCzy klienci oceniają markę lepiej niż osoby, które jej nie kupują?4 pozycje 1–7, wynik skaliα i ω, jednoczynnikowa CFA, test t Welchag Hedgesa z 95% CI
2. NPSCzy klienci kupujący przez internet chętniej polecają markę?pytanie 0–10NPS z 95% CI, test Manna–Whitneya na pełnej skaliróżnica NPS w punktach, korelacja rangowo-dwuseryjna
3. Test A/B cenyCzy sposób podania rabatu zmienia odsetek zakupów?zakup tak/nie w dwóch wersjach stronytest dla dwóch proporcjiróżnica proporcji z CI Newcombe’a, RR, OR, h Cohena
4. Intencja zakupuCo wiąże się z zamiarem kupienia produktu?wyniki skal 1–7 i zmienne demograficzneregresja wielorakab z 95% CI, β, R²
5. Mediacja w eksperymencieCzy etykieta ekologiczna działa przez zaufanie do produktu?grupa losowa, mediator i wynik 1–7model mediacji z bootstrapemefekt pośredni ab z 95% CI
6. SegmentacjaJakie grupy konsumentów różnią się poszukiwanymi korzyściami?ważność 4 korzyścianaliza skupień k-średnichwskaźnik sylwetki, opis profili

Wszystkie dane w przykładach są symulowane, a „marka A” jest fikcyjna. Możesz je pobrać jako plik XLSX (ankieta, test A/B i eksperyment w osobnych arkuszach) i powtórzyć analizy w swoim programie. Jeśli Twoja praca dotyczy raczej pracowników i organizacji niż konsumentów albo opiera się na danych finansowych firm, zajrzyj do poradnika statystyka w pracy z zarządzania i ekonomii. Ogólny plan części empirycznej, od hipotez po rozdział wyników, znajdziesz w przewodniku statystyka w pracy dyplomowej.

Zanim zaczniesz: próba, pomiar i hipotezy

Najpierw zdecyduj, czy to ankieta, czy eksperyment. W ankiecie nie kontrolujesz, kto jest klientem marki, kto widział reklamę i kto jest wrażliwy na cenę. Wyniki opisujesz więc jako związki: „osoby o lepszej postawie wobec marki deklarowały wyższą intencję zakupu”. W eksperymencie to Ty decydujesz, kto zobaczy którą wersję, i robisz to losowo. Wtedy różnicę między grupami możesz przypisać samej wersji. Wybór schematu, kontrolę manipulacji i pułapki ankiet internetowych opisujemy w przewodniku ankiety i eksperymenty.

Opisz próbę uczciwie. Ankieta udostępniona w mediach społecznościowych albo wśród znajomych to próba dobrana wygodnie. Odpowiadają osoby zainteresowane tematem i podobne do autora, więc odsetki opisują badaną grupę, a nie „polskich konsumentów” (zob. reprezentatywność próby). Przy takiej próbie bezpieczniej jest wnioskować o związkach między zmiennymi niż o poziomie zjawiska w populacji. Jak przygotować pytania, opisujemy w poradniku jak zrobić ankietę do pracy dyplomowej, a jak wychwycić osoby klikające bez czytania – w poradniku o nieuważnych odpowiedziach w ankietach online.

Mierz konstrukty kilkoma pozycjami. Postawa wobec marki, postrzegana wartość czy intencja zakupu to konstrukty, których nie da się dobrze zmierzyć jednym pytaniem. Churchill (1979) uznał budowę lepszych miar zmiennych marketingowych za warunek rozwoju wiedzy i praktyki marketingu i zaproponował procedurę ich tworzenia. W pracy dyplomowej najprościej sięgnąć po skalę już opublikowaną i opisać jej źródło. Jeśli budujesz własną, potraktuj ją jak narzędzie, które musi przejść sprawdzenie rzetelności i struktury.

Uważaj na style odpowiadania i wspólną metodę. Baumgartner i Steenkamp (2001) zbadali konsumentów z 11 krajów Unii Europejskiej i wykazali, że style odpowiadania, takie jak tendencja do zgadzania się czy wybieranie odpowiedzi skrajnych, systematycznie zniekształcają wyniki skal i mogą zawyżać albo zaniżać korelacje między nimi. Gdy wszystkie skale pochodzą z jednej ankiety wypełnionej przez te same osoby, część korelacji może wynikać z samego sposobu pomiaru. Podsakoff i in. (2003) opisują źródła tego zjawiska oraz proceduralne i statystyczne sposoby jego kontroli (zob. wspólna wariancja metody). W praktyce zapewnij anonimowość, oddziel skale predyktorów od skali wyniku i opisz to ograniczenie w dyskusji.

Dobierz test do pytania, zanim zbierzesz dane. Hipotezy i analizy zapisz w planie pracy. Jeśli nie wiesz, który test pasuje do Twoich zmiennych, skorzystaj z kreatora doboru testu statystycznego. Liczebność próby dla porównania grup, tabeli 2 × 2 albo regresji policzysz w kalkulatorze mocy i liczebności.

Projekt 1. Skala postaw wobec marki

Przykład: 360 konsumentów kategorii produktu oceniło markę A na czterech skalach od 1 do 7 (np. „zła – dobra”, „nieatrakcyjna – atrakcyjna”). 200 osób kupuje markę A (klienci), a 160 jej nie kupuje. Pytanie brzmi: czy klienci oceniają markę lepiej i jak duża jest ta różnica?

Rzetelność i struktura skali

Zanim policzysz wynik skali jako średnią z pozycji, pokaż, że pozycje mierzą jedno. Współczynnik alfa Cronbacha wyniósł α = .84, a średnia korelacja między pozycjami .57. Jednoczynnikowa konfirmacyjna analiza czynnikowa dała ładunki standaryzowane od .68 do .83 i omegę McDonalda ω = .84. Model z czterema pozycjami ma tylko dwa stopnie swobody, więc niemal idealne dopasowanie (CFI = 1.000, SRMR = .009) niewiele tu dowodzi. Ważniejsze są wysokie i zbliżone ładunki. Gdy skala ma więcej pozycji albo kilka wymiarów, pełną procedurę znajdziesz w poradniku analiza czynnikowa EFA i CFA.

Porównanie klientów i nieklientów

Klienci oceniali markę wyżej (M = 4.53, SD = 1.00) niż osoby, które jej nie kupują (M = 3.93, SD = 0.97). Grupy mają różną liczebność, więc bezpieczniejszy jest test t Welcha, który nie zakłada równych wariancji. Różnica wyniosła 0.60 punktu, 95% CI [0.40, 0.81], t(345.97) = 5.80, p < .001. Wielkość efektu podaj jako g Hedgesa: g = 0.61, 95% CI [0.40, 0.82]. Wynik skali to średnia z czterech pozycji, więc ma wiele możliwych wartości i można go analizować testem parametrycznym. Pojedynczą pozycję lepiej opisywać rozkładem odpowiedzi (zob. czy skala Likerta jest ilościowa).

Pamiętaj, że to porównanie nie mówi, co jest przyczyną, a co skutkiem. Lepsza postawa mogła skłonić do zakupu, ale zakup i doświadczenie z produktem mogły też poprawić postawę. W pracy napisz więc, że klienci oceniali markę wyżej, a nie że kupowanie marki poprawia jej ocenę.

Skala postawy wobec marki (4 pozycje, 1–7) miała dobrą rzetelność, α = .84, ω = .84; ładunki w jednoczynnikowej CFA wynosiły od .68 do .83. Klienci marki (n = 200) oceniali ją wyżej (M = 4.53, SD = 1.00) niż osoby, które jej nie kupują (n = 160; M = 3.93, SD = 0.97), różnica 0.60, 95% CI [0.40, 0.81], t(345.97) = 5.80, p < .001, g Hedgesa = 0.61, 95% CI [0.40, 0.82].

Projekt 2. NPS – gotowość polecenia marki

Net Promoter Score wymaga jednego pytania: „Jak bardzo prawdopodobne jest, że polecisz markę znajomemu?” w skali od 0 do 10. Osoby z odpowiedziami 9–10 to promotorzy, 7–8 to pasywni, a 0–6 to krytycy. NPS to odsetek promotorów minus odsetek krytyków, więc przyjmuje wartości od −100 do 100. Wskaźnik jest popularny w firmach, dlatego studenci chętnie go używają. W pracy dyplomowej trzeba jednak pokazać jego niepewność i ograniczenia.

Przykład: 200 klientów marki A odpowiedziało na pytanie o polecenie i podało, gdzie zwykle kupuje markę (98 osób przez internet, 102 w sklepie stacjonarnym). W całej grupie promotorzy stanowili 41.5%, pasywni 33.5%, a krytycy 25.0%, więc NPS = 16.5.

Rozkład odpowiedzi 0–10 na pytanie o polecenie marki A w dwóch kanałach zakupu, z podziałem na krytyków 0–6, pasywnych 7–8 i promotorów 9–10. Internet, n = 98: 51.0% promotorów, 22.4% krytyków, NPS = 28.6, 95% CI [12.6, 44.6]. Sklep stacjonarny, n = 102: 32.4% promotorów, 27.5% krytyków, NPS = 4.9, 95% CI [−10.1, 19.9]
Rysunek 1. Rozkład odpowiedzi na pytanie o polecenie marki według kanału zakupu i NPS z 95% CI. Obliczenia: R (dane symulowane).

Przedział ufności dla NPS

NPS jest różnicą dwóch odsetków z tej samej próby, więc jego błąd standardowy liczy się ze wzoru SE = 100 × √[(pP + pK − (pP − pK)²) / n], gdzie pP i pK to odsetki promotorów i krytyków zapisane jako ułamki. Dla całej grupy 95% CI wynosi [5.4, 27.6]. Przy 200 osobach przedział ma więc szerokość ponad 20 punktów. W kanale internetowym NPS = 28.6, 95% CI [12.6, 44.6], a w sklepie stacjonarnym NPS = 4.9, 95% CI [−10.1, 19.9]. Różnica wyniosła 23.7 punktu, 95% CI [1.8, 45.6], z = 2.12, p = .034. Dolna granica jest bliska zeru, więc dane są zgodne zarówno z bardzo małą, jak i z bardzo dużą przewagą internetu.

Analizuj też pełną skalę 0–10

NPS zamienia jedenaście możliwych odpowiedzi na trzy kategorie, a potem odrzuca pasywnych. Odpowiedź 6 liczy się tak samo jak 0, a 7 tak samo jak 8. Dlatego obok NPS opisz rozkład odpowiedzi i porównaj grupy na pełnej skali. Klienci internetowi wybierali wyższe wartości (M = 8.02, SD = 1.89, Me = 9) niż klienci sklepów stacjonarnych (M = 7.31, SD = 2.16, Me = 8). Odpowiedzi są skośne i porządkowe, więc użyj testu Manna–Whitneya: W = 6038.5, p = .010, korelacja rangowo-dwuseryjna r = .21, 95% CI [.05, .36]. Gotowość polecenia wiązała się też z postawą wobec marki, ρ Spearmana = .48, p < .001.

W dyskusji nie przedstawiaj NPS jako miary, która przewiduje wzrost firmy. Keiningham i in. (2007) na danych podłużnych z 21 firm nie potwierdzili, że ten wskaźnik jest wyraźnie lepszy od innych miar, np. satysfakcji. Dawes (2024) na danych z trzech branż nie znalazł potwierdzenia, że NPS wskazuje przyszły wzrost przychodów. W pracy dyplomowej NPS jest po prostu opisem gotowości polecenia w Twojej próbie. Wzór, kategorie i ograniczenia wskaźnika omawiamy w haśle Net Promoter Score (NPS).

Wśród 200 klientów marki A 41.5% stanowili promotorzy (9–10), 33.5% pasywni (7–8), a 25.0% krytycy (0–6), NPS = 16.5, 95% CI [5.4, 27.6]. NPS był wyższy wśród klientów kupujących przez internet (n = 98; NPS = 28.6, 95% CI [12.6, 44.6]) niż w sklepach stacjonarnych (n = 102; NPS = 4.9, 95% CI [−10.1, 19.9]), różnica 23.7 punktu, 95% CI [1.8, 45.6], z = 2.12, p = .034. Na pełnej skali 0–10 klienci internetowi również wybierali wyższe odpowiedzi (Me = 9 wobec 8), test Manna–Whitneya: W = 6038.5, p = .010, r = .21, 95% CI [.05, .36].

Projekt 3. Eksperyment cenowy, czyli test A/B

Test A/B to eksperyment, w którym odwiedzający stronę losowo widzą jedną z dwóch wersji. Kohavi i in. (2009) nazywają takie kontrolowane eksperymenty najlepszym schematem do ustalania związków przyczynowych między zmianą na stronie a zachowaniem użytkowników. Zwracają też uwagę na moc statystyczną, liczebność próby i poprawność losowania. Jeśli nie masz dostępu do sklepu, ten sam schemat możesz zrealizować w ankiecie: losowo pokazujesz jedną z dwóch ofert i pytasz, czy respondent by ją kupił.

Przykład: sklep internetowy przez dwa tygodnie pokazywał tę samą cenę końcową na dwa sposoby. Wersja A podawała rabat jako „−20%”, a wersja B jako „taniej o 10 zł”. Każdą wersję zobaczyło 1500 losowo przydzielonych osób. Wynikiem był zakup w tej samej sesji.

Panel A: odsetek zakupów z 95% CI Wilsona w teście A/B po 1500 osób na wersję: wersja A z rabatem −20% 7.13% [5.94, 8.55], wersja B taniej o 10 zł 8.93% [7.59, 10.48]. Panel B: odsetek fałszywych alarmów w 2000 symulowanych testach A/A przy sprawdzaniu wyniku co 100 osób na wersję: 5.1% przy jednym podglądzie, 14.1% przy pięciu, 22.2% przy piętnastu, wobec nominalnych 5%
Rysunek 2. Test A/B sposobu podania rabatu: odsetek zakupów z 95% CI (A) i odsetek fałszywych alarmów, gdy wynik testu A/A sprawdza się wielokrotnie i zatrzymuje przy pierwszym p < .05 (B). Obliczenia: R (dane symulowane).

Test dla dwóch proporcji i wielkość efektu

Wynik jest dwuwartościowy, a grupy są niezależne, więc właściwy jest test dla dwóch proporcji (bez poprawki na ciągłość daje ten sam wynik co test chi-kwadrat dla tabeli 2 × 2). Zakup wybrało 107 z 1500 osób w wersji A (7.13%) i 134 z 1500 w wersji B (8.93%). Różnica wyniosła 1.80 punktu procentowego, χ²(1) = 3.29, p = .070. Do różnicy proporcji podaj przedział ufności Newcombe’a, oparty na przedziałach Wilsona dla obu grup. Newcombe (1998) pokazał, że proste metody mają słabe pokrycie, a ta działa dobrze niezależnie od liczebności. Tutaj 95% CI wynosi [−0.15, 3.76] punktu procentowego. Ryzyko względne RR = 1.25, iloraz szans OR = 1.28, a h Cohena = 0.07. Te same liczby, razem z testem Fishera, policzysz w kalkulatorze tabeli 2 × 2, a szerzej o porównaniu odsetków piszemy w poradniku jak porównać odsetki w dwóch grupach.

Wynik nieistotny to nie dowód braku efektu

Dane są symulowane, więc znamy prawdę: w populacji wersja B daje 8% zakupów, a wersja A 6%. Efekt istnieje, a test go nie wykrył. Przy takich odsetkach do wykrycia różnicy z mocą 80% potrzeba około 2554 osób na wersję, a nie 1500. Przedział ufności dobrze to pokazuje. Obejmuje zero, ale także wzrost o prawie 4 punkty procentowe, który dla sklepu byłby bardzo ważny. Napisz więc, że badanie nie pozwala rozstrzygnąć, która wersja jest lepsza, a nie że „sposób podania rabatu nie ma znaczenia”. Liczebność zaplanuj przed startem testu (zob. moc testu).

Nie zaglądaj do wyników co kilka dni

W testach A/B kusi, by sprawdzać wynik na bieżąco i zakończyć test, gdy tylko p spadnie poniżej .05. Rysunek 2B pokazuje, czym to grozi. W 2000 symulowanych testach A/A obie wersje były identyczne. Jeden test na końcu dał wynik istotny w 5.2% przypadków, czyli zgodnie z poziomem α. Przy sprawdzaniu wyniku co 100 osób na wersję i zatrzymaniu przy pierwszym p < .05 fałszywy alarm pojawił się w 14.1% testów po pięciu podglądach i w 22.2% po piętnastu. Ustal więc z góry liczebność albo czas trwania testu i przeprowadź jeden test na końcu. Jeśli chcesz analizować wyniki po drodze, potrzebujesz planu analiz sekwencyjnych z odpowiednio skorygowanym progiem.

W teście A/B (po 1500 losowo przydzielonych odwiedzających na wersję) zakup wybrało 7.13% osób widzących rabat „−20%” i 8.93% osób widzących rabat „taniej o 10 zł”. Różnica 1.80 punktu procentowego, 95% CI [−0.15, 3.76] (metoda Newcombe’a), nie była istotna statystycznie, χ²(1) = 3.29, p = .070, RR = 1.25, OR = 1.28, h Cohena = 0.07. Przy założonej różnicy 6% wobec 8% badanie wymagało około 2554 osób na wersję dla mocy 80%, dlatego wyniku nie należy traktować jako dowodu braku różnicy.

Projekt 4. Regresja intencji zakupu

Najczęstszy model w pracach z marketingu wyjaśnia intencję zakupu (średnia trzech pozycji 1–7) postawą wobec marki, postrzeganą wartością produktu i wrażliwością cenową, przy kontroli wieku i płci. W całej próbie 360 osób średnia intencja wyniosła 4.26 (SD = 1.10). Pełną procedurę, z diagnostyką reszt i interpretacją współczynników, opisujemy w poradniku regresja wieloraka krok po kroku. Tu skupiamy się na tym, co zwykle trzeba pokazać w pracy z marketingu.

Regresja wieloraka intencji zakupu: współczynniki b z 95% CI, β, t i p (N = 360)
Predyktorb95% CIβt(354)p
Stała1.97[1.33, 2.60]—6.08< .001
Postawa wobec marki0.53[0.44, 0.63]0.5011.15< .001
Postrzegana wartość0.20[0.11, 0.29]0.204.33< .001
Wrażliwość cenowa−0.21[−0.29, −0.12]−0.20−4.98< .001
Wiek (lata)−0.001[−0.009, 0.008]−0.01−0.13.899
Mężczyzna (vs kobieta)0.12[−0.06, 0.29]0.111.29.197

Model wyjaśniał 43% wariancji intencji zakupu, R² = .43, skorygowane R² = .42, F(5, 354) = 53.32, p < .001. Jak czytać te liczby w języku marketingu:

  • Postawa, b = 0.53. Dwie osoby w tym samym wieku, tej samej płci, o tej samej ocenie wartości i wrażliwości cenowej, różniące się o 1 punkt postawy wobec marki, różnią się przeciętnie o 0.53 punktu intencji zakupu. To najsilniejszy predyktor (β = 0.50).
  • Wrażliwość cenowa, b = −0.21. Osoby bardziej zwracające uwagę na cenę deklarowały niższą intencję zakupu marki A przy tej samej postawie i ocenie wartości.
  • Wiek i płeć nie wiązały się istotnie z intencją, gdy uwzględniono postawy. Nie pisz jednak, że „wiek nie ma wpływu na zakupy”. Model opisuje tę próbę i ten zestaw zmiennych.

Największy współczynnik VIF wyniósł 1.27, więc współliniowość nie stanowiła problemu, choć postawa i wartość były ze sobą skorelowane. Jeśli wynik jest dwuwartościowy (np. „czy kupisz produkt w ciągu miesiąca: tak/nie”), zamiast regresji liniowej użyj regresji logistycznej (zob. regresja logistyczna krok po kroku). Tabelę wyników przygotuj w stylu APA, a zdania do rozdziału wyników możesz sprawdzić w generatorze opisu wyników APA.

Intencja zakupu to deklaracja, a nie zakup. W ankiecie zmierzysz zamiar, a o tym, czy przełoży się on na zachowanie, ankieta nie rozstrzyga. Pisz więc o „deklarowanej intencji zakupu”. Jeśli możesz, uzupełnij badanie o zachowanie mierzone obiektywnie, np. wybór w eksperymencie albo kliknięcie w ofertę.

Regresja wieloraka wyjaśniała 43% wariancji intencji zakupu, R² = .43, skorygowane R² = .42, F(5, 354) = 53.32, p < .001. Wyższą intencję zakupu przewidywały lepsza postawa wobec marki, b = 0.53, 95% CI [0.44, 0.63], β = 0.50, p < .001, i wyższa postrzegana wartość, b = 0.20, 95% CI [0.11, 0.29], β = 0.20, p < .001, a niższą – wyższa wrażliwość cenowa, b = −0.21, 95% CI [−0.29, −0.12], β = −0.20, p < .001. Wiek (p = .899) i płeć (p = .197) nie wiązały się istotnie z intencją zakupu. Największy VIF wynosił 1.27.

Projekt 5. Mediacja w eksperymencie z etykietą ekologiczną

Hipotezy mediacyjne są w marketingu bardzo częste: reklama zmienia postawę, a postawa intencję zakupu; etykieta zwiększa zaufanie, a zaufanie skłonność do zakupu. Najmocniejszy schemat do ich testowania to eksperyment, w którym zmienną X jest losowo przydzielony warunek. Wtedy przynajmniej ścieżka od X do mediatora ma interpretację przyczynową. Związek mediatora z wynikiem pozostaje jednak korelacyjny, bo mediatora nie losowałeś.

Przykład: 240 osób losowo zobaczyło zdjęcie opakowania z etykietą ekologiczną albo bez niej (po 120 osób). Następnie oceniły zaufanie do produktu i intencję zakupu (po trzy pozycje 1–7). Kontrola manipulacji wypadła dobrze: etykietę zauważyło 92.5% osób, które ją widziały, i 5.8% osób z grupy bez etykiety.

Osoby, które widziały etykietę, deklarowały wyższą intencję zakupu (M = 4.17, SD = 1.17) niż grupa bez etykiety (M = 3.79, SD = 1.15). Efekt całkowity wyniósł c = 0.38, 95% CI [0.08, 0.67], t(237.93) = 2.53, p = .012, g = 0.33, 95% CI [0.07, 0.58]. Etykieta zwiększała zaufanie do produktu, a = 0.77, 95% CI [0.50, 1.03], p < .001. Zaufanie wiązało się z intencją przy kontroli warunku, b = 0.58, 95% CI [0.46, 0.70], p < .001. Efekt bezpośredni był bliski zeru, c′ = −0.07, 95% CI [−0.34, 0.20], p = .619.

Kluczową liczbą jest efekt pośredni ab = 0.45 z percentylowym przedziałem bootstrap z 5000 prób, 95% CI [0.27, 0.65]. Przedział nie obejmuje zera, więc dane są zgodne z hipotezą, że etykieta działa przez zaufanie. Zhao i in. (2010) opisują słabości logiki kroków Barona i Kenny’ego, wciąż wymaganych przez wielu recenzentów, i proponują procedurę testowania mediacji oraz klasyfikowania jej typu. W praktyce opieraj wniosek na teście efektu pośredniego, a nie na liczeniu, które kroki „przeszły”. Nie pisz też o „pełnej mediacji” tylko dlatego, że c′ jest nieistotne. Przy 240 osobach mały efekt bezpośredni łatwo przeoczyć, a brak istotności nie dowodzi, że go nie ma.

Krok po kroku, z wykresem ścieżek i wielkościami efektu, przechodzimy przez mediację w poradniku analiza mediacji krok po kroku.

Uczestnicy, którzy losowo zobaczyli opakowanie z etykietą ekologiczną (n = 120), deklarowali wyższą intencję zakupu (M = 4.17, SD = 1.17) niż grupa bez etykiety (n = 120; M = 3.79, SD = 1.15), c = 0.38, 95% CI [0.08, 0.67], p = .012, g = 0.33. Etykieta zwiększała zaufanie do produktu, a = 0.77, 95% CI [0.50, 1.03], p < .001, a zaufanie wiązało się z intencją zakupu przy kontroli warunku, b = 0.58, 95% CI [0.46, 0.70], p < .001. Efekt pośredni przez zaufanie wyniósł ab = 0.45, 95% CI [0.27, 0.65] (percentylowy bootstrap, 5000 prób), a efekt bezpośredni był nieistotny, c′ = −0.07, 95% CI [−0.34, 0.20], p = .619.

Projekt 6. Segmentacja konsumentów według poszukiwanych korzyści

Segmentacja dzieli konsumentów na grupy o podobnym profilu odpowiedzi, np. według tego, jak ważne są dla nich cena, jakość, ekologia i wygoda zakupu. Punj i Stewart (1983) w przeglądzie zastosowań analizy skupień w badaniach marketingowych polecają podejście dwuetapowe: wstępne skupienia metodą hierarchiczną, a potem ich dopracowanie metodą iteracyjną, taką jak k-średnich. Zwracają też uwagę na walidację wyników.

W przykładzie te same 360 osoby oceniły ważność czterech korzyści (1–7). Zmienne zestandaryzowano, a analizę k-średnich uruchomiono z 50 startami dla od 2 do 6 skupień. Suma kwadratów wewnątrz skupień spadała wyraźnie do trzech skupień (z 658.1 przy dwóch do 495.1), a dalej już słabo (452.6 przy czterech). Wskaźnik sylwetki był najwyższy przy dwóch skupieniach (.456), a drugi przy trzech (.378). Rozwiązanie z dwoma skupieniami łączyło jednak osoby nastawione na jakość z osobami nastawionymi na ekologię, dlatego wybrano trzy segmenty. Taka sytuacja jest typowa: kryteria nie muszą się zgadzać, a ostateczna decyzja wymaga uzasadnienia merytorycznego.

Profile trzech segmentów konsumentów: średnia ważność czterech korzyści (1–7) i średnia intencja zakupu
SegmentnCenaJakośćEkologiaWygodaIntencja zakupu
Cenowi1515.964.563.245.454.15
Jakościowi1164.306.034.074.404.28
Ekologiczni933.675.666.023.764.42

Nazwy segmentów to Twoja interpretacja profili, a nie wynik algorytmu. Opisz je ostrożnie i podaj liczebności. Dane są symulowane, więc mogliśmy sprawdzić, że k-średnich przypisało 96.4% osób do skupienia odpowiadającego ich prawdziwemu segmentowi. W prawdziwych danych takiej kontroli nie masz, dlatego zbadaj stabilność podziału, np. bootstrapem. Pamiętaj też, że analiza skupień zawsze coś znajdzie, także w danych bez żadnych grup. Pełną procedurę – wybór zmiennych, liczby skupień, stabilność i porównanie z analizą profili latentnych – opisujemy w poradniku segmentacja respondentów: k-średnich i LPA.

Jak opisać analizę statystyczną w pracy

Akapit o analizie statystycznej powinien pozwolić innej osobie powtórzyć obliczenia. W pracy z marketingu opisz dobór próby i sposób rekrutacji, źródło skal, losowanie w eksperymencie, kontrolę manipulacji i liczbę osób wykluczonych z analizy. Poniżej wzór dla ankiety i eksperymentu.

Analizy wykonano w programie R. Rzetelność skal oceniono współczynnikami α Cronbacha i ω McDonalda, a jednowymiarowość skali postawy wobec marki – jednoczynnikową konfirmacyjną analizą czynnikową. Grupy porównano testem t Welcha z g Hedgesa jako wielkością efektu. NPS obliczono jako różnicę odsetków promotorów (9–10) i krytyków (0–6) z 95% przedziałem ufności, a odpowiedzi na pełnej skali 0–10 porównano testem Manna–Whitneya. W teście A/B odsetki zakupów porównano testem dla dwóch proporcji, podając różnicę z 95% przedziałem ufności Newcombe’a. Intencję zakupu analizowano regresją wieloraką. Efekt pośredni w eksperymencie oszacowano jako iloczyn ścieżek a i b z percentylowym przedziałem bootstrap (5000 prób). Przyjęto poziom istotności α = .05.

Jeśli potrzebujesz pomocy w doborze analiz do swojego projektu albo w odpowiedzi na uwagi promotora, możesz skonsultować je ze statystykiem w ramach oferty analizy statystyczne dla studentów. Wyniki musisz jednak rozumieć i umieć obronić samodzielnie.

Przykład reprodukowalny

Analizy z sześciu projektów w R

Kod odtwarza wszystkie liczby z tego wpisu, a ostatni przepis – rysunki i plik XLSX do pobrania. Każdy z pierwszych trzech przepisów tworzy własne dane symulowane, więc możesz go uruchomić osobno. Najważniejszy jest przepis 1 z pełną analizą ankiety konsumenckiej. Wielkości efektu liczy pakiet effectsize, przedział Newcombe’a – pakiet DescTools, a CFA – pakiet lavaan.

1. Projekty 1, 2, 4 i 6: ankieta konsumencka – skala postaw, NPS, regresja intencji zakupu i segmentacja

Dane wejściowe: 360 konsumentów (200 klientów marki A), skale 1–7, pytanie o polecenie 0–10 i ważność czterech korzyści (dane symulowane, set.seed(22701)); pakiety effectsize, psych, lavaan, car i cluster.

Co odczytać: α i ω skali postawy z ładunkami CFA, test t Welcha z g Hedgesa, tabelę NPS z 95% CI w całej grupie i w kanałach, różnicę NPS z testem z, test Manna–Whitneya z korelacją rangowo-dwuseryjną, współczynniki regresji z 95% CI, β, R² i VIF, a na końcu sumę kwadratów i wskaźnik sylwetki dla 2–6 skupień oraz profile trzech segmentów.

R
# Projekty 1, 2, 4 i 6: ankieta konsumencka o marce A (dane symulowane).
# 360 konsumentów kategorii produktu; 200 kupuje markę A (klienci), 160 nie.
# Skale 1–7: postawa wobec marki (4 pozycje), postrzegana wartość (3), wrażliwość cenowa (3),
# intencja zakupu (3), ważność czterech korzyści (cena, jakość, ekologia, wygoda);
# klienci odpowiadają też na pytanie o polecenie marki (0–10) i podają kanał zakupu.
suppressPackageStartupMessages({ library(effectsize); library(psych); library(lavaan); library(car); library(cluster) })
set.seed(22701)
n <- 360
klient <- factor(sample(rep(c("klient", "nieklient"), c(200, 160))), levels = c("klient", "nieklient"))
plec <- factor(sample(c("kobieta", "mężczyzna"), n, TRUE, prob = c(.58, .42)))
wiek <- round(pmin(70, pmax(18, rnorm(n, 34, 11))))
segment_prawdziwy <- sample(1:3, n, TRUE, prob = c(.40, .35, .25))   # znany tylko w symulacji
postawa_lat <- 0.75 * (klient == "klient") + rnorm(n)
wartosc_lat <- 0.5 * postawa_lat + rnorm(n, 0, 0.9)
cena_lat <- c(0.8, -0.3, -0.6)[segment_prawdziwy] + rnorm(n, 0, 0.8)
pozycja <- function(lat, lad, prog = c(-2.2, -1.4, -0.6, 0.2, 1.0, 1.8)) {
  as.integer(cut(lad * scale(lat)[, 1] + rnorm(length(lat), 0, sqrt(1 - lad^2)), c(-Inf, prog, Inf)))
}
d <- data.frame(id = 1:n, klient, plec, wiek,
  post1 = pozycja(postawa_lat, .85), post2 = pozycja(postawa_lat, .80), post3 = pozycja(postawa_lat, .78), post4 = pozycja(postawa_lat, .70),
  wart1 = pozycja(wartosc_lat, .80), wart2 = pozycja(wartosc_lat, .78), wart3 = pozycja(wartosc_lat, .72),
  cen1 = pozycja(cena_lat, .80), cen2 = pozycja(cena_lat, .75), cen3 = pozycja(cena_lat, .70))
d$postawa <- rowMeans(d[, paste0("post", 1:4)])
d$wartosc <- rowMeans(d[, paste0("wart", 1:3)])
d$wrazliwosc_cenowa <- rowMeans(d[, paste0("cen", 1:3)])
int_lat <- 0.45 * scale(d$postawa)[, 1] + 0.25 * scale(d$wartosc)[, 1] - 0.20 * scale(d$wrazliwosc_cenowa)[, 1] + rnorm(n, 0, 0.75)
d$intencja <- rowMeans(sapply(c(.85, .80, .75), function(l) pozycja(int_lat, l)))
# ważność korzyści (średnie z dwóch pozycji 1–7) – profile trzech segmentów
prof <- rbind(c(cena = 6.0, jakosc = 4.6, ekologia = 3.2, wygoda = 5.4),
              c(cena = 4.2, jakosc = 6.0, ekologia = 4.2, wygoda = 4.4),
              c(cena = 3.6, jakosc = 5.6, ekologia = 6.1, wygoda = 3.8))
kor <- sapply(1:4, function(j) pmin(7, pmax(1, round(2 * (prof[segment_prawdziwy, j] + rnorm(n, 0, 0.6))) / 2)))
colnames(kor) <- paste0("wazn_", colnames(prof)); d <- cbind(d, kor)
# polecenie marki 0–10 (tylko klienci) i kanał zakupu
kl <- d$klient == "klient"
d$kanal <- factor(ifelse(kl, ifelse(runif(n) < .5, "internet", "sklep stacjonarny"), NA), levels = c("internet", "sklep stacjonarny"))
pol_lat <- 0.55 * scale(d$postawa)[, 1] + 0.20 * (d$kanal == "internet") + rnorm(n, 0, 0.8)
d$polecenie <- ifelse(kl, as.integer(as.character(cut(pol_lat, c(-Inf, -2.3, -1.9, -1.6, -1.3, -1.0, -0.7, -0.35, -0.05, 0.4, 1.0, Inf), labels = 0:10))), NA)

# --- Projekt 1: skala postawy wobec marki – rzetelność i porównanie klientów z nieklientami
pozp <- d[, paste0("post", 1:4)]
round(psych::alpha(pozp, warnings = FALSE)$total[c("raw_alpha", "average_r")], 2)
fit1 <- cfa("P =~ post1 + post2 + post3 + post4", data = d, std.lv = TRUE)
pe <- standardizedSolution(fit1); lam <- pe$est.std[pe$op == "=~"]
round(c(ladunki = lam, omega = sum(lam)^2 / (sum(lam)^2 + sum(1 - lam^2)),
        CFI = unname(fitMeasures(fit1, "cfi")), RMSEA = unname(fitMeasures(fit1, "rmsea")), SRMR = unname(fitMeasures(fit1, "srmr"))), 3)
aggregate(postawa ~ klient, d, function(x) round(c(n = length(x), M = mean(x), SD = sd(x)), 2))
t.test(postawa ~ klient, data = d)
hedges_g(postawa ~ klient, data = d, pooled_sd = FALSE)

# --- Projekt 2: Net Promoter Score wśród klientów
k <- d[kl, ]
k$kategoria <- cut(k$polecenie, c(-1, 6, 8, 10), labels = c("krytycy (0–6)", "pasywni (7–8)", "promotorzy (9–10)"))
nps <- function(x) { n <- length(x); pP <- mean(x >= 9); pD <- mean(x <= 6)
  c(n = n, promotorzy = 100 * pP, pasywni = 100 * (1 - pP - pD), krytycy = 100 * pD, NPS = 100 * (pP - pD),
    SE = 100 * sqrt((pP + pD - (pP - pD)^2) / n)) }
wyn_nps <- rbind(ogolem = nps(k$polecenie), internet = nps(k$polecenie[k$kanal == "internet"]),
                 stacjonarny = nps(k$polecenie[k$kanal == "sklep stacjonarny"]))
wyn_nps <- cbind(wyn_nps, CI_d = wyn_nps[, "NPS"] - 1.96 * wyn_nps[, "SE"], CI_g = wyn_nps[, "NPS"] + 1.96 * wyn_nps[, "SE"]); round(wyn_nps, 1)
# różnica NPS (internet − sklep) z 95% CI i test z
roz <- wyn_nps["internet", "NPS"] - wyn_nps["stacjonarny", "NPS"]
se_roz <- sqrt(wyn_nps["internet", "SE"]^2 + wyn_nps["stacjonarny", "SE"]^2)
round(c(roznica = roz, CI_d = roz - 1.96 * se_roz, CI_g = roz + 1.96 * se_roz, z = roz / se_roz, p = 2 * pnorm(-abs(roz / se_roz))), 3)
# ta sama porównywana różnica na pełnej skali 0–10
aggregate(polecenie ~ kanal, k, function(x) round(c(M = mean(x), SD = sd(x), Me = median(x)), 2))
suppressWarnings(wilcox.test(polecenie ~ kanal, data = k, exact = FALSE))
rank_biserial(polecenie ~ kanal, data = k)
# związek polecenia z postawą wobec marki
cor.test(k$polecenie, k$postawa, method = "spearman", exact = FALSE)

# --- Projekt 4: regresja intencji zakupu (cała próba)
d$plec <- relevel(d$plec, "kobieta")
m4 <- lm(intencja ~ postawa + wartosc + wrazliwosc_cenowa + wiek + plec, data = d)
s4 <- summary(m4); s4
round(cbind(b = coef(m4), confint(m4)), 3)
st <- standardize_parameters(m4); data.frame(parametr = st$Parameter, beta = round(st$Std_Coefficient, 2))
round(c(R2 = s4$r.squared, R2_skor = s4$adj.r.squared), 3)
round(vif(m4), 2)
round(sapply(d[, c("intencja", "postawa", "wartosc", "wrazliwosc_cenowa")], function(x) c(M = mean(x), SD = sd(x))), 2)

# --- Projekt 6: segmentacja konsumentów według ważności korzyści (k-średnich)
Z <- scale(d[, c("wazn_cena", "wazn_jakosc", "wazn_ekologia", "wazn_wygoda")])
odl <- dist(Z)
sylw <- sapply(2:6, function(kk) { set.seed(100 + kk); km <- kmeans(Z, kk, nstart = 50)
  c(k = kk, WSS = km$tot.withinss, sylwetka = mean(silhouette(km$cluster, odl)[, 3])) })
round(t(sylw), 3)
set.seed(103); km3 <- kmeans(Z, 3, nstart = 50)
d$segment <- km3$cluster
profil <- aggregate(cbind(wazn_cena, wazn_jakosc, wazn_ekologia, wazn_wygoda, intencja) ~ segment, d, function(x) round(mean(x), 2))
profil$n <- as.vector(table(d$segment)); profil
table(segment_k_srednich = d$segment, prawdziwy = segment_prawdziwy)
# odsetek osób przypisanych do skupienia odpowiadającego ich prawdziwemu segmentowi
round(100 * sum(apply(table(d$segment, segment_prawdziwy), 1, max)) / n, 1)
Wynik w R
 raw_alpha average_r
      0.84      0.57
ladunki1 ladunki2 ladunki3 ladunki4    omega      CFI    RMSEA     SRMR 
   0.815    0.825    0.699    0.679    0.842    1.000    0.000    0.009 
     klient postawa.n postawa.M postawa.SD
1    klient    200.00      4.53       1.00
2 nieklient    160.00      3.93       0.97

	Welch Two Sample t-test

data:  postawa by klient
t = 5.8021, df = 345.97, p-value = 1.48e-08
alternative hypothesis: true difference in means between group klient and group nieklient is not equal to 0
95 percent confidence interval:
 0.3997051 0.8096699
sample estimates:
   mean in group klient mean in group nieklient 
               4.531250                3.926563 

Hedges' g |       95% CI
------------------------
0.61      | [0.40, 0.82]

- Estimated using un-pooled SD.              n promotorzy pasywni krytycy  NPS  SE  CI_d CI_g
ogolem      200       41.5    33.5    25.0 16.5 5.6   5.4 27.6
internet     98       51.0    26.5    22.4 28.6 8.2  12.6 44.6
stacjonarny 102       32.4    40.2    27.5  4.9 7.6 -10.1 19.9
roznica    CI_d    CI_g       z       p 
 23.669   1.753  45.586   2.117   0.034 
              kanal polecenie.M polecenie.SD polecenie.Me
1          internet        8.02         1.89         9.00
2 sklep stacjonarny        7.31         2.16         8.00

	Wilcoxon rank sum test with continuity correction

data:  polecenie by kanal
W = 6038.5, p-value = 0.009789
alternative hypothesis: true location shift is not equal to 0

r (rank biserial) |       95% CI
--------------------------------
0.21              | [0.05, 0.36]

	Spearman's rank correlation rho

data:  k$polecenie and k$postawa
S = 699082, p-value = 1.094e-12
alternative hypothesis: true rho is not equal to 0
sample estimates:
      rho 
0.4756754 


Call:
lm(formula = intencja ~ postawa + wartosc + wrazliwosc_cenowa + 
    wiek + plec, data = d)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.66410 -0.52884 -0.00738  0.54811  2.02664 

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)        1.9659964  0.3232717   6.082 3.09e-09 ***
postawa            0.5337884  0.0478858  11.147  < 2e-16 ***
wartosc            0.2011301  0.0464599   4.329 1.95e-05 ***
wrazliwosc_cenowa -0.2051033  0.0411669  -4.982 9.85e-07 ***
wiek              -0.0005561  0.0043902  -0.127    0.899    
plecmężczyzna      0.1154515  0.0892787   1.293    0.197    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8339 on 354 degrees of freedom
Multiple R-squared:  0.4296,	Adjusted R-squared:  0.4215 
F-statistic: 53.32 on 5 and 354 DF,  p-value: < 2.2e-16

                       b  2.5 % 97.5 %
(Intercept)        1.966  1.330  2.602
postawa            0.534  0.440  0.628
wartosc            0.201  0.110  0.293
wrazliwosc_cenowa -0.205 -0.286 -0.124
wiek              -0.001 -0.009  0.008
plecmężczyzna      0.115 -0.060  0.291
           parametr  beta
1       (Intercept) -0.05
2           postawa  0.50
3           wartosc  0.20
4 wrazliwosc_cenowa -0.20
5              wiek -0.01
6     plecmężczyzna  0.11
     R2 R2_skor 
  0.430   0.422 
          postawa           wartosc wrazliwosc_cenowa              wiek              plec 
             1.26              1.27              1.01              1.02              1.01 
   intencja postawa wartosc wrazliwosc_cenowa
M      4.26    4.26    4.24              4.21
SD     1.10    1.03    1.07              1.08
     k     WSS sylwetka
[1,] 2 658.083    0.456
[2,] 3 495.110    0.378
[3,] 4 452.592    0.255
[4,] 5 412.798    0.221
[5,] 6 378.967    0.210
  segment wazn_cena wazn_jakosc wazn_ekologia wazn_wygoda intencja   n
1       1      3.67        5.66          6.02        3.76     4.42  93
2       2      5.96        4.56          3.24        5.45     4.15 151
3       3      4.30        6.03          4.07        4.40     4.28 116
                  prawdziwy
segment_k_srednich   1   2   3
                 1   0   6  87
                 2 150   1   0
                 3   5 110   1
[1] 96.4

2. Projekt 3: test A/B – test dla dwóch proporcji, CI Newcombe’a, moc i podglądanie wyników

Dane wejściowe: 3000 odwiedzających losowo przydzielonych do dwóch wersji strony (dane symulowane, set.seed(22702)) i 2000 symulowanych testów A/A (set.seed(22712)); pakiet DescTools.

Co odczytać: tabelę zakupów, odsetki, wynik testu dla dwóch proporcji, różnicę proporcji z 95% CI Newcombe’a (w punktach procentowych), RR, OR i h Cohena, liczebność potrzebną do mocy 80% oraz odsetek fałszywych alarmów przy jednym teście i przy wielokrotnym podglądaniu.

R
# Projekt 3: test A/B sposobu podania ceny w sklepie internetowym (dane symulowane).
# Ta sama cena końcowa; wersja A: „−20%”, wersja B: „taniej o 10 zł”. Odwiedzający przydzielani losowo.
# Wynik: zakup w tej samej sesji (tak/nie).
suppressPackageStartupMessages(library(DescTools))
set.seed(22702)
nA <- 1500; nB <- 1500
wersja <- factor(rep(c("A: −20%", "B: taniej o 10 zł"), c(nA, nB)))
zakup <- rbinom(nA + nB, 1, ifelse(wersja == "A: −20%", .060, .080))
dane_ab <- data.frame(id = 1:(nA + nB), wersja, zakup)
tab <- table(dane_ab$wersja, factor(dane_ab$zakup, 1:0, c("zakup", "brak zakupu"))); tab
round(100 * prop.table(tab, 1), 2)
x <- tab[, "zakup"]; nn <- rowSums(tab)
# test dla dwóch proporcji (bez poprawki na ciągłość = test chi-kwadrat 2 × 2)
prop.test(x[2:1], nn[2:1], correct = FALSE)
# różnica proporcji B − A z 95% CI Newcombe'a (hybrydowy przedział score)
round(100 * BinomDiffCI(x[2], nn[2], x[1], nn[1], method = "score"), 2)
# ryzyko względne, iloraz szans i h Cohena (2·arcsin√p2 − 2·arcsin√p1)
p <- x / nn
round(c(RR = unname(p[2] / p[1]), OR = unname((p[2] / (1 - p[2])) / (p[1] / (1 - p[1])))), 3)
round(c(h_Cohena = unname(2 * asin(sqrt(p[2])) - 2 * asin(sqrt(p[1])))), 3)
# Ilu odwiedzających potrzeba na wersję, aby wykryć wzrost z 6% do 8% z mocą 80%?
power.prop.test(p1 = .06, p2 = .08, power = .80)

# Podglądanie wyników: 2000 testów A/A (obie wersje identyczne, 6%),
# test po każdych 100 odwiedzających na wersję (15 podglądów) i zatrzymanie przy pierwszym p < .05.
set.seed(22712)
kroki <- seq(100, 1500, 100)
pv <- replicate(2000, { a <- rbinom(1500, 1, .06); b <- rbinom(1500, 1, .06)
  sapply(kroki, function(m) { xa <- sum(a[1:m]); xb <- sum(b[1:m])
    if (xa + xb == 0) 1 else suppressWarnings(prop.test(c(xa, xb), c(m, m), correct = FALSE)$p.value) }) })
fpr <- 100 * rowMeans(apply(pv < .05, 2, cummax))     # % testów z p < .05 przy którymkolwiek z pierwszych k podglądów
round(c(jeden_test_na_koncu = 100 * mean(pv[15, ] < .05), po_5_podgladach = fpr[5], po_15_podgladach = fpr[15]), 1)
Wynik w R
                   
                    zakup brak zakupu
  A: −20%             107        1393
  B: taniej o 10 zł   134        1366
                   
                    zakup brak zakupu
  A: −20%            7.13       92.87
  B: taniej o 10 zł  8.93       91.07

	2-sample test for equality of proportions without continuity correction

data:  x[2:1] out of nn[2:1]
X-squared = 3.2891, df = 1, p-value = 0.06974
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.001442064  0.037442064
sample estimates:
    prop 1     prop 2 
0.08933333 0.07133333 

     est.B: taniej o 10 zł lwr.ci upr.ci
[1,]                   1.8  -0.15   3.76
   RR    OR 
1.252 1.277 
h_Cohena 
   0.066 

     Two-sample comparison of proportions power calculation 

              n = 2553.631
             p1 = 0.06
             p2 = 0.08
      sig.level = 0.05
          power = 0.8
    alternative = two.sided

NOTE: n is number in *each* group

jeden_test_na_koncu     po_5_podgladach    po_15_podgladach 
                5.2                14.1                22.2 

3. Projekt 5: eksperyment z etykietą ekologiczną – efekt całkowity i mediacja z bootstrapem

Dane wejściowe: 240 uczestników losowo przydzielonych do opakowania z etykietą i bez niej, kontrola manipulacji, zaufanie i intencja zakupu (dane symulowane, set.seed(22703); bootstrap set.seed(22713)); pakiet effectsize.

Co odczytać: odsetek osób, które zauważyły etykietę, średnie w grupach, test t Welcha z g Hedgesa, ścieżki a, b, c′ i c z 95% CI oraz efekt pośredni ab z percentylowym przedziałem bootstrap.

R
# Projekt 5: eksperyment z etykietą ekologiczną i mediacja przez zaufanie (dane symulowane).
# 240 osób losowo widzi opakowanie z etykietą ekologiczną albo bez niej (po 120).
# Mediator: zaufanie do produktu (średnia 3 pozycji, 1–7); wynik: intencja zakupu (średnia 3 pozycji, 1–7).
suppressPackageStartupMessages(library(effectsize))
set.seed(22703)
n <- 240
etykieta <- sample(rep(0:1, n / 2))                     # 1 = opakowanie z etykietą
zauw <- rbinom(n, 1, ifelse(etykieta == 1, .86, .07))     # kontrola manipulacji: „widziałem/am etykietę”
zaufanie <- pmin(7, pmax(1, round(3 * (4.0 + 0.55 * etykieta + rnorm(n, 0, 1.1))) / 3))
intencja <- pmin(7, pmax(1, round(3 * (1.6 + 0.10 * etykieta + 0.55 * zaufanie + rnorm(n, 0, 1.0))) / 3))
me <- data.frame(id = 1:n, etykieta, zauwazyl_etykiete = zauw, zaufanie, intencja)

# Kontrola manipulacji
round(100 * tapply(me$zauwazyl_etykiete, me$etykieta, mean), 1)
# Opis i efekt całkowity (test t Welcha, g Hedgesa)
aggregate(cbind(zaufanie, intencja) ~ etykieta, me, function(x) round(c(M = mean(x), SD = sd(x)), 2))
t.test(intencja ~ factor(etykieta, 1:0), data = me)
hedges_g(intencja ~ factor(etykieta, 1:0), data = me, pooled_sd = FALSE)
# Ścieżki a, b, c′ i c
ma <- lm(zaufanie ~ etykieta, me); mb <- lm(intencja ~ etykieta + zaufanie, me); mc <- lm(intencja ~ etykieta, me)
sciezki <- rbind(a = summary(ma)$coef["etykieta", ], b = summary(mb)$coef["zaufanie", ],
                 c_prim = summary(mb)$coef["etykieta", ], c = summary(mc)$coef["etykieta", ])
ci <- rbind(confint(ma)["etykieta", ], confint(mb)["zaufanie", ], confint(mb)["etykieta", ], confint(mc)["etykieta", ])
w <- data.frame(round(cbind(sciezki[, 1:3], ci), 3), p = signif(sciezki[, 4], 3), check.names = FALSE); w
# Efekt pośredni ab z percentylowym przedziałem bootstrap (5000 prób)
ab <- coef(ma)["etykieta"] * coef(mb)["zaufanie"]
set.seed(22713)
boot_ab <- replicate(5000, { i <- sample.int(n, n, TRUE); dd <- me[i, ]
  coef(lm(zaufanie ~ etykieta, dd))[2] * coef(lm(intencja ~ etykieta + zaufanie, dd))[3] })
round(c(ab = unname(ab), CI_d = unname(quantile(boot_ab, .025)), CI_g = unname(quantile(boot_ab, .975))), 3)
Wynik w R
   0    1 
 5.8 92.5 
  etykieta zaufanie.M zaufanie.SD intencja.M intencja.SD
1        0       3.89        1.03       3.79        1.15
2        1       4.65        1.03       4.17        1.17

	Welch Two Sample t-test

data:  intencja by factor(etykieta, 1:0)
t = 2.5325, df = 237.93, p-value = 0.01197
alternative hypothesis: true difference in means between group 1 and group 0 is not equal to 0
95 percent confidence interval:
 0.08391112 0.67164444
sample estimates:
mean in group 1 mean in group 0 
       4.166667        3.788889 

Hedges' g |       95% CI
------------------------
0.33      | [0.07, 0.58]

- Estimated using un-pooled SD.       Estimate Std. Error t value  2.5 % 97.5 %        p
a         0.767      0.133   5.772  0.505  1.028 2.44e-08
b         0.581      0.062   9.317  0.458  0.704 8.62e-18
c_prim   -0.068      0.137  -0.498 -0.337  0.201 6.19e-01
c         0.378      0.149   2.532  0.084  0.672 1.20e-02
   ab  CI_d  CI_g 
0.446 0.268 0.648 

4. Rysunki i plik XLSX

Dane wejściowe: wyniki przepisów 1–3 (wczytywane przez source() z folderu z kodem); pakiety ggplot2, svglite, patchwork i openxlsx. Motyw i funkcje pomocnicze rysunków są zdefiniowane na początku przepisu.

Co odczytać: odsetki krytyków, pasywnych i promotorów na rysunku 1, odsetki zakupów z 95% CI Wilsona i odsetki fałszywych alarmów na rysunku 2 oraz liczbę wierszy w arkuszach zapisanego pliku.

R
# Rysunki i plik XLSX do wpisu (uruchom z folderu kod/): LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 Rscript b227-rysunki.R > b227-rysunki-wynik.txt
suppressPackageStartupMessages({ library(ggplot2); library(svglite); library(patchwork); library(openxlsx) })
# Motyw i pomocnicze funkcje rysunków (zdefiniowane lokalnie)
KOLORY <- c(akcent = "#e50101", drugi = "#1f78b4", dane = "grey55", neutralny = "#8C8C8C", granat = "#0f1d3a")
theme_metodolog <- function(base_size = 14) {
  theme_minimal(base_size = base_size) +
    theme(plot.title = element_text(face = "bold", colour = KOLORY[["granat"]], size = rel(1.05), margin = margin(b = 6)),
          plot.subtitle = element_text(colour = "grey30", margin = margin(b = 8)),
          panel.grid.minor = element_blank(), panel.grid.major = element_line(colour = "grey88", linewidth = 0.4),
          axis.title = element_text(colour = "grey20"), axis.text = element_text(colour = "grey25"),
          strip.text = element_text(face = "bold", colour = KOLORY[["granat"]]), legend.position = "bottom",
          plot.background = element_rect(fill = "white", colour = NA), plot.margin = margin(10, 14, 10, 10))
}
zapisz_svg <- function(wykres, plik, szer = 10, wys = 5.6) {
  svglite::svglite(plik, width = szer, height = wys, bg = "white"); print(wykres); invisible(grDevices::dev.off())
  cat(sprintf("Zapisano %s: w HTML width=\"%d\" height=\"%d\" (%d KB)\n", plik, round(szer * 100), round(wys * 100),
              round(file.info(plik)$size / 1024)))
}
apa_p <- function(p) if (p < .001) "p < .001" else paste0("p = ", sub("^0\\.", ".", formatC(p, format = "f", digits = 3)))
minus <- function(x) gsub("-", "−", x)
pdf(NULL)
invisible(capture.output({ for (f in c("b227-1-ankieta-konsumencka.R", "b227-2-test-ab.R", "b227-3-mediacja-etykieta.R")) source(f) }))

# Rysunek 1: rozkład odpowiedzi 0–10 na pytanie o polecenie marki według kanału zakupu
r1d <- as.data.frame(prop.table(table(kanal = k$kanal, odp = factor(k$polecenie, 0:10)), 1))
r1d$proc <- 100 * r1d$Freq
r1d$kategoria <- cut(as.integer(as.character(r1d$odp)), c(-1, 6, 8, 10), labels = c("krytycy (0–6)", "pasywni (7–8)", "promotorzy (9–10)"))
etyk <- sprintf("%s (n = %d): NPS = %s [%s, %s]", c("internet", "sklep stacjonarny"), c(98, 102),
                minus(sprintf("%.1f", wyn_nps[2:3, "NPS"])), minus(sprintf("%.1f", wyn_nps[2:3, "CI_d"])), minus(sprintf("%.1f", wyn_nps[2:3, "CI_g"])))
r1d$panel <- factor(etyk[as.integer(r1d$kanal)], levels = etyk)
print(aggregate(proc ~ kanal + kategoria, r1d, sum), digits = 3)
r1 <- ggplot(r1d, aes(odp, proc, fill = kategoria)) + geom_col(width = .75) +
  facet_wrap(~ panel, ncol = 2) +
  scale_fill_manual(values = c("krytycy (0–6)" = KOLORY[["drugi"]], "pasywni (7–8)" = "grey75", "promotorzy (9–10)" = KOLORY[["akcent"]]), name = NULL) +
  scale_y_continuous(labels = function(x) paste0(x, "%"), expand = expansion(mult = c(0, .05))) +
  labs(title = "Polecenie marki A (0–10) według kanału zakupu", subtitle = "NPS = % promotorów − % krytyków, w nawiasie 95% CI; klienci marki, n = 200",
       x = "Odpowiedź na pytanie o polecenie marki", y = "Odsetek klientów") + theme_metodolog(13)
zapisz_svg(r1, "../statystyka-marketing-nps-kanal.svg", szer = 10, wys = 5.2)

# Rysunek 2: test A/B – konwersja z 95% CI (A) i podglądanie wyników w testach A/A (B)
wil <- function(x, n) { z <- qnorm(.975); p <- x / n; c0 <- p + z^2 / (2 * n); h <- z * sqrt(p * (1 - p) / n + z^2 / (4 * n^2))
  100 * c(p = p, lo = (c0 - h) / (1 + z^2 / n), hi = (c0 + h) / (1 + z^2 / n)) }
r2d <- data.frame(wersja = names(x), t(mapply(wil, x, nn))); print(r2d, digits = 3)
r2a <- ggplot(r2d, aes(wersja, p)) +
  geom_errorbar(aes(ymin = lo, ymax = hi), width = .12, colour = KOLORY[["drugi"]], linewidth = 1) +
  geom_point(colour = KOLORY[["akcent"]], size = 3.6) +
  geom_text(aes(label = sprintf("%.2f%%", p)), nudge_x = .25, size = 4, colour = "grey20") +
  scale_y_continuous(limits = c(5, 11), labels = function(v) paste0(v, "%")) +
  labs(title = "A. Konwersja w teście A/B", subtitle = "n = 1500 na wersję; 95% CI Wilsona",
       x = NULL, y = "Odsetek zakupów") + theme_metodolog(12)
r2bd <- data.frame(liczba_podgladow = seq_along(kroki), fpr = fpr); print(r2bd[c(1, 5, 10, 15), ], digits = 3)
r2b <- ggplot(r2bd, aes(liczba_podgladow, fpr)) + geom_hline(yintercept = 5, linetype = 2, colour = "grey50") +
  geom_line(colour = KOLORY[["akcent"]], linewidth = 1) + geom_point(colour = KOLORY[["akcent"]], size = 2.2) +
  annotate("text", x = 15, y = 6.6, label = "nominalne 5%", hjust = 1, size = 3.6, colour = "grey30") +
  scale_x_continuous(breaks = c(1, 5, 10, 15)) + scale_y_continuous(limits = c(0, 25), labels = function(v) paste0(v, "%")) +
  labs(title = "B. Podglądanie wyników w testach A/A", subtitle = "Odsetek testów z p < .05 przy którymkolwiek podglądzie",
       x = "Liczba podglądów (co 100 osób na wersję)", y = "Fałszywe alarmy") + theme_metodolog(12)
zapisz_svg(r2a + r2b + plot_layout(widths = c(1, 1.25)), "../statystyka-marketing-test-ab.svg", szer = 10, wys = 5)

# Plik XLSX z danymi do pobrania
wb <- createWorkbook(creator = "Metodolog.pl", title = "Statystyka w pracy z marketingu – dane przykładowe")
setLastModifiedBy(wb, "Metodolog.pl")
opis <- data.frame(arkusz = c("Ankieta", "Test_AB", "Eksperyment_etykieta"),
  zawartosc = c("360 konsumentów: pozycje i wyniki skal 1–7 (postawa wobec marki, wartość, wrażliwość cenowa, intencja zakupu), ważność korzyści, polecenie 0–10 i kanał (tylko klienci)",
                "3000 odwiedzających sklepu: wersja strony (A: −20%, B: taniej o 10 zł) i zakup (1 = tak)",
                "240 uczestników: etykieta ekologiczna (1 = tak), kontrola manipulacji, zaufanie i intencja zakupu (1–7)"),
  uwaga = "Dane symulowane do nauki analizy; nie pochodzą z prawdziwego badania.")
ank <- d[, setdiff(names(d), c("segment"))]
for (ark in list(list("Opis", opis), list("Ankieta", ank), list("Test_AB", dane_ab), list("Eksperyment_etykieta", me))) {
  addWorksheet(wb, ark[[1]]); writeData(wb, ark[[1]], ark[[2]]); setColWidths(wb, ark[[1]], 1:ncol(ark[[2]]), "auto") }
saveWorkbook(wb, "../statystyka-marketing-dane-przyklad.xlsx", overwrite = TRUE)
sapply(getSheetNames("../statystyka-marketing-dane-przyklad.xlsx"), function(s) nrow(read.xlsx("../statystyka-marketing-dane-przyklad.xlsx", s)))
cat("rozmiar KB:", round(file.info("../statystyka-marketing-dane-przyklad.xlsx")$size / 1024), "\n")
Wynik w R
              kanal         kategoria proc
1          internet     krytycy (0–6) 22.4
2 sklep stacjonarny     krytycy (0–6) 27.5
3          internet     pasywni (7–8) 26.5
4 sklep stacjonarny     pasywni (7–8) 40.2
5          internet promotorzy (9–10) 51.0
6 sklep stacjonarny promotorzy (9–10) 32.4
Zapisano ../statystyka-marketing-nps-kanal.svg: w HTML width="1000" height="520" (17 KB)
                             wersja    p   lo    hi
A: −20%                     A: −20% 7.13 5.94  8.55
B: taniej o 10 zł B: taniej o 10 zł 8.93 7.59 10.48
   liczba_podgladow  fpr
1                 1  5.1
5                 5 14.1
10               10 18.6
15               15 22.2
Zapisano ../statystyka-marketing-test-ab.svg: w HTML width="1000" height="500" (12 KB)
                Opis              Ankieta              Test_AB 
                   3                  360                 3000 
Eksperyment_etykieta 
                 240 
rozmiar KB: 88 

Bibliografia oprogramowania

Wyniki na tej stronie pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje t.test(), wilcox.test(), cor.test(), prop.test(), power.prop.test(), lm() i kmeans() z pakietów stats); rysunki przygotowano w pakietach ggplot2, svglite i patchwork. W pracy podaj wersje faktycznie użytych pakietów (sessionInfo()).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
  2. effectsize (wersja 1.0.2): Ben-Shachar, M. S., Lüdecke, D., & Makowski, D. (2020). effectsize: Estimation of effect size indices and standardized parameters. Journal of Open Source Software, 5(56), 2815. https://doi.org/10.21105/joss.02815
  3. psych (wersja 2.6.5): Revelle, W. (2026). psych: Procedures for psychological, psychometric, and personality research (R package version 2.6.5) [Computer software]. Northwestern University. https://CRAN.R-project.org/package=psych
  4. lavaan (wersja 0.7.2): Rosseel, Y. (2012). lavaan: An R package for structural equation modeling. Journal of Statistical Software, 48(2), 1–36. https://doi.org/10.18637/jss.v048.i02
  5. car (wersja 3.1.5): Fox, J., & Weisberg, S. (2019). An R companion to applied regression (3rd ed.). Sage. https://www.john-fox.ca/Companion/
  6. cluster (wersja 2.1.8.2): Maechler, M., Rousseeuw, P., Struyf, A., Hubert, M., & Hornik, K. (2026). cluster: Cluster analysis basics and extensions (R package version 2.1.8.2) [Computer software]. https://CRAN.R-project.org/package=cluster
  7. DescTools (wersja 0.99.60): Signorell, A. (2025). DescTools: Tools for descriptive statistics (R package version 0.99.60) [Computer software]. https://doi.org/10.32614/CRAN.package.DescTools
  8. openxlsx (wersja 4.2.8.1): Schauberger, P., & Walker, A. (2025). openxlsx: Read, write and edit xlsx files (R package version 4.2.8.1) [Computer software]. https://doi.org/10.32614/CRAN.package.openxlsx
  9. ggplot2 (wersja 4.0.2): Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer. https://ggplot2.tidyverse.org
  10. svglite (wersja 2.2.2): Wickham, H., Henry, L., Pedersen, T. L., Luciani, T. J., Decorde, M., & Lise, V. (2025). svglite: An 'SVG' graphics device (R package version 2.2.2) [Computer software]. https://doi.org/10.32614/CRAN.package.svglite
  11. patchwork (wersja 1.3.2): Pedersen, T. L. (2025). patchwork: The composer of plots (R package version 1.3.2) [Computer software]. https://doi.org/10.32614/CRAN.package.patchwork

Najczęstsze błędy w analizach prac z marketingu

  • Uogólnianie wyników ankiety z mediów społecznościowych na wszystkich konsumentów albo „Polaków”.
  • Wnioski przyczynowe z ankiety. „Postawa wpływa na zakup” to wniosek eksperymentu, a nie korelacji w jednym badaniu przekrojowym.
  • Konstrukt mierzony jednym pytaniem albo autorska skala bez sprawdzenia rzetelności i struktury.
  • NPS bez przedziału ufności i porównywanie wyników różniących się o kilka punktów przy stu osobach w grupie.
  • Test A/B zakończony, gdy tylko wynik stał się istotny. W symulacji przy piętnastu podglądach fałszywe alarmy pojawiły się w 22.2% testów zamiast w 5%.
  • Wynik nieistotny przedstawiony jako dowód braku efektu, choć badanie miało za małą moc.
  • Mediacja oceniana krokami Barona i Kenny’ego albo testem Sobela zamiast przedziału bootstrap dla efektu pośredniego.
  • Segmenty nazwane i opisane bez uzasadnienia liczby skupień i bez sprawdzenia stabilności.
  • Intencja zakupu opisana jak zakup. Deklaracja w ankiecie nie jest zachowaniem.

Najczęstsze pytania

Jak policzyć NPS i jego przedział ufności w pracy magisterskiej?

Policz odsetek promotorów (odpowiedzi 9–10) i krytyków (0–6) i odejmij drugi od pierwszego. Błąd standardowy to 100 × √[(pP + pK − (pP − pK)²) / n], a 95% CI to NPS ± 1.96 × SE. Przy 200 osobach przedział ma zwykle ponad 20 punktów szerokości, dlatego obok NPS pokaż rozkład odpowiedzi 0–10 i porównuj grupy także na pełnej skali, np. testem Manna–Whitneya.

Jak przeanalizować test A/B w pracy z marketingu?

Porównaj odsetki konwersji w obu wersjach testem dla dwóch proporcji (albo chi-kwadrat 2 × 2) i podaj różnicę w punktach procentowych z 95% CI Newcombe’a, a obok ryzyko względne. Liczebność zaplanuj przed startem testu i przeprowadź jeden test na końcu. Sprawdzanie wyniku co kilka dni i kończenie testu przy pierwszym p < .05 wielokrotnie zwiększa ryzyko fałszywego alarmu.

Czy wynik nieistotny w teście A/B oznacza, że obie wersje działają tak samo?

Nie. Przy małych odsetkach zakupów nawet kilka tysięcy osób to często za mało, by wykryć różnicę ważną dla sklepu. Spójrz na przedział ufności: jeśli obejmuje zarówno zero, jak i duży wzrost, badanie nie rozstrzyga, która wersja jest lepsza. Napisz o tym wprost i podaj, jaka liczebność byłaby potrzebna.

Jak sprawdzić, czy etykieta albo reklama działa na intencję zakupu przez zaufanie do marki?

Najlepiej w eksperymencie: losowo przydziel osoby do wersji z etykietą i bez niej, zmierz zaufanie (mediator) i intencję zakupu (wynik). Oszacuj ścieżki a i b regresją, a efekt pośredni ab przetestuj przedziałem bootstrap z co najmniej 5000 prób. Nie opieraj wniosku na krokach Barona i Kenny’ego ani na samej nieistotności efektu bezpośredniego.

Czy wyniki ankiety udostępnionej w mediach społecznościowych mogę uogólnić na konsumentów?

Nie wprost. Taka próba jest dobrana wygodnie: odpowiadają osoby zainteresowane tematem i podobne do autora. Odsetki, np. NPS albo odsetek klientów marki, opisuj jako cechę badanej grupy. Ostrożniej, ale z większym sensem, możesz wnioskować o związkach między zmiennymi, np. postawą wobec marki a intencją zakupu, opisując ograniczenia doboru próby.

Powiązane hasła

Przeczytaj też

Piszesz pracę z marketingu i masz dane z ankiety albo testu A/B?

Pomożemy dobrać analizy do Twojego badania – skal postaw, NPS, eksperymentu albo segmentacji – policzyć je z wielkością efektu i wyjaśnić tak, abyś umiał(a) samodzielnie je opisać i obronić.

Oferta dla studentówWyceń analizę

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Baumgartner, H., & Steenkamp, J.-B. E. M. (2001). Response styles in marketing research: A cross-national investigation. Journal of Marketing Research, 38(2), 143–156. https://doi.org/10.1509/jmkr.38.2.143.18840 ● Otwarty dostęp: pełny tekst
  2. Churchill, G. A. (1979). A paradigm for developing better measures of marketing constructs. Journal of Marketing Research, 16(1), 64–73. https://doi.org/10.1177/002224377901600110
  3. Dawes, J. G. (2024). Net Promoter and revenue growth: An examination across three industries. Australasian Marketing Journal, 32(1), 4–18. https://doi.org/10.1177/14413582221132039
  4. Keiningham, T. L., Cooil, B., Andreassen, T. W., & Aksoy, L. (2007). A longitudinal examination of net promoter and firm revenue growth. Journal of Marketing, 71(3), 39–51. https://doi.org/10.1509/jmkg.71.3.039
  5. Kohavi, R., Longbotham, R., Sommerfield, D., & Henne, R. M. (2009). Controlled experiments on the web: Survey and practical guide. Data Mining and Knowledge Discovery, 18(1), 140–181. https://doi.org/10.1007/s10618-008-0114-1 ● Otwarty dostęp
  6. Newcombe, R. G. (1998). Interval estimation for the difference between independent proportions: Comparison of eleven methods. Statistics in Medicine, 17(8), 873–890. https://doi.org/10.1002/(sici)1097-0258(19980430)17:8<873::aid-sim779>3.0.co;2-i
  7. Podsakoff, P. M., MacKenzie, S. B., Lee, J.-Y., & Podsakoff, N. P. (2003). Common method biases in behavioral research: A critical review of the literature and recommended remedies. Journal of Applied Psychology, 88(5), 879–903. https://doi.org/10.1037/0021-9010.88.5.879
  8. Punj, G., & Stewart, D. W. (1983). Cluster analysis in marketing research: Review and suggestions for application. Journal of Marketing Research, 20(2), 134–148. https://doi.org/10.1177/002224378302000204
  9. Zhao, X., Lynch, J. G., & Chen, Q. (2010). Reconsidering Baron and Kenny: Myths and truths about mediation analysis. Journal of Consumer Research, 37(2), 197–206. https://doi.org/10.1086/651257 ● Otwarty dostęp

Cytowania BibTeX

@article{baumgartner2001response, author={Baumgartner, Hans and Steenkamp, Jan-Benedict E. M.}, title={{Response styles in marketing research: A cross-national investigation}}, journal={Journal of Marketing Research}, year={2001}, volume={38}, number={2}, pages={143--156}, doi={10.1509/jmkr.38.2.143.18840}}
@article{churchill1979paradigm, author={Churchill, Gilbert A.}, title={{A paradigm for developing better measures of marketing constructs}}, journal={Journal of Marketing Research}, year={1979}, volume={16}, number={1}, pages={64--73}, doi={10.1177/002224377901600110}}
@article{dawes2024net, author={Dawes, John G.}, title={{Net Promoter and revenue growth: An examination across three industries}}, journal={Australasian Marketing Journal}, year={2024}, volume={32}, number={1}, pages={4--18}, doi={10.1177/14413582221132039}}
@article{keiningham2007longitudinal, author={Keiningham, Timothy L. and Cooil, Bruce and Andreassen, Tor Wallin and Aksoy, Lerzan}, title={{A longitudinal examination of net promoter and firm revenue growth}}, journal={Journal of Marketing}, year={2007}, volume={71}, number={3}, pages={39--51}, doi={10.1509/jmkg.71.3.039}}
@article{kohavi2009controlled, author={Kohavi, Ron and Longbotham, Roger and Sommerfield, Dan and Henne, Randal M.}, title={{Controlled experiments on the web: Survey and practical guide}}, journal={Data Mining and Knowledge Discovery}, year={2009}, volume={18}, number={1}, pages={140--181}, doi={10.1007/s10618-008-0114-1}}
@article{newcombe1998interval, author={Newcombe, Robert G.}, title={{Interval estimation for the difference between independent proportions: Comparison of eleven methods}}, journal={Statistics in Medicine}, year={1998}, volume={17}, number={8}, pages={873--890}, doi={10.1002/(sici)1097-0258(19980430)17:8<873::aid-sim779>3.0.co;2-i}}
@article{podsakoff2003common, author={Podsakoff, Philip M. and MacKenzie, Scott B. and Lee, Jeong-Yeon and Podsakoff, Nathan P.}, title={{Common method biases in behavioral research: A critical review of the literature and recommended remedies}}, journal={Journal of Applied Psychology}, year={2003}, volume={88}, number={5}, pages={879--903}, doi={10.1037/0021-9010.88.5.879}}
@article{punj1983cluster, author={Punj, Girish and Stewart, David W.}, title={{Cluster analysis in marketing research: Review and suggestions for application}}, journal={Journal of Marketing Research}, year={1983}, volume={20}, number={2}, pages={134--148}, doi={10.1177/002224378302000204}}
@article{zhao2010reconsidering, author={Zhao, Xinshu and Lynch, John G. and Chen, Qimei}, title={{Reconsidering Baron and Kenny: Myths and truths about mediation analysis}}, journal={Journal of Consumer Research}, year={2010}, volume={37}, number={2}, pages={197--206}, doi={10.1086/651257}}
R