Δημοσιεύτηκε: 21 Απρ 2009, 18:24
από kalakouentin
Το Scilab δίνει την δυνατότητα για όλες τις βασικές στατιστικές διεργασίες. Η προηγούμενη ενότητα έκλεισε με την εντολή rand και με αυτή θα ξεκινήσουμε τώρα.

(To παρόν tutorial δεν αποσκοπεί επ' ουδενί να μάθει Στατιστική σε κάποιον. Ουσιαστικός του σκοπός είναι να εξοικειώσει τον χρήστη με το λογισμικό SciLab μέσω εισαγωγικών στατιστικών μεθόδων.)

Αρχικά δημιουργούμε έναν πίνακα 200 γραμμών και 4 στηλών με τυχαία στοιχεία μεταξύ 0 και 1. Το Scilab μπορεί να ενσωματώνει σχόλια (comments) στον κώδικα του ακριβώς όπως και η C++, εισάγοντας δηλαδή δυο forward slashes // και πληκτρολογώντας το σχόλιο.
Κώδικας: Επιλογή όλων
big_H = rand (200,4); // Φτιάξαμε έναν πίνακα 800 στοιχείων σε 4 στήλες!

Στο Scilab για να υποδείξουμε όλες τις σειρές ή τις στήλες ενός πίνακα είναι αρκετό να βάλουμε τον χαρακτήρα : . Άρα ένας μικρότερος πίνακας που εμπεριέρχει όλες τις σειρές από τις στήλες 2 και 3 του αρχικού big_H παράγεται από την εντολη big_H(:, 2:3). Επίσης προφανώς η εντολή big_H(:,:) αντιστοιχεί σε όλο τον πίνακα, και είναι ισοδύναμη με το απλό big_H. ;)
Κώδικας: Επιλογή όλων
small_H = big_H(:, 2:3); //Δηλώνουμε ένα πίνακα small_H που έχει μονάχα τις στήλες 2 & 3 του αρχικού πίνακα big_H.

Μια πολύ χρήσιμη εντολή είναι η εντολή length(Q). Η εντολή επιστρέφει το πλήθος των στοιχείων σε ένα διάνυσμα ή έναν πίνακα Q τον οποίο δέχτηκε ως όρισμα της. Έτσι η εντολή length(big_H) θα μας επιστρέψει το συνολικό αριθμό στοιχείων στον πίνακα big_H και η εντολή length(small_H(:,2)) των αριθμών των στοιχείων στη δεύτερη στήλη του πίνακα small_H.
Κώδικας: Επιλογή όλων
length(big_H)
ans  =
    800. 
length(small_H(:,2))
ans  =
    200.

Τώρα που απομονώσαμε τα δεδομένα που θέλουμε, μπορούμε να ελέγξουμε το άθροισμα των κελιών τους κατά στήλη (column) ή κάτά γραμμή (row) μέσω της εντολής sum.
Κώδικας: Επιλογή όλων
Sum_R = sum(small_H, 'r') //Επιστρέφει το άθροισμα όλων των σειρών (rows) του πίνακα small_H ανά μια στήλη.
Sum_R  =
    97.132479    92.607096 
Sum_C = sum(small_H, 'c'); //Επιστρέφει το άθροισμα όλων των στηλών (columns) του πίνακα small_H ανά μια σειρά. Δεν τυπώνει κάτι λόγω του ;

Για ένα διάνυσμα ή έναν πίνακα Q η εντολή mean(Q) επιστρέφει τον αριθμητικό μέσο όλων των στοιχείων στο Q. Άρα η εντολή mean(big_H) θα μας επιστρέψει τον αριθμητικό μέσο ('μέσο όρο') των 800 στοιχείων στον πίνακα big_H και η mean(small_H(:,2)) τον μέσο όρο των στοιχείων στη δεύτερη στήλη του πίνακα small_H.
Κώδικας: Επιλογή όλων
mean(big_H) // Κάτι κοντά στο 0.5.
ans  =
    0.4883126 
mean(small_H(:,2)) //Κάτι κοντά στο 0.5 αλλά όχι τόσο κοντά όσο το προηγούμενο νούμερο.
ans  =
    0.4630355

Σε αυτό το σημείο για να βεβαιωθούμε ότι έχουμε κάνει σωστά την μετακίνηση των στοιχείων μας μπορούμε να δούμε ελέγξουμε ότι η 3η σειρά του πίνακα big_H έχει το ίδιο μέσο όρο με αυτό της 2ης σειράς του πίνακα small_H. Εφόσον η σύγκριση επιστρέψει Τ (για True) τότε είμαστε σωστοί.
Κώδικας: Επιλογή όλων
mean(big_H(:,3)) == mean(small_H(:,2)) //True or False ?
ans  =
   T

Δυο άλλοι επίσης ευρύτερα "δημοφιλής" μέσοι είναι ο γεωμετρικός μέσος και ο αρμονικός μέσος. Και οι 2 είναι εύκολα υπολογίσιμοι μέσω των εντολών geomean και harmean αντίστοιχα. Ο γεωμετρικός μέσος και ο αρμονικός μέσος των στηλών πίνακα big_H επιστρέφονται αντίστοιχα από τις εντολές geomean(big_H,'r') και harmean(big_H,'r'). (Προσοχή ο γεωμετρικός μέσος εφαρμόζεται μονάχα σε θετικές τιμές)
Κώδικας: Επιλογή όλων
geomean(big_H,'r')
ans  =
    0.3690294    0.3493026    0.3528474    0.3362377 
harmean(big_H,'r')
ans  =
    28.43164    9.6038178    4.7328138    73.474245

Ένα άλλο βασικό στατιστικό μέγεθος είναι η διάμεσος των τιμών. Για ένα διάνυσμα ή έναν πίνακα Q η εντολή median(Q) επιστρέφει τη διάμεσο ή διχοτόμο του συνόλου των στοιχείων στο Q. Άρα η εντολή median(big_H) θα μας επιστρέψει τη διχοτόμο των 800 στοιχείων στον πίνακα big_H και η median(small_H(:,1)) τη διχοτόμο των στοιχείων στην πρώτη στήλη του πίνακα small_H.
Κώδικας: Επιλογή όλων
median(big_H)
ans  =
    0.4779762 
median(small_H(:,1))
ans  =
    0.4475574

Κατά την αρχική ανάλυση των τιμών μας βασικό ρόλο παίζουν κάποια μέτρα διασποράς, τα οποία δίνουν μια συνοπτική εποπτεία της "μεταβλητότητας" των στοιχείων του δείγματος. Κάποια από αυτά είναι το εύρος των τιμών στο δείγμα (range), η μέση απόλυτη απόκλιση (mean absolute deviation) και η τυπική απόκλιση των τιμών (standard deviation).
Ο υπολογισμός του εύρους τιμών γίνεται με την εντολή strange. Πρακτικά υπολογίζει την απόσταση μεταξύ της μέγιστης και της ελάχιστης τιμής του εκάστοτε δείγματος.
Κώδικας: Επιλογή όλων
strange(big_H)
ans  =
     0.9962980 
strange(small_H)
ans  =
    0.9944220

H τιμή της μέσης απόλυτης απόκλισης προσφέρεται με την εντολή mad.
Κώδικας: Επιλογή όλων
mad(big_H,'r') // στις τιμές όλων των σειρών (rows) του πίνακα big_H ανά μια στήλη
ans  =
    0.2358232    0.2492105    0.2367575    0.2526190 
mad(small_H) //σε όλες τις τιμές του small_H συνολικά
ans  =
    0.2429153

Τέλος η τιμή της τυπικής απόκλισης των τιμών υπολογίζεται με την εντολη stdev.
Κώδικας: Επιλογή όλων
stdev(big_H)
ans  =
    0.2840854   
stdev(small_H)
ans  =
    0.2813712

Κάτι εξαιρετικά χρήσιμο είναι η οπτική επισκόπηση των δεδομένων μας. Για αυτή τη διαδικασία μπορούμε να χρησιμοποιήσουμε την plot2d που συναντήσαμε νωρίτερα, αλλά και το ιστόγραμμα συχνοτήτων των τιμών στο δείγμα μας (frequency histogram) που το λαμβάνουμε με τη εντολή histplot(Z,Q).

Η histoplot δέχεται ως υποχρεωτικό όρισμα τον αριθμό Z των τάξεων για τον οποίο θα ληφθούν οι συχνότητες των τιμών του δείγματος Q. Άρα η histplot(20,big_Η) θα δημιουργήσει ένα ιστόγραμμα συχνοτήτων με 20 classes των τιμών στον πίνακα big_H, ενώ η histplot (50, small_H(:,2)); θα δημιουργήσει ένα ιστόγραμμα συχνοτήτων ανά 0.02 (δηλαδή 50 ίσες classes σε διάστημα μίας μονάδας). "Mπακαλίστικα" μπορούμε να πούμε ότι ο αριθμός Z είναι το "πόσες μπάρες" θα έχει το σχήμα μας.

Για να συνδυάσουμε και τα γραφήματα plot2d και histplot σε ένα παράθυρο χρησιμοποιούμε την εντολη subplot. H subplot(m,n,p) "σπάει" το παράθυρο σε ένα πίνακα m-επί-n υπο-παραθύρων και επιλέγει το p-οστό παράθυρο για να απεικονίσει τα δεδομένα της. Έτσι με την εντολή subplot(2,1,1) ορίζουμε ότι θα σπάσει σε 2 μέρη το παράθυρο (ένα πάνω ένα κάτω) και ότι θα plotάρουμε στο 1ο. Αντίστοιχα με την εντολή subplot(2,1,2) ορίζουμε ότι αφού έχει σπάσει ο πίνακας σε 2 μέρη (2-επί-1) plotάρουμε στο 2ο.

Είναι βολικό να βάζουμε τίτλους σε κάθε plot που κάνουμε. Με την εντολή xtitle μπορούμε να τιτλοφορήσουμε το κάθε plot μας. Το συντακτικό της είναι πολύ απλό: xtitle("O titlos toy plot") και δέχεται και ελληνικούς χαρακτήρες.

Κώδικας: Επιλογή όλων
subplot(2,1,1)
plot2d(small_H(:,2))
xgrid
xtitle("Απλό plot των τιμών, με grid");
subplot(2,1,2)
histplot(50,small_H(:,2))
xtitle("Ιστόγραμμα Συχνοτήτων, χωρίς grid");


Εικόνα


Αυτά για τώρα.
Κώδικας: Επιλογή όλων
exit


(Προκαταβολικά συγνώμη από τους μαθηματικούς του forum για τυχόν νοηματικές ατασθαλίες και μπακαλό-ορολογία)

Ακολουθεί ενδεικτική εικόνα από την εκτέλεση κάποιων εντολών του tutorial :
Εικόνα