Home Forum Statistica con R Lavorare su dati suddivisi in classi

Tagged: 

This topic contains 5 replies and has 2 voices.

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #5515

    sis_2907
    Participant

    Salve sto effettuando delle analisi su R riguardo un mio questionario e, per semplificarmi il lavoro, nella domanda in cui chiedevo il reddito, ho preimpostato le risposte facendo in modo che si potesse rispondere selezionando la classe di reddito di appartenenza (es: 0-14999).
    Adesso voglio effettuare delle analisi con R ma il problema è che R mi vede questi dati come mutabili. Potrei convertire la mutabile in variabile statistica ma dovrei attribuire un valore del tutto arbitrario…
    Come mi conviene procedere? C’è un modo per far capire a R che i miei dati sono già suddivisi in classi?
    Vi ringrazio anticipatamente per le risposte

    • This topic was modified 5 days, 11 hours ago by  sis_2907.
    • This topic was modified 5 days, 11 hours ago by  sis_2907.
    #5518

    Ciao sis_2907,
    la funzione factor() ti permette di convertire la tua variabile carattere in fattore (ti consiglio di dare un’occhiata agli argomenti di tale funzione nell’help di R per capire se possa fare al caso tuo). In pratica puoi codificare la tua variabile come nominale o ordinale.
    Non capisco tuttavia cosa intendi con “R mi vede questi dati come mutabili”.

    Potresti spiegarti meglio magari con un esempio?

    Potresti mostrare il risultato che ottieni quando mandi questi comandi in console? unique(variabile) e str(variabile)

    Grazie

    #5519

    sis_2907
    Participant

    Ciao innanzitutto ti ringrazio per la risposta,
    Intendo dire che R mi vede le risposte 0-14.999, 15.000-27.999, ecc. non come variabili numeriche ma come caratteri (come se fosse ad esempio il sesso o un colore).

    Ti posto l’output di factor()

    > factor(dati2$Reddito)
     [1] 0-14999     15000-27999 0-14999     28000-54999 15000-27999
     [6] 0-14999     55000-74999 28000-54999 15000-27999 15000-27999
    [11] 15000-27999 15000-27999 0-14999     15000-27999 0-14999    
    [16] 0-14999     0-14999     0-14999     0-14999     15000-27999
    [21] 15000-27999 15000-27999 0-14999     55000-74999 0-14999    
    [26] 55000-74999 15000-27999 28000-54999 15000-27999 15000-27999
    [31] 15000-27999 0-14999     0-14999     28000-54999 28000-54999
    [36] 0-14999     0-14999     0-14999     28000-54999 15000-27999
    [41] 0-14999     0-14999     55000-74999 28000-54999 55000-74999
    [46] 0-14999     0-14999     0-14999     0-14999     0-14999    
    [51] 0-14999     15000-27999
    Levels: 0-14999 15000-27999 28000-54999 55000-74999

    Output di unique()

    > unique(dati2$Reddito)
    [1] "0-14999"     "15000-27999" "28000-54999" "55000-74999"

    Output di str()

    > str(dati2$Reddito)
     chr [1:52] "0-14999" "15000-27999" "0-14999" "28000-54999" ...
    #5520

    sis_2907
    Participant

    Se volessi calcolare ad esempio la media, R non la calcola perché vede i dati suddivisi in classi come caratteri

    > mean(dati2$Reddito)
    [1] NA
    Warning message:
    In mean.default(dati2$Reddito) :
      l'argomento non è numerico o logico: restituisco NA

    Attraverso la funzione as.factor potrei convertire il carattere in variabile numerica ma così facendo i calcoli relativi alla varianza, media, ecc. sarebbero errati perché R convertirebbe ogni classe in un numero.

    Spero di essermi espresso chiaramente

    #5521

    Ok grazie per la risposta, hai chiarito meglio il problema.

    Ho dei dubbi riguardo al calcolare la media su una variabile che è formata da elementi che non sono singoli valori numerici (e.g. 14000) ma range di numeri (e.g. da 0 a 14999).

    Tratterei gli elementi come classi e magari calcolerei una tabella di frequenza assoluta

    
    # definiamo una variabile di esempio con le categorie indicate
    var <- c("0-14999", "0-14999", 
             "15000-27999", "15000-27999", "15000-27999", 
             "28000-54999", "55000-74999")
    
    # creiamo la tabella di frequenza
    freq_tab <- table(var)
    
    freq_tab
    var
        0-14999 15000-27999 28000-54999 55000-74999 
              2           3           1           1
    

    o una tabella di frequenza relativa espressa in percentuale

    
    prop.table(freq_tab) * 100
    var
        0-14999 15000-27999 28000-54999 55000-74999 
       28.57143    42.85714    14.28571    14.28571 
    

    Secondo tale esempio, possiamo dire che circa il 42% dei partecipanti ha un reddito che va da 15000 a 27999.

    Nel caso volessi trasformare i range di numeri in valori numerici singoli, potresti prendere il valore centrale di ogni classe. Ma non so quanto questo procedimento possa essere adeguato (perché non è vero che tutti i partecipanti con reddito fra 0 e 14999 hanno un reddito di 7499.5). Per esempio, la categoria 0-14999 potrebbe essere convertita nel singolo valore numerico 7499.5 (il valore centrale fra 0 e 14999).

    
    # sostituisco ogni classe in var con il valore centrale di ogni classe
    var <- as.numeric(ifelse(var == "0-14999", mean(c(0,14999)),
                             ifelse(var == "15000-27999", mean(c(15000, 27999)),
                                    ifelse(var == "28000-54999", mean(c(28000, 54999)),
                                           ifelse(var == "55000-74999", mean(c(55000, 74999)), var)
                                           )
                                    )
                             )
                      )
    
    var
    [1]  7499.5  7499.5 21499.5 21499.5 21499.5 41499.5 64999.5
    

    a questo punto su questo nuovo vettore numerico si possono calcolare media, varianza etc.

    #5522

    sis_2907
    Participant

    Grazie mille :)

Viewing 6 posts - 1 through 6 (of 6 total)

You must be logged in to reply to this topic.