Newsgroup: it.hobby.enigmi
Titolo: [ot] "enigma" statistico - HELP

Premesso che è OT :)
Però se non sbaglio qui ho visto girare qualcuno che con la statistica
se la cava bene... quindi forse qualcuno sa darmi una dritta.
Problema:
Ho N Pi punti in 20 dimensioni.
Di fatto ciascuna dimensione è una domanda a cui può essere data una
risposta variabile tra [-3,-2,-1,1,2,3]
Per ogni coppia di punti riesco a trovare facilmente la distanza euclidea:
D(Pi,Pj) = sqrt( (Xi-Xj)^2 + (Yi-Yj)^2 .... )
e fare una matrice di distanze
A questo punto, so che ci sono delle tecniche statistiche di "metric
multidimensional scaling"(??) per ottenere una rappresentazione dei miei
punti in uno spazio con numero di dimensioni minore, conservando
approssimativamente le stesse distanze.
Nel mio caso, io vorrei mettere i punti su un piano, quindi 2-D
Purtroppo non ho conoscenze di statistica sufficienti per sapere come si
esegue questo calcolo.
Qualche guru matematico-statistico che si aggira sul NG sa darmi una
dritta sull'algoritmo da seguire, in modo che io possa magari tradurlo
in PHP(con eventualmente qualcos'altro di supporto)? :)
Ciao e grazie e scusate ancora per l'OT.
Bl@de

 Nel mio caso, io vorrei mettere i punti su un piano, quindi 2-D
Penso possa esserti utile la Principal Component Analysis (o trasformata 
di Karhunen-Loève).
Ti do il riferimento a wikipedia in italiano (veramente scarno di 
contenuti):
http://it.wikipedia.org/wiki/Analisi_delle_componenti_principali
e quello in inglese (più articolato):
http://en.wikipedia.org/wiki/Principal_component_analysis
L'argomento non è molto intuitivo per chi non è abituato al linguaggio.
Devi saper lavorare con le matrici, estrarne gli autovalori e gli 
autovettori e altre amenità.
Dai un'occhiata comunque se è questo che ti serve.
Ciao,
EmmEnthAl

 autovettori e altre amenità.
Grazie per la risposta!
Da una prima occhiata non sembra affatto banale. Devo rispolverare le
mie conoscenze su matrici e ammennicoli simili.
Ciao,
Bl@de

 Nel mio caso, io vorrei mettere i punti su un piano, quindi 2-D
hm. Una proiezione che riduce il numero delle dimensioni da N a 2
ovviamente introduce una perdita di informazione inevitabile: non si
può riuscire a priori a conservare approssimativamente le stesse
distanze, come dici tu. Il metodo di Karhunen-Loewe punta sul
preservare le componenti di varianza più alta, in base al presupposto
che sono quelle di maggior contenuto informativo; Un'alternativa più
generica può essere quella delle mappe di Kohonen (andavano molto di
moda negli anni '90 negli ambienti della ricerca scientifica, ora non
so se hanno avuto sviluppo o no).
A te a cosa serve la distanza? Qual'e' in realtà il tuo obiettivo?
bye!

 A te a cosa serve la distanza? Qual'e' in realtà il tuo obiettivo?
Ciao Hermooz!
Il mio obiettivo sarebbe quello di proporre un questionario di 20
domande a dei soggetti, dove sia possibile rispodere quntificando quanto
si sia d'accordo o meno. Per esempio in numeri, da -3 a 3.
Voglio poi creare una applicazione web dove un utente possa rispodere
alle stesse domande con le stesse modalità. E alla fine del
questionario, generare un "grafico/mappa" dove siano presenti dei punti
che rappresentano i soggetti di cui sopra e l'utente, in modo che
l'utente "veda" in maniera approssimativa ma qualitativamente
indicativa, dove si colloca rispetto ai soggetti e come anche i soggetti
si collocano tra di loro.
In questo senso io volevo una disposizione di punti in 2D che
"conservasse" approssimativamente le distanze euclidee che avevo nello
spazio con numero maggiore di dimensioni (20 in questo caso)
Cercando in rete un po' sull'argomento, ero approdato su mappe
percettuali e multidimensional scaling. E da quanto avevo capito l'idea
era calcolare appunto le distanze euclidee in 20 dimensioni tra gli N
punti. Dopodiché mettere "a caso" uno stesso numero di punti in 2D e
calcolare le ddistanze tra questi. E poi "muoverli" sino al punto di
minimizzare una funzione di stress che nella maniera più semplice avevo
trovato definita come:
SIGMA[(Dij - Fij)^2]
con Dij distanza tra Pi e Pj in N-D e Fij la distanza in 2-D
Se intuitivamente capisco come funziona, matematicamente non ho gli
strumenti per realizzare l'algoritmo.
Poi sono perfettamente d'accordo con te che passando da 20 dimensioni a
2 qualcosa va perso :)
Però lo scopo è quello di avere una rappresentazione qualitativa.
Non so se così sono riuscito a spiegarmi meglio.
Ciao e grazie,
Bl@de

 Non so se così sono riuscito a spiegarmi meglio.
Certo. Mi sono trovato in un caso simile ai tempi dell'università e
per quanto l'idea di plottare le posizioni relative su una mappa 2d
sia molto suggestiva, avevo trovato un po' di difficoltà ed avevo
scelto una soluzione di ripiego utilizzando un istogramma con una
barra per ogni distanza, proporzionale alla distanza stessa. In genere
gli utenti non avevano difficoltà a trarre fuori le informazioni utili
con un semplice colpo d'occhio anche in quella maniera; pero'
purtroppo quello che mancherebbe, rispetto alla tua richiesta, è che
non si riesce a "leggere" la posizione relativa dei prototipi (cioè i
punti "significativi" da cui calcoli le distanze).
Bye!

 minimizzare una funzione di stress
nel caso ti converrebbe veramente usare questi punti discreti per creare una 
mappa 2d continua.
Si può fare usando svariate formule tipo quelle newtoniane per la 
gravitazione (cioè ad ogni punto della mappa dai un valore che rappresenti 
il vettore di attrazione realtivo alla somma dei vettori di attrazione da 
ogni punto discreto) e altre amenità ma la cosa migliore è andare sul 
classico usando le trasformate di Fourier (da discreto a continuo). Sono più 
lente come calcolo (pure nel caso sempificato delle FFT - trasformate di 
Fourier veloci) ma offrono una maggiore precisione.
Una volta ottenuta una mappa di riferimento le altre (magari per semplice 
differenza) possono darti un valore di discostamento dal dato che ti 
permetterebbe di dire quanto le mappe sono simili. L'unica cosa che non mi 
torna nel tuo ragionamento è che per creare una mappa 2d ti servono dati in 
una matrice 2xN cioè ogni singolo dato deve essere necessariamente una 
coppia di valori.