Prace dyplomowe · Turystyka i rekreacja

Statystyka w pracy z turystyki i rekreacji: satysfakcja, IPA, segmentacja, wydatki, NPS i sezonowość

Jak przeanalizować ankietę wśród turystów: satysfakcję z pobytu, ważność i ocenę atrybutów (IPA), segmenty motywów wyjazdu, dzienne wydatki, gotowość polecenia (NPS) i sezonowość ruchu – wybór analizy, wielkość efektu i gotowe zdania APA, na danych do pobrania i z kodem R.

Strona główna / Blog / Statystyka w turystyce i rekreacji
W skrócie: W pracy z turystyki i rekreacji najczęściej analizujesz ankietę wśród turystów: satysfakcję, ważność i ocenę atrybutów (IPA), motywy wyjazdu, wydatki i gotowość polecenia, a czasem dane obiektu o sezonowości. Satysfakcję porównuj testem Manna–Whitneya z rrb, luki IPA – testem Wilcoxona dla par z korektą Holma, segmenty wybieraj średnią sylwetką, a wydatki modeluj na logarytmie z błędami HC3 i interpretuj w procentach. NPS podawaj z przedziałem ufności: w przykładzie różnica 12.8 punktu między ośrodkami miała 95% CI [−3.1, 29.1].

Sześć typowych projektów w pracy z turystyki i rekreacji

Prace dyplomowe z turystyki i rekreacji to najczęściej badania ankietowe prowadzone wśród turystów, gości obiektów albo uczestników zajęć rekreacyjnych. Pytasz o zadowolenie z pobytu, o to, co jest dla gości ważne, po co przyjechali, ile wydają i czy polecą miejsce znajomym. Rzadziej analizujesz dane obiektu, np. liczbę noclegów w kolejnych miesiącach. Tabela zestawia sześć projektów omówionych w tym poradniku. Każdy ma inny problem analityczny: skala Likerta, pary ocen tych samych osób, analiza skupień, skośne kwoty w złotych, wskaźnik zbudowany z kategorii i dane miesięczne.

Sześć typowych projektów prac z turystyki i rekreacji: pytanie, dane, analiza i wielkość efektu
ProjektTypowe pytanieDaneAnaliza głównaWielkość efektu
1. Satysfakcja z pobytuCzy powracający goście są bardziej zadowoleni niż przyjeżdżający pierwszy raz?skala 6 pozycji 1–5, gruparzetelność (α, ω), test Manna–Whitneyakorelacja rangowo-biseryjna
2. Ważność i ocena atrybutów (IPA)Które elementy oferty są ważne, a słabo ocenione?ważność i ocena 8 atrybutów od tych samych osóbsiatka IPA, test Wilcoxona dla par, korekta Holmaluka (ocena − ważność), rrb dla par
3. Segmentacja według motywówJakie grupy turystów wyróżnić ze względu na motywy wyjazdu?6 motywów 1–7, typ nocleguk-średnich, średnia sylwetka, chi-kwadratsylwetka, V Craméra
4. Wydatki turystówOd czego zależą dzienne wydatki na osobę?zł na osobę dziennie, cechy pobyturegresja na logarytmie wydatków, błędy HC3zmiana procentowa z 95% CI, R²
5. Polecenie i NPSCzy goście ośrodka A chętniej polecają go niż goście ośrodka B?gotowość polecenia 0–10NPS z bootstrapowym CI, test Manna–Whitneyaróżnica NPS z 95% CI, rrb
6. Sezonowość ruchuJak silnie ruch w obiekcie koncentruje się w sezonie?noclegi w kolejnych miesiącachwskaźniki opisoweindeks sezonowości, CV, współczynnik Giniego

Wszystkie dane w przykładach są symulowane. Możesz je pobrać jako plik XLSX (osobny arkusz dla każdego projektu i arkusz z opisem) i powtórzyć analizy w swoim programie. Jeśli Twoja praca jest bliżej ekonomii przedsiębiorstwa turystycznego niż badań wśród gości, zajrzyj też do poradnika statystyka w pracy z zarządzania i ekonomii, gdzie omawiamy ankiety pracowników i modele ekonometryczne.

Zanim zaczniesz: kogo, gdzie i kiedy pytasz

Ankieta „na miejscu” to próba okolicznościowa. Turystów zwykle pyta się na plaży, przy wejściu do parku, w recepcji albo na szlaku. Taka próba nie jest losowa: częściej odpowiadają osoby, które mają czas, mówią po polsku i akurat przebywają w miejscu badania. Odsetki i średnie opisuj więc jako cechę badanej próby, a nie „turystów odwiedzających region”. Co oznacza reprezentatywność próby i dlaczego duża liczba ankiet jej nie zastąpi, wyjaśniamy osobno.

Termin badania zmienia wyniki. W turystyce kto przyjeżdża, zależy od miesiąca. Ankieta zebrana tylko w lipcu opisuje gości wakacyjnych: więcej rodzin z dziećmi, więcej osób na dłuższym pobycie. Jeśli możesz, rozłóż zbieranie danych na kilka terminów albo przynajmniej podaj w pracy daty, dni tygodnia i miejsca badania. Ankieter powinien zaczepiać osoby według prostej reguły (np. co trzecia osoba przechodząca obok punktu), a nie wybierać „sympatycznych” rozmówców.

Ustal jednostkę analizy. Turyści często podróżują w grupach. Jeśli ankietę wypełnia kilka osób z jednej rodziny, ich odpowiedzi są do siebie podobne, a wydatki bywają wspólne. Najprościej przyjąć regułę: jedna ankieta na grupę, wypełniana przez osobę dorosłą, a wydatki przeliczane na osobę. Zapisz w bazie liczbę osób w grupie, bo przyda się w analizie wydatków. Jak przygotować pytania i skale, opisujemy w poradniku jak zrobić ankietę do pracy dyplomowej.

Projekt 1. Satysfakcja z pobytu: skala i porównanie grup

Pytanie: czy turyści, którzy przyjechali do miejscowości kolejny raz, są bardziej zadowoleni z pobytu niż osoby przyjeżdżające pierwszy raz? Zmienne: sześć pozycji satysfakcji ocenianych od 1 do 5 (wypoczynek, atmosfera, obsługa, ceny, atrakcje, czystość), z których liczysz średni wynik skali, oraz grupa: pierwsza albo kolejna wizyta. Plan analiz: rzetelność skali, opis wyniku w grupach, porównanie dwóch grup niezależnych z wielkością efektu.

Zanim zsumujesz pozycje, sprawdź, czy mierzą jedną cechę. W przykładzie (320 turystów) alfa Cronbacha wyniosła α = .82, a omega McDonalda z jednoczynnikowej analizy czynnikowej ω = .82 (ładunki od .55 do .80). Średni wynik skali jest więc uzasadniony. Taki wynik ma jednak tylko kilkanaście możliwych wartości i często jest przesunięty ku górze skali, bo turyści na urlopie rzadko oceniają pobyt źle. Dlatego obok średniej i SD podaj medianę i kwartyle. Kiedy średnia ze skali Likerta ma sens, a kiedy lepsza jest mediana, omawiamy w tekście czy skala Likerta jest ilościowa.

Do porównania dwóch grup przy takim wyniku dobrze pasuje test U Manna–Whitneya. Osoby przyjeżdżające pierwszy raz (n = 168) miały M = 3.93, SD = 0.63, Me = 4.00, a powracające (n = 152) M = 4.13, SD = 0.64, Me = 4.17. Test: U = 10580, p = .008. Wielkością efektu jest korelacja rangowo-biseryjna rrb = −.17, 95% CI [−.29, −.05]. Znak ujemny wynika z kolejności grup w R (pierwsza wizyta jako grupa odniesienia) i oznacza niższe wyniki tej grupy. Efekt jest niewielki. Jak liczyć i opisywać miary efektu dla testów rangowych, pokazujemy w poradniku wielkość efektu dla testów nieparametrycznych.

Pamiętaj, że to badanie przekrojowe. Wyższa satysfakcja powracających nie znaczy, że kolejny przyjazd zwiększa zadowolenie. Bardziej prawdopodobne jest, że wracają ci, którym się podobało, a niezadowoleni po prostu nie przyjeżdżają ponownie i nie trafiają do próby.

Skala satysfakcji z pobytu (6 pozycji, 1–5) miała zadowalającą rzetelność, α = .82, ω = .82. Turyści przebywający w miejscowości kolejny raz (n = 152; Me = 4.17, Q1–Q3: 3.67–4.67) oceniali pobyt wyżej niż osoby przyjeżdżające po raz pierwszy (n = 168; Me = 4.00, Q1–Q3: 3.67–4.33), U = 10580, p = .008, rrb = −.17, 95% CI [−.29, −.05]. Efekt był niewielki.

Projekt 2. Ważność i ocena atrybutów (IPA)

Pytanie: które elementy oferty miejscowości są dla turystów ważne, a ocenione słabo? Zmienne: dla ośmiu atrybutów (np. czystość plaży i szlaków, baza noclegowa, ceny, oferta dla dzieci) każda osoba podaje ważność (1–5) i ocenę (1–5). Plan analiz: średnie ważności i oceny, siatka czterech ćwiartek, luka „ocena − ważność” sprawdzona testem dla par z korektą na wielokrotne porównania.

Analizę ważność–ocena (ang. importance–performance analysis, IPA) opisali Martilla i James (1977) jako prosty sposób łącznego pomiaru ważności i wykonania atrybutów, przydatny w planowaniu działań marketingowych. W turystyce stała się bardzo popularna. Średnie umieszczasz na wykresie: oś pozioma to ważność, pionowa to ocena, a linie podziału przechodzą przez średnią ważność i średnią ocenę wszystkich atrybutów (w przykładzie 3.69 i 3.65). Powstają cztery ćwiartki: „skup się tutaj” (ważne, słabo ocenione), „utrzymaj poziom”, „niski priorytet” i „możliwy nadmiar” (mało ważne, dobrze ocenione).

Siatka ważność–ocena dla ośmiu atrybutów miejscowości turystycznej: ceny w ćwiartce skup się tutaj, czystość plaży, baza noclegowa i gastronomia w ćwiartce utrzymaj poziom, oferta dla dzieci w ćwiartce możliwy nadmiar
Rysunek 1. Siatka ważność–ocena (IPA) dla ośmiu atrybutów (dane symulowane, n = 320). Czerwone punkty oznaczają atrybuty, dla których różnica między oceną a ważnością była istotna po korekcie Holma.

Sam wykres łatwo jednak przeinterpretować. Azzopardi i Nash (2013) w przeglądzie metodologicznym IPA wskazują problemy koncepcyjne i pomiarowe, które zagrażają trafności takich wniosków. Dwa z nich widać na rysunku 1. Po pierwsze, położenie linii podziału jest umowne: ich przesunięcie o kilka setnych może przenieść atrybut do innej ćwiartki. Po drugie, ćwiartka nie mówi, jak duża jest luka. Czystość plaży i szlaków leży w ćwiartce „utrzymaj poziom”, a ma prawie tak dużą lukę jak ceny: ocena była niższa od ważności o 0.61 punktu (rrb = −.65, p < .001 po korekcie Holma). Ceny, jedyny atrybut w ćwiartce „skup się tutaj”, miały lukę −0.71 (rrb = −.66, p < .001). Dlatego obok wykresu pokaż tabelę z lukami.

Ważność i ocena pochodzą od tych samych osób, więc lukę dla każdego atrybutu sprawdzasz testem Wilcoxona dla par, a jako efekt podajesz sparowaną korelację rangowo-biseryjną. Przy ośmiu testach skoryguj wartości p metodą Holma (o tym, kiedy korekta jest potrzebna, piszemy w haśle o problemie wielokrotnych porównań). W przykładzie po korekcie istotne były luki ujemne dla czystości, cen i bazy noclegowej (−0.20, p = .015) oraz dodatnie dla oferty dla dzieci (+0.79, p < .001), informacji turystycznej (+0.34, p < .001) i imprez (+0.16, p = .048). Luki dla gastronomii oraz dojazdu i parkingu były nieistotne.

Ważność i ocenę ośmiu atrybutów miejscowości porównano w analizie ważność–ocena (IPA). Najwięcej uwagi wymagały ceny, ocenione poniżej średniej i uznane za ważne (ważność M = 4.07, ocena M = 3.36; luka −0.71, rrb = −.66, p < .001 po korekcie Holma). Podobnie dużą lukę miała czystość plaży i szlaków (−0.61, rrb = −.65, p < .001), choć jej ocena była powyżej średniej wszystkich atrybutów. Oferta dla dzieci była oceniana wyżej, niż wskazywałaby jej ważność (+0.79, rrb = .67, p < .001).

Projekt 3. Segmentacja turystów według motywów wyjazdu

Pytanie: czy wśród turystów można wyróżnić grupy o podobnych motywach przyjazdu i czym te grupy się różnią? Zmienne: sześć motywów ocenianych od 1 do 7 (relaks, ucieczka od codzienności, przygoda, kontakt z przyrodą, poznawanie kultury, czas z rodziną) oraz typ noclegu jako zmienna do opisu segmentów. Plan analiz: standaryzacja motywów, analiza skupień metodą k-średnich dla kilku wartości k, wybór liczby segmentów, opis profili, porównanie segmentów pod względem zmiennych spoza segmentacji.

Liczebność. Segmentacja potrzebuje większej próby niż porównanie dwóch grup. Dolnicar i in. (2014) w symulacji na danych o znanej strukturze pokazali, że we wszystkich badanych warunkach wystarczała próba równa 70-krotności liczby zmiennych użytych do segmentacji. Przy sześciu motywach to 420 osób. W przykładzie jest ich 450 (75 na zmienną). Jeśli masz 150 ankiet, ogranicz liczbę zmiennych albo potraktuj segmentację jako analizę wstępną.

Wybór liczby segmentów. K-średnich zawsze podzieli dane na tyle grup, o ile poprosisz, dlatego porównaj kilka rozwiązań. Rousseeuw (1987) zaproponował sylwetkę: dla każdej osoby porównuje się, jak blisko jest członków własnego skupienia, a jak blisko najbliższego innego. Średnia szerokość sylwetki ocenia jakość podziału i może pomóc wybrać liczbę skupień (więcej w haśle wskaźnik sylwetki). W przykładzie średnia sylwetka wyniosła .30 dla k = 2, .31 dla k = 3, .21 dla k = 4 i .17 dla k = 5 i 6, więc wybrano trzy segmenty. Wartość .31 oznacza segmenty zauważalne, ale nakładające się. Tak wygląda większość segmentacji ankietowych i trzeba to uczciwie napisać.

Po lewej średnia szerokość sylwetki dla dwóch do sześciu segmentów z maksimum przy trzech; po prawej średnie sześciu motywów w trzech segmentach turystów
Rysunek 2. Wybór liczby segmentów i profile motywów (dane symulowane, n = 450). Segmenty nazwano na podstawie motywów, które w danym segmencie są najwyżej oceniane.

Profile i nazwy. Segmenty opisujesz średnimi motywów na oryginalnej skali 1–7, a nie wartościami standaryzowanymi. Największy segment (46.2%) najwyżej ocenił relaks (5.93), ucieczkę od codzienności (5.72) i czas z rodziną (5.64), a przygodę nisko (2.76). Nazwano go „wypoczynkowi i rodzinni”. Drugi (30.0%) wyróżniał się kontaktem z przyrodą (5.96) i przygodą (5.68): „aktywni w przyrodzie”. Trzeci (23.8%) najwyżej ocenił poznawanie kultury (6.11): „zwiedzający”. Nazwy to Twoja interpretacja, a nie wynik testu. W symulacji znamy prawdziwy podział, a k-średnich odtworzyło go dla 95.1% osób. W prawdziwym badaniu takiej kontroli nie masz, więc sprawdź przynajmniej, czy podobne segmenty wychodzą na losowej połowie próby.

Czym różnią się segmenty. Nie testuj różnic w motywach między segmentami: segmenty powstały właśnie po to, by się w nich różnić, więc taki test zawsze „wyjdzie”. Testuj zmienne, których nie użyto do segmentacji. W przykładzie typ noclegu zależał od segmentu: kemping lub agroturystykę wybrało 54.1% aktywnych w przyrodzie, 36.4% zwiedzających i 26.4% wypoczynkowych i rodzinnych. Test chi-kwadrat: χ²(4) = 47.02, p < .001, V Craméra = .23 (najmniejsza liczebność oczekiwana 29.0). Porównanie k-średnich z analizą profili latentnych opisujemy w poradniku segmentacja respondentów: k-średnich i LPA.

Segmenty turystów wyodrębniono analizą skupień k-średnich na standaryzowanych ocenach sześciu motywów wyjazdu (N = 450; 75 osób na zmienną). Spośród rozwiązań od dwóch do sześciu segmentów najwyższą średnią szerokość sylwetki miało rozwiązanie trzysegmentowe (.31), co wskazuje na umiarkowanie oddzielone segmenty. Wyróżniono segmenty: wypoczynkowi i rodzinni (46.2%), aktywni w przyrodzie (30.0%) i zwiedzający (23.8%). Segmenty różniły się typem noclegu, χ²(4) = 47.02, p < .001, V Craméra = .23; kemping lub agroturystykę najczęściej wybierali aktywni w przyrodzie (54.1%).

Projekt 4. Wydatki turystów: regresja na logarytmie

Pytanie: od czego zależą dzienne wydatki turysty na osobę? Zmienne: wydatki w złotych na osobę dziennie (bez dojazdu), liczba noclegów, liczba osób w grupie, typ noclegu (pensjonat lub apartament, hotel, kemping lub agroturystyka), wiek i pierwsza wizyta. Plan analiz: opis rozkładu wydatków, regresja wieloraka na logarytmie wydatków z odpornymi błędami standardowymi, interpretacja w procentach.

W przeglądzie 86 prac o wydatkach turystów Brida i Scuderi (2013) wskazują, że najczęściej uwzględnia się dochód, cechy społeczno-demograficzne i cechy podróży, a modele szacuje się głównie metodą najmniejszych kwadratów, regresją kwantylową, modelami Tobit i dwuetapowymi. W pracy dyplomowej zwykle wystarcza regresja wieloraka, ale nie na surowych złotych. Wydatki są prawoskośne: w przykładzie (400 turystów) średnia wyniosła 227.58 zł (SD = 140.46), mediana 189 zł, a zakres 41–906 zł (skośność 1.64). Model na złotych miał silnie skośne reszty (skośność 1.60), a test Breuscha–Pagana wskazał heteroskedastyczność, BP = 19.95, p = .003.

Po transformacji logarytmicznej rozkład stał się prawie symetryczny (skośność 0.11), reszty też (−0.04), a model wyjaśnił więcej zmienności: R² = .335, skorygowane R² = .325, F(6, 393) = 33.00, p < .001. Mimo nieistotnego testu Breuscha–Pagana (p = .228) użyto błędów standardowych HC3. Long i Ervin (2000) zalecają odporne błędy zawsze, gdy można podejrzewać heteroskedastyczność, bez uzależniania tej decyzji od testu wstępnego. Kiedy logarytm pomaga, a kiedy lepszy jest inny model, omawiamy w tekście kiedy transformować zmienną.

Interpretacja w procentach. Współczynnik b w modelu na logarytmie zamieniasz na zmianę procentową wzorem 100 × (eb − 1). Przy pozostałych zmiennych stałych goście hoteli wydawali o 40.3% więcej niż goście pensjonatów i apartamentów (95% CI [25.6, 56.6]), a goście kempingów i gospodarstw agroturystycznych o 36.2% mniej (95% CI [28.6, 43.0]). Każdy kolejny nocleg wiązał się z wydatkami dziennymi niższymi o 3.8% (95% CI [1.5, 6.0]), a każda dodatkowa osoba w grupie – o 5.6% (95% CI [2.6, 8.6]). Związek z wiekiem był słaby (+0.4% na rok, p = .041), a pierwsza wizyta nie miała istotnego związku z wydatkami (p = .341).

Prognoza w złotych. Jeśli chcesz podać przewidywane wydatki, nie wystarczy podnieść prognozy z logarytmu do potęgi e. Otrzymasz wtedy wartość bliską medianie, a nie średnią. Duan (1983) zaproponował poprawkę smearing: prognozę mnoży się przez średnią z e podniesionego do potęgi reszt modelu. W przykładzie średnia z prostych prognoz wynosiła 203.5 zł, a po poprawce (czynnik 1.113) 226.6 zł, przy średniej w danych 227.6 zł. Dla 41-letniego gościa hotelu, który przyjechał pierwszy raz z drugą osobą na cztery noclegi, prognoza wzrosła z 298.0 zł do 331.7 zł.

Ze względu na prawostronną skośność wydatków (skośność 1.64) jako zmienną zależną przyjęto logarytm naturalny dziennych wydatków na osobę; zastosowano błędy standardowe odporne na heteroskedastyczność (HC3). Model wyjaśnił 33.5% zmienności logarytmu wydatków, F(6, 393) = 33.00, p < .001. Przy kontroli pozostałych zmiennych goście hoteli wydawali o 40.3% więcej niż goście pensjonatów i apartamentów, b = 0.338, t(393) = 6.03, p < .001, 95% CI [25.6%, 56.6%], a goście kempingów i gospodarstw agroturystycznych o 36.2% mniej, b = −0.450, t(393) = −7.85, p < .001. Każdy dodatkowy nocleg wiązał się z wydatkami dziennymi niższymi o 3.8%, b = −0.039, t(393) = −3.20, p = .001, a każda dodatkowa osoba w grupie – o 5.6%, b = −0.058, t(393) = −3.60, p < .001.

Projekt 5. Gotowość polecenia i NPS

Pytanie: czy goście ośrodka rekreacyjnego A chętniej polecają go znajomym niż goście ośrodka B? Zmienne: odpowiedź na pytanie o gotowość polecenia na skali 0–10 i ośrodek. Plan analiz: rozkład kategorii, Net Promoter Score (NPS) z przedziałem ufności, porównanie ośrodków na wskaźniku i na pełnej skali.

NPS to odsetek promotorów (odpowiedzi 9–10) minus odsetek krytyków (0–6), w punktach od −100 do 100. Ośrodki i organizacje turystyczne często go raportują, więc promotor może zaproponować go jako miarę lojalności. Pamiętaj jednak o dwóch ograniczeniach. Po pierwsze, Keiningham i in. (2007) na danych podłużnych z 21 firm nie potwierdzili, że NPS przewiduje wzrost przychodów lepiej niż inne miary satysfakcji i lojalności. Po drugie, wskaźnik powstaje z trzech kategorii, więc traci informację. Przejście gościa z 0 na 6 nie zmienia NPS, a z 8 na 9 – zmienia.

W przykładzie ośrodek A (n = 180) miał 49.4% promotorów i 17.2% krytyków, czyli NPS = 32.2, a ośrodek B (n = 160) 39.4% i 20.0%, czyli NPS = 19.4. Różnica 12.8 punktu wygląda na dużą, ale przedziały są szerokie. Przedział bootstrapowy (5000 powtórzeń) wyniósł [21.7, 43.3] dla A i [8.1, 30.6] dla B. Dla różnicy wyniósł [−3.1, 29.1], czyli obejmuje zero. Przedział ze wzoru dla rozkładu wielomianowego dał prawie te same granice. Analiza pełnej skali 0–10 prowadzi do tego samego wniosku: M = 7.88 (SD = 2.25) w A i 7.68 (SD = 2.09) w B, U = 15802, p = .115, rrb = .10, 95% CI [−.03, .22]. Przy kilkuset ankietach NPS jest więc mało precyzyjny i różnice rzędu kilkunastu punktów mogą wynikać z przypadku. Jak NPS wykorzystać w badaniu konsumenckim, opisujemy w poradniku statystyka w pracy z marketingu.

Net Promoter Score wyniósł 32.2 w ośrodku A (n = 180; 49.4% promotorów, 17.2% krytyków), 95% CI [21.7, 43.3], i 19.4 w ośrodku B (n = 160; 39.4% promotorów, 20.0% krytyków), 95% CI [8.1, 30.6] (przedziały bootstrapowe, 5000 powtórzeń). Różnica 12.8 punktu nie była istotna, 95% CI [−3.1, 29.1]. Również rozkład odpowiedzi na skali 0–10 nie różnił się istotnie między ośrodkami, U = 15802, p = .115, rrb = .10, 95% CI [−.03, .22].

Projekt 6. Sezonowość ruchu turystycznego – opis

Pytanie: jak silnie liczba noclegów w obiekcie koncentruje się w kilku miesiącach roku? Zmienne: liczba noclegów w każdym miesiącu przez trzy lata. Plan analiz: wskaźniki opisowe i wykres liniowy miesięcy. Na poziomie pracy licencjackiej czy magisterskiej zwykle nie potrzebujesz testu statystycznego: chodzi o opis wzoru.

Sezonowość to powtarzający się co roku wzór wahań. Koenig-Lewis i Bischoff (2005) w przeglądzie badań nad sezonowością w turystyce omawiają jej definicje, przyczyny, skutki i sposoby pomiaru. Zwracają też uwagę, że dziedzina potrzebuje bardziej ścisłego podejścia ilościowego. W pracy dyplomowej przydają się cztery proste miary:

  • indeks sezonowości dla miesiąca: średnia liczba noclegów w tym miesiącu podzielona przez średnią miesięczną z całego okresu, razy 100. W przykładzie sierpień miał indeks 208, lipiec 193, a listopad 45;
  • stosunek najlepszego do najsłabszego miesiąca w roku: od 4.17 do 5.27 w trzech latach;
  • współczynnik zmienności 12 wartości miesięcznych: 50.4%, 57.7% i 50.2%;
  • współczynnik Giniego z 12 miesięcy: 0 oznacza równomierny ruch, a im wyższa wartość, tym silniejsza koncentracja (.26, .29 i .25). Pomocny jest też udział lipca i sierpnia w rocznej sumie: 32.6–34.8%.

Wskaźniki licz osobno dla każdego roku. Wtedy widać, czy sezonowość się zmienia, a nie tylko, jaka jest średnio. Jeśli Twoim celem jest prognoza albo ocena trendu, potrzebujesz modelu szeregu czasowego. Wtedy przeczytaj poradnik szeregi czasowe i ARIMA w praktyce. Trzy lata danych miesięcznych (36 obserwacji) to jednak niewiele do takiego modelu. Sezonowość ma też wpływ na projekty 1–5: jeśli ankietę zbierasz tylko w szczycie sezonu, opisujesz gości szczytu sezonu.

Ruch w obiekcie miał wyraźnie sezonowy charakter. Indeks sezonowości (średnia z trzech lat, średnia miesięczna = 100) był najwyższy w sierpniu (208) i lipcu (193), a najniższy w listopadzie (45) i marcu (53). Lipiec i sierpień odpowiadały za 32.6–34.8% rocznej liczby noclegów, a liczba noclegów w najlepszym miesiącu była od 4.2 do 5.3 razy większa niż w najsłabszym. Współczynnik zmienności wartości miesięcznych wynosił od 50.2% do 57.7%, a współczynnik Giniego od .25 do .29.

Jak opisać analizę statystyczną w pracy

W rozdziale o metodach opisz, gdzie i kiedy zbierano ankiety, jak dobierano respondentów, ile ankiet odrzucono i dlaczego, oraz jak liczono wyniki skal. Poniżej wzór akapitu dla projektów 1–4. Jeśli nie masz pewności, który test pasuje do Twojej hipotezy, skorzystaj z kreatora doboru testu. Gotowe zdania z wynikami w stylu APA przygotuje generator opisu wyników. Pełną ścieżkę od pytania badawczego do rozdziału wyników znajdziesz w przewodniku statystyka w pracy dyplomowej.

Analizy wykonano w programie R. Wyniki skal liczono jako średnią pozycji; rzetelność oceniono współczynnikami alfa Cronbacha i omega McDonalda. Zmienne porządkowe i wyniki skal porównywano między dwiema grupami testem U Manna–Whitneya z korelacją rangowo-biseryjną jako wielkością efektu. Różnice między oceną a ważnością atrybutów sprawdzano testem Wilcoxona dla par, a wartości p skorygowano metodą Holma. Segmenty turystów wyodrębniono analizą skupień k-średnich na standaryzowanych ocenach motywów (50 losowych punktów startowych), a liczbę segmentów wybrano na podstawie średniej szerokości sylwetki. Związek dziennych wydatków z cechami pobytu analizowano regresją liniową logarytmu wydatków z błędami standardowymi HC3; współczynniki przeliczono na zmiany procentowe. Przyjęto poziom istotności α = .05.

Jeśli potrzebujesz pomocy w doborze analiz 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 przepisów 1–4 tworzy własne dane symulowane, więc możesz go uruchomić osobno. Pełnym przykładem od danych do zdania APA jest przepis 3 z regresją wydatków. Kod uruchomiono w R 4.5.3 z ustawieniem LANG=en_US.UTF-8.

1. Projekty 1 i 2: rzetelność skali satysfakcji, test Manna–Whitneya i analiza ważność–ocena (IPA)

Dane wejściowe: 320 turystów, 6 pozycji satysfakcji (1–5), pierwsza albo kolejna wizyta oraz ważność i ocena 8 atrybutów (dane symulowane, set.seed(22401)); pakiety psych i effectsize.

Co odczytać: alfę i omegę, opis wyniku w dwóch grupach, wynik testu Manna–Whitneya (W w R to U dla pierwszej grupy) i rrb z 95% CI; niżej średnie ważności i oceny, lukę, sparowane rrb, p przed korektą i po korekcie Holma oraz ćwiartkę IPA.

R
# Projekt 1: satysfakcja z pobytu i analiza ważność–ocena (IPA) – ankieta wśród turystów (dane symulowane).
# 320 turystów w miejscowości wypoczynkowej: 6 pozycji satysfakcji (1–5), pierwsza wizyta albo powrót,
# a dla 8 atrybutów miejsca – ważność (1–5) i ocena (1–5) od tych samych osób.
suppressPackageStartupMessages({ library(effectsize); library(psych) })
set.seed(22401)
n <- 320
powrot <- factor(sample(c("pierwsza wizyta", "kolejna wizyta"), n, TRUE, prob = c(.55, .45)),
                 levels = c("pierwsza wizyta", "kolejna wizyta"))
cecha <- rnorm(n) + 0.45 * (powrot == "kolejna wizyta")      # ogólne zadowolenie z pobytu
likert <- function(x, progi = c(-1.9, -1.0, -0.1, 0.9)) as.integer(cut(x, c(-Inf, progi, Inf)))
poz <- sapply(c(.80, .75, .70, .65, .72, .60), function(l) likert(l * cecha + sqrt(1 - l^2) * rnorm(n) + 0.35))
colnames(poz) <- c("s1_wypoczynek", "s2_atmosfera", "s3_obsluga", "s4_ceny", "s5_atrakcje", "s6_czystosc")
p1 <- data.frame(id = 1:n, powrot, poz)
p1$satysfakcja <- rowMeans(poz)

# Rzetelność skali: alfa Cronbacha i omega z jednoczynnikowej analizy czynnikowej
alpha(poz)$total[, c("raw_alpha", "std.alpha")]
l <- as.vector(fa(poz, nfactors = 1)$loadings)
round(c(ladunki_min = min(l), ladunki_max = max(l), omega = sum(l)^2 / (sum(l)^2 + sum(1 - l^2))), 2)

# Pierwsza a kolejna wizyta: opis, test Manna–Whitneya, korelacja rangowo-biseryjna
aggregate(satysfakcja ~ powrot, p1, function(x) round(c(n = length(x), M = mean(x), SD = sd(x), Me = median(x),
          Q1 = unname(quantile(x, .25)), Q3 = unname(quantile(x, .75))), 2))
wilcox.test(satysfakcja ~ powrot, data = p1, exact = FALSE)
rank_biserial(satysfakcja ~ powrot, data = p1)

# IPA: ważność i ocena 8 atrybutów u tych samych osób
atr <- c("Czystość plaży i szlaków", "Baza noclegowa", "Gastronomia", "Ceny", "Dojazd i parking",
         "Oferta dla dzieci", "Imprezy i kultura", "Informacja turystyczna")
waz_m <- c(4.5, 4.3, 4.0, 4.2, 3.6, 3.1, 2.9, 3.3)            # średnie „prawdziwe” w populacji
oce_m <- c(3.7, 4.0, 4.1, 3.2, 3.3, 3.8, 3.0, 3.6)
ipa_dane <- do.call(cbind, lapply(seq_along(atr), function(j) {
  w <- pmin(5, pmax(1, round(waz_m[j] + rnorm(n, 0, .8))))
  o <- pmin(5, pmax(1, round(oce_m[j] + 0.3 * cecha + rnorm(n, 0, .8))))
  setNames(data.frame(w, o), paste0(c("waz_", "oce_"), j))
}))
ipa <- do.call(rbind, lapply(seq_along(atr), function(j) {
  w <- ipa_dane[[paste0("waz_", j)]]; o <- ipa_dane[[paste0("oce_", j)]]
  wx <- wilcox.test(o, w, paired = TRUE, exact = FALSE)
  rb <- rank_biserial(o, w, paired = TRUE)
  data.frame(atrybut = atr[j], waznosc = mean(w), ocena = mean(o), luka = mean(o - w),
             r_rb = rb$r_rank_biserial, p = wx$p.value)
}))
ipa$p_holm <- p.adjust(ipa$p, "holm")
srodek <- c(waznosc = mean(ipa$waznosc), ocena = mean(ipa$ocena))
ipa$cwiartka <- with(ipa, ifelse(waznosc >= srodek[1] & ocena < srodek[2], "skup się tutaj",
                       ifelse(waznosc >= srodek[1], "utrzymaj poziom",
                       ifelse(ocena < srodek[2], "niski priorytet", "możliwy nadmiar"))))
round(srodek, 2)
print(transform(ipa, waznosc = round(waznosc, 2), ocena = round(ocena, 2), luka = round(luka, 2),
                r_rb = round(r_rb, 2), p = signif(p, 3), p_holm = signif(p_holm, 3)), row.names = FALSE)
Wynik w R
 raw_alpha std.alpha
 0.8163502 0.8155334
ladunki_min ladunki_max       omega 
       0.55        0.80        0.82 
           powrot satysfakcja.n satysfakcja.M satysfakcja.SD satysfakcja.Me satysfakcja.Q1 satysfakcja.Q3
1 pierwsza wizyta        168.00          3.93           0.63           4.00           3.67           4.33
2  kolejna wizyta        152.00          4.13           0.64           4.17           3.67           4.67

	Wilcoxon rank sum test with continuity correction

data:  satysfakcja by powrot
W = 10580, p-value = 0.00791
alternative hypothesis: true location shift is not equal to 0

r (rank biserial) |         95% CI
----------------------------------
-0.17             | [-0.29, -0.05]
waznosc   ocena 
   3.69    3.65 
                  atrybut waznosc ocena  luka  r_rb        p   p_holm        cwiartka
 Czystość plaży i szlaków    4.42  3.82 -0.61 -0.65 2.27e-18 1.36e-17 utrzymaj poziom
           Baza noclegowa    4.22  4.02 -0.20 -0.22 3.79e-03 1.51e-02 utrzymaj poziom
              Gastronomia    4.03  4.07  0.04  0.05 4.94e-01 4.94e-01 utrzymaj poziom
                     Ceny    4.07  3.36 -0.71 -0.66 1.33e-19 9.34e-19  skup się tutaj
         Dojazd i parking    3.53  3.42 -0.10 -0.10 1.89e-01 3.78e-01 niski priorytet
        Oferta dla dzieci    3.05  3.84  0.79  0.67 1.56e-21 1.25e-20 możliwy nadmiar
        Imprezy i kultura    2.94  3.10  0.16  0.18 1.59e-02 4.78e-02 niski priorytet
   Informacja turystyczna    3.25  3.59  0.34  0.34 3.70e-06 1.85e-05 niski priorytet

2. Projekt 3: segmentacja k-średnich, średnia sylwetka i opis segmentów

Dane wejściowe: 450 turystów, 6 motywów wyjazdu (1–7) i typ noclegu (dane symulowane, set.seed(22402)); pakiety cluster i effectsize.

Co odczytać: liczbę osób na zmienną, średnią sylwetkę dla k = 2–6, sylwetki segmentów, profile na skali 1–7, zgodność z prawdziwym podziałem (znanym tylko w symulacji) oraz tabelę segment × nocleg z testem chi-kwadrat i V Craméra.

R
# Projekt 2: segmentacja turystów według motywów wyjazdu – analiza skupień k-średnich (dane symulowane).
# 450 turystów oceniło 6 motywów wyjazdu (1–7); typ noclegu jako zmienna do opisu segmentów.
suppressPackageStartupMessages({ library(cluster); library(effectsize) })
set.seed(22402)
n <- 450
mot <- c("relaks", "ucieczka", "przygoda", "przyroda", "kultura", "rodzina")
prawdziwy <- sample(1:3, n, TRUE, prob = c(.45, .30, .25))   # segmenty w populacji (nieznane badaczowi)
profil <- rbind(c(6.0, 5.6, 2.8, 4.2, 3.4, 5.6),               # wypoczynkowi i rodzinni
                c(4.0, 4.6, 5.9, 6.0, 3.6, 3.2),               # aktywni w przyrodzie
                c(4.2, 4.2, 3.6, 4.0, 6.1, 3.4))               # zwiedzający
X <- profil[prawdziwy, ] + matrix(rnorm(n * 6, 0, 1.05), n)
X[] <- pmin(7, pmax(1, round(X)))
colnames(X) <- mot
nocleg <- factor(ifelse(runif(n) < c(.25, .55, .30)[prawdziwy], "kemping lub agroturystyka",
                 ifelse(runif(n) < c(.70, .40, .35)[prawdziwy], "pensjonat lub apartament", "hotel")),
                 levels = c("hotel", "pensjonat lub apartament", "kemping lub agroturystyka"))
p2 <- data.frame(id = 1:n, X, nocleg)

cat("osób na zmienną:", n / ncol(X), "\n")              # reguła Dolnicar i in. (2014): co najmniej 70
Z <- scale(X)                                           # standaryzacja motywów
D <- dist(Z)
wyb <- do.call(rbind, lapply(2:6, function(k) {
  set.seed(100 + k)
  km <- kmeans(Z, centers = k, nstart = 50, iter.max = 100)
  data.frame(k = k, sylwetka = mean(silhouette(km$cluster, D)[, "sil_width"]),
             wewn_SS_proc = 100 * km$tot.withinss / km$totss)
}))
print(round(wyb, 3), row.names = FALSE)

k <- wyb$k[which.max(wyb$sylwetka)]; cat("wybrane k:", k, "\n")
set.seed(100 + k)
km <- kmeans(Z, centers = k, nstart = 50, iter.max = 100)
sil <- silhouette(km$cluster, D)
summary(sil)$clus.avg.widths
cat("osób z ujemną sylwetką:", sum(sil[, "sil_width"] < 0), "z", n, "\n")

# Profile segmentów na oryginalnej skali 1–7 (to opisujesz w pracy, nie centroidy z)
prof <- aggregate(X, list(segment = km$cluster), mean)
prof$n <- as.vector(table(km$cluster)); prof$proc <- round(100 * prof$n / n, 1)
print(cbind(prof[1], round(prof[2:7], 2), prof[8:9]), row.names = FALSE)

# Zgodność z segmentami „prawdziwymi” (znane tylko w symulacji)
zg <- table(znaleziony = km$cluster, prawdziwy); zg
cat("zgodność z prawdziwym podziałem (%):", round(100 * sum(apply(zg, 1, max)) / n, 1), "\n")

# Opis segmentów zmienną spoza segmentacji: typ noclegu
p2$segment <- factor(km$cluster)
tab <- table(p2$segment, p2$nocleg); tab
round(100 * prop.table(tab, 1), 1)
ch <- chisq.test(tab); ch
min(ch$expected)
cramers_v(tab, adjust = FALSE)
Wynik w R
osób na zmienną: 75 
 k sylwetka wewn_SS_proc
 2    0.295       66.841
 3    0.312       51.839
 4    0.214       48.061
 5    0.169       45.338
 6    0.166       42.902
wybrane k: 3 
        1         2         3 
0.2805987 0.3427970 0.2877875 
osób z ujemną sylwetką: 0 z 450 
 segment relaks ucieczka przygoda przyroda kultura rodzina   n proc
       1   4.36     4.21     3.68     3.93    6.11    3.31 107 23.8
       2   5.93     5.72     2.76     4.23    3.33    5.64 208 46.2
       3   3.95     4.59     5.68     5.96    3.57    3.19 135 30.0
          prawdziwy
znaleziony   1   2   3
         1   5   6  96
         2 206   0   2
         3   3 126   6
zgodność z prawdziwym podziałem (%): 95.1 
   
    hotel pensjonat lub apartament kemping lub agroturystyka
  1    41                       27                        39
  2    48                      105                        55
  3    33                       29                        73
   
    hotel pensjonat lub apartament kemping lub agroturystyka
  1  38.3                     25.2                      36.4
  2  23.1                     50.5                      26.4
  3  24.4                     21.5                      54.1

	Pearson's Chi-squared test

data:  tab
X-squared = 47.024, df = 4, p-value = 1.508e-09

[1] 29.00889
Cramer's V |       95% CI
-------------------------
0.23       | [0.17, 1.00]

- One-sided CIs: upper bound fixed at [1.00].

3. Projekt 4: regresja logarytmu wydatków z błędami HC3 i poprawka smearing – pełny przykład

Dane wejściowe: 400 turystów: wydatki na osobę dziennie, noclegi, wielkość grupy, typ noclegu, wiek i pierwsza wizyta (dane symulowane, set.seed(22403)); pakiety sandwich i lmtest.

Co odczytać: opis i skośność wydatków, diagnostykę modelu na złotych, R² i F modelu na logarytmie, współczynniki z SE HC3 i zmianę procentową z 95% CI oraz prognozy bez poprawki i z poprawką smearing.

R
# Projekt 3: od czego zależą dzienne wydatki turysty – regresja na logarytmie wydatków (dane symulowane).
# 400 turystów: wydatki na osobę dziennie (zł, bez dojazdu), liczba noclegów, wielkość grupy, typ noclegu,
# wiek i pierwsza wizyta.
suppressPackageStartupMessages({ library(sandwich); library(lmtest) })
set.seed(22403)
n <- 400
noclegi <- pmin(14, 1 + rpois(n, 4))
grupa <- sample(1:6, n, TRUE, prob = c(.15, .35, .15, .2, .1, .05))
nocleg <- factor(sample(c("pensjonat lub apartament", "hotel", "kemping lub agroturystyka"), n, TRUE, prob = c(.45, .3, .25)),
                 levels = c("pensjonat lub apartament", "hotel", "kemping lub agroturystyka"))
wiek <- round(pmin(75, pmax(18, rnorm(n, 41, 13))))
pierwsza <- rbinom(n, 1, .55)
log_w <- 5.45 - 0.035 * noclegi - 0.07 * (grupa - 1) + 0.38 * (nocleg == "hotel") -
  0.42 * (nocleg == "kemping lub agroturystyka") + 0.004 * (wiek - 41) + 0.10 * pierwsza +
  rnorm(n, 0, 0.45 + 0.08 * (nocleg == "hotel"))
p3 <- data.frame(id = 1:n, wydatki = round(exp(log_w)), noclegi, grupa, nocleg, wiek, pierwsza)

round(c(M = mean(p3$wydatki), SD = sd(p3$wydatki), Me = median(p3$wydatki), min = min(p3$wydatki),
        max = max(p3$wydatki), skosnosc = psych::skew(p3$wydatki), skosnosc_log = psych::skew(log(p3$wydatki))), 2)

# Model na surowych złotych: reszty skośne i heteroskedastyczne
m_zl <- lm(wydatki ~ noclegi + grupa + nocleg + wiek + pierwsza, data = p3)
round(c(R2_adj = summary(m_zl)$adj.r.squared, skosnosc_reszt = psych::skew(resid(m_zl))), 3)
bptest(m_zl)

# Model na logarytmie wydatków z błędami odpornymi HC3
m_log <- lm(log(wydatki) ~ noclegi + grupa + nocleg + wiek + pierwsza, data = p3)
round(c(R2 = summary(m_log)$r.squared, R2_adj = summary(m_log)$adj.r.squared, skosnosc_reszt = psych::skew(resid(m_log))), 3)
summary(m_log)$fstatistic
bptest(m_log)
ct <- coeftest(m_log, vcov = vcovHC(m_log, type = "HC3"))
ci <- coefci(m_log, vcov = vcovHC(m_log, type = "HC3"))
wyn <- data.frame(b = ct[, 1], SE_HC3 = ct[, 2], t = ct[, 3], p = ct[, 4],
                  zmiana_proc = 100 * (exp(ct[, 1]) - 1),
                  CI_d = 100 * (exp(ci[, 1]) - 1), CI_g = 100 * (exp(ci[, 2]) - 1))
print(round(wyn[-1, ], 3))
signif(wyn$p[-1], 3)
df.residual(m_log)

# Prognoza średnich wydatków: zwykłe exp() zaniża średnią, poprawka smearing Duana (1983)
profil <- data.frame(noclegi = 4, grupa = 2, nocleg = "hotel", wiek = 41, pierwsza = 1)
smear <- mean(exp(resid(m_log)))
round(c(exp_prognozy = unname(exp(predict(m_log, profil))), smearing = smear,
        prognoza_smearing = unname(exp(predict(m_log, profil))) * smear), 3)
round(c(srednia_w_danych = mean(p3$wydatki), srednia_exp_prognoz = mean(exp(fitted(m_log))),
        srednia_smearing = mean(exp(fitted(m_log)) * smear)), 1)
Wynik w R
           M           SD           Me          min          max     skosnosc skosnosc_log 
      227.58       140.46       189.00        41.00       906.00         1.64         0.11 
        R2_adj skosnosc_reszt 
         0.257          1.599 

	studentized Breusch-Pagan test

data:  m_zl
BP = 19.951, df = 6, p-value = 0.002825

            R2         R2_adj skosnosc_reszt 
         0.335          0.325         -0.035 
    value     numdf     dendf 
 32.99847   6.00000 393.00000 

	studentized Breusch-Pagan test

data:  m_log
BP = 8.1414, df = 6, p-value = 0.2279

                                     b SE_HC3      t     p zmiana_proc    CI_d    CI_g
noclegi                         -0.039  0.012 -3.203 0.001      -3.793  -6.049  -1.482
grupa                           -0.058  0.016 -3.596 0.000      -5.624  -8.564  -2.590
nocleghotel                      0.338  0.056  6.033 0.000      40.268  25.622  56.620
noclegkemping lub agroturystyka -0.450  0.057 -7.848 0.000     -36.241 -43.039 -28.632
wiek                             0.004  0.002  2.048 0.041       0.382   0.015   0.750
pierwsza                         0.045  0.048  0.954 0.341       4.649  -4.706  14.923
[1] 1.47e-03 3.64e-04 3.72e-09 4.04e-14 4.12e-02 3.41e-01
[1] 393
     exp_prognozy          smearing prognoza_smearing 
          297.955             1.113           331.741 
   srednia_w_danych srednia_exp_prognoz    srednia_smearing 
              227.6               203.5               226.6 

4. Projekty 5 i 6: NPS z przedziałem bootstrapowym i wskaźniki sezonowości

Dane wejściowe: 340 gości dwóch ośrodków (gotowość polecenia 0–10) i noclegi w obiekcie przez 36 miesięcy (dane symulowane, set.seed(22404) i set.seed(22405)); pakiet effectsize.

Co odczytać: odsetki kategorii, NPS z przedziałem ze wzoru i bootstrapowym, różnicę NPS z 95% CI, test Manna–Whitneya na pełnej skali, indeksy sezonowości miesięcy i roczne wskaźniki koncentracji.

R
# Projekt 4: NPS dwóch ośrodków rekreacyjnych – przedział bootstrapowy i analiza pełnej skali 0–10.
# Projekt 5: sezonowość noclegów w obiekcie – wskaźniki opisowe (dane symulowane).
suppressPackageStartupMessages(library(effectsize))
set.seed(22404)
pk <- function(pr) sample(0:10, 1, prob = pr)
pr_A <- c(1, 1, 1, 2, 2, 4, 6, 12, 20, 25, 26)                 # rozkład odpowiedzi 0–10 w ośrodku A
pr_B <- c(1, 1, 1, 2, 3, 6, 9, 17, 22, 21, 17)                 # w ośrodku B
p4 <- data.frame(osrodek = factor(rep(c("A", "B"), c(180, 160))),
                 polecenie = c(sample(0:10, 180, TRUE, pr_A), sample(0:10, 160, TRUE, pr_B)))
p4$kategoria <- cut(p4$polecenie, c(-1, 6, 8, 10), labels = c("krytycy (0–6)", "neutralni (7–8)", "promotorzy (9–10)"))
nps <- function(x) 100 * (mean(x >= 9) - mean(x <= 6))
round(100 * prop.table(table(p4$osrodek, p4$kategoria), 1), 1)
tapply(p4$polecenie, p4$osrodek, nps)

# 95% CI dla NPS: wzór z rozkładu wielomianowego i bootstrap percentylowy (5000 powtórzeń)
ci_wzor <- function(x) { pp <- mean(x >= 9); pd <- mean(x <= 6); s <- nps(x)
  se <- 100 * sqrt((pp + pd - (pp - pd)^2) / length(x)); c(NPS = s, lo = s - 1.96 * se, hi = s + 1.96 * se) }
t(sapply(split(p4$polecenie, p4$osrodek), ci_wzor))
xA <- p4$polecenie[p4$osrodek == "A"]; xB <- p4$polecenie[p4$osrodek == "B"]
set.seed(224)
b <- replicate(5000, { a <- sample(xA, replace = TRUE); bb <- sample(xB, replace = TRUE); c(nps(a), nps(bb), nps(a) - nps(bb)) })
wyn_b <- rbind(A = quantile(b[1, ], c(.025, .975)), B = quantile(b[2, ], c(.025, .975)), roznica = quantile(b[3, ], c(.025, .975)))
cbind(oszacowanie = c(nps(xA), nps(xB), nps(xA) - nps(xB)), round(wyn_b, 1))

# Ta sama porównywana różnica na pełnej skali 0–10
aggregate(polecenie ~ osrodek, p4, function(x) round(c(n = length(x), M = mean(x), SD = sd(x), Me = median(x)), 2))
wilcox.test(polecenie ~ osrodek, data = p4, exact = FALSE)
rank_biserial(polecenie ~ osrodek, data = p4)

# Projekt 5: noclegi w obiekcie miesiąc po miesiącu przez 3 lata
set.seed(22405)
mies <- c("sty", "lut", "mar", "kwi", "maj", "cze", "lip", "sie", "wrz", "paź", "lis", "gru")
wzor <- c(.85, .95, .55, .60, .80, 1.25, 1.95, 2.05, 1.00, .60, .45, .95)   # profil sezonu
p5 <- data.frame(rok = rep(1:3, each = 12), miesiac = factor(rep(mies, 3), levels = mies))
p5$noclegi <- round(rnorm(36, 1500 * rep(wzor, 3) * (1 + 0.05 * (p5$rok - 1)), 90))
indeks <- 100 * tapply(p5$noclegi, p5$miesiac, mean) / mean(p5$noclegi)    # indeks sezonowości (średnia = 100)
round(indeks)
roczne <- sapply(split(p5$noclegi, p5$rok), function(x) {
  s <- sort(x); n <- length(s)
  c(suma = sum(x), max_min = max(x) / min(x), CV_proc = 100 * sd(x) / mean(x),
    udzial_lip_sie = 100 * sum(x[7:8]) / sum(x),
    gini = sum((2 * seq_len(n) - n - 1) * s) / (n * sum(s)))
})
round(roczne, 2)
Wynik w R
   
    krytycy (0–6) neutralni (7–8) promotorzy (9–10)
  A          17.2            33.3              49.4
  B          20.0            40.6              39.4
       A        B 
32.22222 19.37500 
       NPS        lo       hi
A 32.22222 21.262183 43.18226
B 19.37500  7.818779 30.93122
        oszacowanie 2.5% 97.5%
A          32.22222 21.7  43.3
B          19.37500  8.1  30.6
roznica    12.84722 -3.1  29.1
  osrodek polecenie.n polecenie.M polecenie.SD polecenie.Me
1       A      180.00        7.88         2.25         8.00
2       B      160.00        7.68         2.09         8.00

	Wilcoxon rank sum test with continuity correction

data:  polecenie by osrodek
W = 15802, p-value = 0.1145
alternative hypothesis: true location shift is not equal to 0

r (rank biserial) |        95% CI
---------------------------------
0.10              | [-0.03, 0.22]
sty lut mar kwi maj cze lip sie wrz paź lis gru 
 86  95  53  59  74 127 193 208 101  62  45  98 
                      1        2        3
suma           18201.00 18731.00 19446.00
max_min            4.17     5.27     4.57
CV_proc           50.39    57.73    50.19
udzial_lip_sie    32.61    34.82    32.80
gini               0.26     0.29     0.25

5. Rysunki i plik XLSX

Dane wejściowe: wyniki przepisów 1–4 (wczytywane przez source() z tego samego folderu); pakiety ggplot2, svglite, patchwork i openxlsx. Motyw rysunków i funkcja zapisu SVG są zdefiniowane w kodzie.

Co odczytać: wartości użyte na rysunkach, liczbę wierszy w arkuszach zapisanego pliku i jego rozmiar.

R
# Rysunki i plik XLSX do wpisu (uruchom z folderu kod/): LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 Rscript b224-rysunki.R > b224-rysunki-wynik.txt
suppressPackageStartupMessages({ library(ggplot2); library(svglite); library(patchwork); library(openxlsx) })
pdf(NULL)
invisible(capture.output({ for (f in c("b224-1-satysfakcja-ipa.R", "b224-2-segmentacja.R", "b224-3-wydatki.R",
                                         "b224-4-nps-sezonowosc.R")) source(f) }))
# Motyw rysunków i zapis SVG zdefiniowane lokalnie
KOLORY <- c(akcent = "#e50101", drugi = "#1f78b4", trzeci = "#7CAE00", granat = "#0f1d3a", neutralny = "#8C8C8C")
theme_metodolog <- function(base_size = 13) {
  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 = .4),
          axis.title = element_text(colour = "grey20"), axis.text = element_text(colour = "grey25"),
          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(plik, width = szer, height = wys, bg = "white"); print(wykres); invisible(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)))
}

# Rysunek 1: siatka ważność–ocena (IPA) dla 8 atrybutów miejscowości
d1 <- ipa
d1$istotna <- ifelse(d1$p_holm < .05, "luka ocena − ważność istotna (Holm)", "luka nieistotna")
print(d1[, c("atrybut", "waznosc", "ocena", "luka", "p_holm")], digits = 3, row.names = FALSE)
r1 <- ggplot(d1, aes(waznosc, ocena)) +
  geom_abline(slope = 1, intercept = 0, linetype = 3, colour = "grey55") +
  geom_vline(xintercept = srodek[["waznosc"]], linetype = 2, colour = "grey50") +
  geom_hline(yintercept = srodek[["ocena"]], linetype = 2, colour = "grey50") +
  geom_point(aes(colour = istotna), size = 3.6) +
  geom_text(aes(y = ocena + ifelse(atrybut == "Informacja turystyczna", -.07, .07), label = atrybut), size = 3.6, colour = "grey15") +
  annotate("text", x = c(4.62, 4.62, 3.12, 2.82), y = c(3.02, 4.27, 3.02, 4.27), hjust = c(1, 1, 0, 0), size = 3.6,
           fontface = "bold", colour = KOLORY[["granat"]],
           label = c("skup się tutaj", "utrzymaj poziom", "niski priorytet", "możliwy nadmiar")) +
  annotate("text", x = 4.05, y = 4.3, label = "ocena = ważność", colour = "grey45", size = 3.2, angle = 28) +
  scale_colour_manual(values = c(KOLORY[["akcent"]], KOLORY[["neutralny"]]),
                      breaks = c("luka ocena − ważność istotna (Holm)", "luka nieistotna"), name = NULL) +
  scale_x_continuous(limits = c(2.8, 4.65), breaks = seq(3, 4.5, .5)) +
  scale_y_continuous(limits = c(3.0, 4.35), breaks = seq(3, 4.25, .25)) +
  labs(title = "Analiza ważność–ocena (IPA) w ankiecie turystów (n = 320)",
       subtitle = "Linie przerywane: średnia ważność i średnia ocena wszystkich atrybutów; kropkowana: ocena równa ważności",
       x = "Średnia ważność atrybutu (1–5)", y = "Średnia ocena atrybutu (1–5)") + theme_metodolog(13)
zapisz_svg(r1, "../statystyka-turystyka-ipa.svg", szer = 10, wys = 6)

# Rysunek 2: wybór liczby segmentów (średnia sylwetka) i profile motywów
print(round(wyb, 3), row.names = FALSE)
r2a <- ggplot(wyb, aes(k, sylwetka)) + geom_line(colour = KOLORY[["drugi"]], linewidth = 1) +
  geom_point(aes(colour = k == 3), size = 3.4, show.legend = FALSE) +
  geom_text(aes(label = sub("^0", "", sprintf("%.2f", sylwetka))), nudge_y = .014, size = 3.6) +
  scale_colour_manual(values = c(`TRUE` = KOLORY[["akcent"]], `FALSE` = KOLORY[["drugi"]])) +
  scale_y_continuous(limits = c(.14, .34), labels = function(x) sub("^0", "", sprintf("%.2f", x))) +
  labs(title = "A. Średnia sylwetka dla k = 2–6", subtitle = "k-średnich na standaryzowanych motywach",
       x = "Liczba segmentów (k)", y = "Średnia szerokość sylwetki") + theme_metodolog(12)
nazwy <- c(`1` = "zwiedzający", `2` = "wypoczynkowi i rodzinni", `3` = "aktywni w przyrodzie")
d2 <- do.call(rbind, lapply(mot, function(v) data.frame(motyw = v, segment = paste0(nazwy[as.character(prof$segment)], " (", sprintf("%.1f", prof$proc), "%)"),
                                                     M = prof[[v]])))
d2$motyw <- factor(d2$motyw, levels = rev(mot))
print(d2, digits = 3, row.names = FALSE)
r2b <- ggplot(d2, aes(M, motyw, colour = segment, group = segment)) +
  geom_path(linewidth = .8, alpha = .7) + geom_point(size = 3) +
  scale_colour_manual(values = c(KOLORY[["drugi"]], KOLORY[["akcent"]], KOLORY[["trzeci"]]), name = NULL) +
  scale_x_continuous(limits = c(1, 7), breaks = 1:7) + guides(colour = guide_legend(nrow = 2)) +
  labs(title = "B. Profile segmentów", subtitle = "Średnie motywów na skali 1–7 (n = 450)", x = "Średnia ocena motywu", y = NULL) +
  theme_metodolog(12)
zapisz_svg(r2a + r2b + plot_layout(widths = c(1, 1.25)), "../statystyka-turystyka-segmenty.svg", szer = 10, wys = 5.4)

# Plik XLSX z danymi do pobrania
wb <- createWorkbook(creator = "Metodolog.pl", title = "Statystyka w pracy z turystyki i rekreacji – dane przykładowe")
setLastModifiedBy(wb, "Metodolog.pl")
opis <- data.frame(arkusz = c("P1_satysfakcja", "P1_IPA", "P2_motywy", "P3_wydatki", "P4_NPS", "P5_sezonowosc"),
  zawartosc = c("320 turystów: 6 pozycji satysfakcji (1–5), wynik skali i pierwsza albo kolejna wizyta",
                "te same 320 osoby: ważność (waz_1–waz_8) i ocena (oce_1–oce_8) ośmiu atrybutów miejscowości, skala 1–5",
                "450 turystów: 6 motywów wyjazdu (1–7), typ noclegu i segment z analizy k-średnich",
                "400 turystów: wydatki na osobę dziennie (zł), noclegi, wielkość grupy, typ noclegu, wiek, pierwsza wizyta (1 = tak)",
                "340 gości dwóch ośrodków rekreacyjnych: gotowość polecenia 0–10 i kategoria NPS",
                "noclegi w obiekcie w kolejnych miesiącach trzech lat"),
  uwaga = "Dane symulowane do nauki analizy; nie pochodzą z prawdziwego badania.")
atr_kody <- data.frame(kod = 1:8, atrybut = atr)
arkusze <- list(Opis = opis, P1_satysfakcja = p1, P1_IPA = cbind(id = 1:nrow(ipa_dane), ipa_dane),
                P2_motywy = p2, P3_wydatki = p3, P4_NPS = p4, P5_sezonowosc = p5)
for (nm in names(arkusze)) { addWorksheet(wb, nm); writeData(wb, nm, arkusze[[nm]]) }
writeData(wb, "Opis", atr_kody, startRow = nrow(opis) + 3)
saveWorkbook(wb, "../statystyka-turystyka-dane-przyklad.xlsx", overwrite = TRUE)
sapply(getSheetNames("../statystyka-turystyka-dane-przyklad.xlsx"), function(s) nrow(read.xlsx("../statystyka-turystyka-dane-przyklad.xlsx", s)))
cat("rozmiar KB:", round(file.info("../statystyka-turystyka-dane-przyklad.xlsx")$size / 1024), "\n")
Wynik w R
                  atrybut waznosc ocena    luka   p_holm
 Czystość plaży i szlaków    4.42  3.82 -0.6062 1.36e-17
           Baza noclegowa    4.22  4.02 -0.1969 1.51e-02
              Gastronomia    4.03  4.07  0.0438 4.94e-01
                     Ceny    4.07  3.36 -0.7094 9.34e-19
         Dojazd i parking    3.53  3.42 -0.1031 3.78e-01
        Oferta dla dzieci    3.05  3.84  0.7906 1.25e-20
        Imprezy i kultura    2.94  3.10  0.1594 4.78e-02
   Informacja turystyczna    3.25  3.59  0.3406 1.85e-05
Zapisano ../statystyka-turystyka-ipa.svg: w HTML width="1000" height="600" (9 KB)
 k sylwetka wewn_SS_proc
 2    0.295       66.841
 3    0.312       51.839
 4    0.214       48.061
 5    0.169       45.338
 6    0.166       42.902
    motyw                         segment    M
   relaks             zwiedzający (23.8%) 4.36
   relaks wypoczynkowi i rodzinni (46.2%) 5.93
   relaks    aktywni w przyrodzie (30.0%) 3.95
 ucieczka             zwiedzający (23.8%) 4.21
 ucieczka wypoczynkowi i rodzinni (46.2%) 5.72
 ucieczka    aktywni w przyrodzie (30.0%) 4.59
 przygoda             zwiedzający (23.8%) 3.68
 przygoda wypoczynkowi i rodzinni (46.2%) 2.76
 przygoda    aktywni w przyrodzie (30.0%) 5.68
 przyroda             zwiedzający (23.8%) 3.93
 przyroda wypoczynkowi i rodzinni (46.2%) 4.23
 przyroda    aktywni w przyrodzie (30.0%) 5.96
  kultura             zwiedzający (23.8%) 6.11
  kultura wypoczynkowi i rodzinni (46.2%) 3.33
  kultura    aktywni w przyrodzie (30.0%) 3.57
  rodzina             zwiedzający (23.8%) 3.31
  rodzina wypoczynkowi i rodzinni (46.2%) 5.64
  rodzina    aktywni w przyrodzie (30.0%) 3.19
Zapisano ../statystyka-turystyka-segmenty.svg: w HTML width="1000" height="540" (16 KB)
          Opis P1_satysfakcja         P1_IPA      P2_motywy     P3_wydatki 
            15            320            320            450            400 
        P4_NPS  P5_sezonowosc 
           340             36 
rozmiar KB: 75 

Bibliografia oprogramowania

Wyniki na tej stronie pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje wilcox.test(), kmeans(), chisq.test(), lm() i p.adjust() z pakietów stats i base); rysunki przygotowano w pakietach ggplot2, patchwork i svglite. 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. 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
  3. 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
  4. 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
  5. sandwich (wersja 3.1.1): Zeileis, A., Köll, S., & Graham, N. (2020). Various versatile variances: An object-oriented implementation of clustered covariances in R. Journal of Statistical Software, 95(1), 1–36. https://doi.org/10.18637/jss.v095.i01
  6. lmtest (wersja 0.9.40): Zeileis, A., & Hothorn, T. (2002). Diagnostic checking in regression relationships. R News, 2(3), 7–10. https://CRAN.R-project.org/doc/Rnews/
  7. 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
  8. ggplot2 (wersja 4.0.2): Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer. https://ggplot2.tidyverse.org
  9. patchwork (wersja 1.3.2): Pedersen, T. L. (2025). patchwork: The composer of plots [R package]. https://doi.org/10.32614/CRAN.package.patchwork
  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]. https://doi.org/10.32614/CRAN.package.svglite

Najczęstsze błędy w analizach prac z turystyki i rekreacji

  • Uogólnianie ankiety „na miejscu” na wszystkich turystów regionu, bez opisu terminu, miejsca i sposobu doboru respondentów.
  • Badanie tylko w szczycie sezonu i wnioski o „turystach” w ogóle.
  • Kilka ankiet od jednej rodziny traktowanych jak niezależne osoby, a wydatki grupy liczone jak wydatki jednej osoby.
  • Wnioskowanie z samej ćwiartki IPA, bez tabeli luk i bez testu dla par.
  • Segmentacja na zbyt małej próbie i testowanie różnic w motywach między segmentami utworzonymi z tych samych motywów.
  • Regresja na surowych złotych przy silnie skośnych wydatkach albo interpretacja współczynnika z modelu na logarytmie tak, jakby był w złotych.
  • Prognoza wydatków przez samo ex bez poprawki, która zaniża średnią.
  • NPS bez przedziału ufności i ogłaszanie, że ośrodek A „wygrywa” różnicą kilkunastu punktów przy kilkuset ankietach.
  • Wniosek przyczynowy z badania przekrojowego, np. „powrót do miejscowości zwiększa satysfakcję”.

Najczęstsze pytania

Jakie analizy statystyczne wybrać do pracy magisterskiej z turystyki i rekreacji?

To zależy od pytania. Satysfakcję dwóch grup turystów porównasz testem Manna–Whitneya (albo testem t, gdy wynik skali ma wiele wartości i zbliżony do normalnego rozkład), ważność i ocenę atrybutów – testem Wilcoxona dla par z korektą Holma, motywy wyjazdu – analizą skupień, a wydatki – regresją na logarytmie wydatków. Do każdej analizy dodaj wielkość efektu i opis próby: gdzie, kiedy i jak zbierano ankiety.

Jak przeprowadzić analizę IPA (ważność–ocena) w pracy dyplomowej?

Dla każdego atrybutu policz średnią ważność i średnią ocenę, umieść je na wykresie i podziel go liniami przez średnie wszystkich atrybutów. Obok wykresu podaj tabelę luk (ocena minus ważność) z testem Wilcoxona dla par i korektą Holma, bo położenie linii podziału jest umowne, a ćwiartka nie mówi, jak duża jest luka.

Ilu turystów potrzeba do segmentacji metodą k-średnich?

W symulacji Dolnicar i in. (2014) we wszystkich badanych warunkach wystarczała próba równa 70-krotności liczby zmiennych użytych do segmentacji, czyli 420 osób przy sześciu motywach. Przy mniejszej próbie ogranicz liczbę zmiennych albo przedstaw segmentację jako analizę wstępną i sprawdź, czy podobne segmenty powstają na losowej połowie próby.

Jak zinterpretować współczynnik regresji, gdy zmienną zależną są zlogarytmowane wydatki?

Przelicz go na zmianę procentową wzorem 100 × (eb − 1). Na przykład b = 0.338 dla hotelu oznacza wydatki wyższe o około 40% niż w kategorii odniesienia przy pozostałych zmiennych stałych. Do prognozy w złotych użyj poprawki smearing Duana, bo samo ex z prognozy zaniża średnią.

Czy NPS wystarczy jako miara lojalności turystów w pracy?

Może być jedną z miar, ale nie jedyną. NPS powstaje z trzech kategorii (0–6, 7–8, 9–10), więc traci informację, a przy kilkuset ankietach ma szeroki przedział ufności. Podaj go z 95% CI (np. bootstrapowym), a porównania grup wykonaj także na pełnej skali 0–10. Jego przewaga nad innymi miarami lojalności nie została potwierdzona w badaniu Keininghama i in. (2007).

Powiązane hasła

Przeczytaj też

Piszesz pracę z turystyki i rekreacji i masz ankiety turystów, ale nie wiesz, jak je policzyć?

Pomożemy dobrać analizy do Twojego badania – od satysfakcji i IPA po segmentację i regresję wydatków – 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. Azzopardi, E., & Nash, R. (2013). A critical evaluation of importance–performance analysis. Tourism Management, 35, 222–233. https://doi.org/10.1016/j.tourman.2012.07.007
  2. Brida, J. G., & Scuderi, R. (2013). Determinants of tourist expenditure: A review of microeconometric models. Tourism Management Perspectives, 6, 28–40. https://doi.org/10.1016/j.tmp.2012.10.006 ● Otwarty dostęp: pełny tekst
  3. Dolnicar, S., Grün, B., Leisch, F., & Schmidt, K. (2014). Required sample sizes for data-driven market segmentation analyses in tourism. Journal of Travel Research, 53(3), 296–306. https://doi.org/10.1177/0047287513496475 ● Otwarty dostęp
  4. Duan, N. (1983). Smearing estimate: A nonparametric retransformation method. Journal of the American Statistical Association, 78(383), 605–610. https://doi.org/10.1080/01621459.1983.10478017
  5. 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
  6. Koenig-Lewis, N., & Bischoff, E. E. (2005). Seasonality research: The state of the art. International Journal of Tourism Research, 7(4–5), 201–219. https://doi.org/10.1002/jtr.531
  7. Long, J. S., & Ervin, L. H. (2000). Using heteroscedasticity consistent standard errors in the linear regression model. The American Statistician, 54(3), 217–224. https://doi.org/10.1080/00031305.2000.10474549
  8. Martilla, J. A., & James, J. C. (1977). Importance-performance analysis. Journal of Marketing, 41(1), 77–79. https://doi.org/10.1177/002224297704100112
  9. Rousseeuw, P. J. (1987). Silhouettes: A graphical aid to the interpretation and validation of cluster analysis. Journal of Computational and Applied Mathematics, 20, 53–65. https://doi.org/10.1016/0377-0427(87)90125-7 ● Otwarty dostęp

Cytowania BibTeX

@article{azzopardi2013critical, author={Azzopardi, Ernest and Nash, Robert}, title={{A critical evaluation of importance–performance analysis}}, journal={Tourism Management}, year={2013}, volume={35}, pages={222--233}, doi={10.1016/j.tourman.2012.07.007}}
@article{brida2013determinants, author={Brida, Juan Gabriel and Scuderi, Raffaele}, title={{Determinants of tourist expenditure: A review of microeconometric models}}, journal={Tourism Management Perspectives}, year={2013}, volume={6}, pages={28--40}, doi={10.1016/j.tmp.2012.10.006}}
@article{dolnicar2014required, author={Dolnicar, Sara and Grün, Bettina and Leisch, Friedrich and Schmidt, Kathrin}, title={{Required sample sizes for data-driven market segmentation analyses in tourism}}, journal={Journal of Travel Research}, year={2014}, volume={53}, number={3}, pages={296--306}, doi={10.1177/0047287513496475}}
@article{duan1983smearing, author={Duan, Naihua}, title={{Smearing estimate: A nonparametric retransformation method}}, journal={Journal of the American Statistical Association}, year={1983}, volume={78}, number={383}, pages={605--610}, doi={10.1080/01621459.1983.10478017}}
@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{koeniglewis2005seasonality, author={Koenig-Lewis, Nicole and Bischoff, Eberhard E.}, title={{Seasonality research: The state of the art}}, journal={International Journal of Tourism Research}, year={2005}, volume={7}, number={4–5}, pages={201--219}, doi={10.1002/jtr.531}}
@article{long2000using, author={Long, J. Scott and Ervin, Laurie H.}, title={{Using heteroscedasticity consistent standard errors in the linear regression model}}, journal={The American Statistician}, year={2000}, volume={54}, number={3}, pages={217--224}, doi={10.1080/00031305.2000.10474549}}
@article{martilla1977importance, author={Martilla, John A. and James, John C.}, title={{Importance-performance analysis}}, journal={Journal of Marketing}, year={1977}, volume={41}, number={1}, pages={77--79}, doi={10.1177/002224297704100112}}
@article{rousseeuw1987silhouettes, author={Rousseeuw, Peter J.}, title={{Silhouettes: A graphical aid to the interpretation and validation of cluster analysis}}, journal={Journal of Computational and Applied Mathematics}, year={1987}, volume={20}, pages={53--65}, doi={10.1016/0377-0427(87)90125-7}}
R