Interaktyvus pratimas nr. 11. Statistinė duomenų analizė

Šiame interaktyviame pratime pasistengsime suprasti kai kuriuos aspektus iš statistinės duomenų analizės. Pamatysime kaip galime nustatyti priklausomybę tarp dviejų kintamųjų, kaip sukurti likimybinį modelį prognozei atlikti bei kaip grafiškai įvertinti gauto modelio kokybę.

I dalis. Duomenų generavimas. Pirsono koreliacijos koeficientas

Nagrinėsime žaislinį pavyzdį. Pradžioje sugeneruosime 1000 stebėjimų, pasiskirsčiusių pagal standartinį normalųjį skirstinį , t.y. tokį, kurio vidurkis , o dispersija . Tai bus kintamasis x. Kintamajam y sukurti kurso klausytojai gali parinkti tris koeficientus . MATLAB apskaičiuos , t.y. vektorių sudaro 1000 stebėjimų, o ε yra paklaida, kurios dydį taip pat galite pasirinkti intervale . MATLAB taip pat pavaizduos visus gautus taškus , čia .
Galite pasirinkti koeficientus ir paklaidos koeficientą . Žemiau vaizduojama sugeneruotų duomenų sklaidos diagrama.
x = randn([1 1000]);
a = 2.2;
b = -2;
c = 3;
epsilon = 0.39;
err = 1 + epsilon * randn([1 1000]);
y = a*x.^2 + b*x + c * err;
figure
scatter(x, y)
hold on
Vienas iš svarbiausių statistinių rodiklių yra Pirsono koreliacijos koeficientas, kuris parodo ar kintamieji x ir y yra susieti tiesiniu ryšiu. Pagal nusistovėjusias tradicijas tiesinio ryšio stiprumas remiantis Pirsono koeficientu yra
Reikia pastebėti, kad koreliacijos koeficientas gali nurodyti tik tiesinio ryšio stiprumą, tačiau negali vertinti ryšio priežastingumo.
Nustatykite mažą paklaidą bei fiksuote koeficientus b ir c. Keiskite koeficientą a ir stebėkite, kaip keičiasi Pirsono koreliacijos koeficientas. Taip pat pabandykite fiksuoti koeficientus ir stebėkite, kaip koreliacijos koeficientas priklauso nuo paklaidos.
rho = corrcoef(x, y);
disp(['Pirsono koreliacijos koeficientas tarp kintamųjų x ir y yra: ' num2str(rho(1,2), 3)])
Pirsono koreliacijos koeficientas tarp kintamųjų x ir y yra: -0.568

II dalis. Tiesinė regresija

Šioje dalyje atliekama tiesinė regresija, t.y. ieškoma tiesės lygtis, kuri sieja kintamuosius x ir y. MATLAB apskaičiuoja tiesės koefcientų b ir c taškinius įverčius taip, kad mažiausių kvadratų metodo prasme modelio paklaida būtų mažiausia. Iš Tikimybių Teorijos ir Statistikos kurso yra žinomos šių įverčių išraiškos:
čia yra Pirsono koreliacijos koeficientas, o ir yra empiriniai pataisytieji standartiniai nuokrypiai.
Tikimybinio modelio tikslumas gali būti vertinamas grafiškai. Kuo arčiau nubrėžtos tiesės yra pavaizduoti duomenys, tuo modelis yra geresnis. Siūlome išbandyti kelis variantus (pagal tiesinio ryšio stiprumą) ir įvertinti, kaip keičiasi modelio adekvatumas.
Žemiau nubraižytas gautos tiesės grafikas, kad galetumėte grafiškai įvertinti, ar apskaičiuotas tikimybinis modelis tinka sugeneruotiems duomenims. Taip pat palyginimui pateiksime jūsų pasirinktus koeficientus ir MATLAB paketo apskaičiuotus įverčius.
coeffs = polyfit(x,y,1);
lr = polyval(coeffs, x);
plot(x, lr);
disp(['Jūsų pasirinkti koeficientai buvo: a = ' num2str(a) ', b = ' num2str(b) ', c = ' num2str(c)]);
Jūsų pasirinkti koeficientai buvo: a = 2.2, b = -2, c = 3
disp(['Koeficientų taškiniai įverčiai buvo: b = ' num2str(coeffs(1)) ', c = ' num2str(coeffs(2))]);
Koeficientų taškiniai įverčiai buvo: b = -2.3066, c = 5.1668

III dalis. Interpoliacijos uždavinys

Šioje dalyje nagrinėsime interpoliacijos uždavinį, t.y. bandysime priklausomybę tarp kintamųjų x ir y aprašyti daugianariu. Paprastumo dėlei apsiribosime kvadratiniu daugianariu. Taigi, šioje interaktyvaus pratimo dalyje MATLAB apskaičiuoja parabolės koefcientų ir c taškinius įverčius taip, kad mažiausių kvadratų metodo prasme modelio paklaida būtų mažiausia. Tam MATLAB naudoja Vandermondo matricas, apie kurias kalbėjome paskaitoje apie matricų taikymus. Praktikoje tuo atveju, kai sukurto modelio kokybė yra prasta, galima spręsti kelis interpoliacijos uždavinius keičiant daugianario eilę. Tokiu būdu analitikas gali pasirinkti optimaliausią variantą.
Šio kurso klausytojus siūlome įvertinti abiejų modelių adekvatumą ir pasirinkti geresnį modelį. tam tikslui žemiau bus nubraižytas gautų tiesės ir parabolės grafikai, kad galetumėte grafiškai palyginti modelių kokybę. Taip pat palyginimui pateiksime jūsų pasirinktus koeficientus ir MATLAB paketo apskaičiuotus įverčius parabolės koeficientams.
sqfit = polyfit(x, y, 2);
t = min(x):0.001:max(x);
sq = polyval(sqfit, t);
plot(t, sq)
hold off
disp(['Jūsų pasirinkti koeficientai buvo: a = ' num2str(a) ', b = ' num2str(b) ', c = ' num2str(c)]);
Jūsų pasirinkti koeficientai buvo: a = 2.2, b = -2, c = 3
disp(['Koeficientų taškiniai įverčiai buvo: a = ' num2str(sqfit(1)) ', b = ' num2str(sqfit(2)) ', c = ' num2str(sqfit(3))]);
Koeficientų taškiniai įverčiai buvo: a = 2.1883, b = -2.0044, c = 3.018

Pabandykite patys

  1. Pabandykite paeksperimentuoti su didesnės eilės daugianariais, t.y. pakeiskite trečios dalies kodą taip, kad galima būtų pasirinkti interpoliuojamo daugianario eilę.
  2. Įvertinkite grafiškai gauto modelio adekvatumą.