In R, l'oggetto formula è simbolico e sembra piuttosto difficile da analizzare. Tuttavia, devo analizzare tale formula in un insieme esplicito di etichette per uso al di fuori di R.Uso di R per interpretare una formula simbolica per uso esterno
(1)
Lasciando f
rappresento la model formulae in cui una risposta non è specificato, ad esempio ~V1 + V2 + V3
, una cosa che ho provato era:
t <- terms(f)
attr(t, "term.labels")
Tuttavia, questo non ottiene che cosa è esattamente esplicito se alcune delle variabili in f
sono categorica. Ad esempio, sia V1
una variabile categoriale con 2 categorie, ad esempio un valore booleano, e sia V2
una doppia.
Pertanto, un modello specificato da ~V1:V2
deve avere 2 parametri: "intercetta" e "xyes: z". Nel frattempo, un modello specificato da ~V1:V2 - 1
deve avere i parametri "xno: z" e "xyes: z". Tuttavia, senza un modo di dire alla funzione terms()
quali variabili sono categoriali (e quante categorie) non ha modo di essere in grado di interpretarle. Invece, ha solo V1:V2
nei suoi "terms.labels" che non significa nulla nel contesto che V1
è categoriale.
(2)
D'altra parte, utilizzando model.matrix
è un modo facile per ottenere esattamente quello che voglio. Il problema è che richiede un argomento data
, il che è un problema per me perché voglio solo un'interpretazione esplicita della formula simbolica per l'uso al di fuori di R. Questo metodo per farlo sprecherà molto tempo (comparativamente) perché R deve leggere i dati da una fonte esterna quando tutto ciò che è veramente necessario sapere per la formula è quali variabili sono categoriali (e quante categorie) e quali variabili sono doppie.
C'è un modo per utilizzare 'model.matrix' con solo specificando i tipi di dati, piuttosto che i dati effettivi? Se no, cos'altro è una soluzione praticabile?
Grazie per la risposta rapida. Ho un vero set di dati, ma è grande e al di fuori di R quindi leggerlo è ciò che riduce l'efficienza. Quello che hai nella prima parte sembra ottimo, ma una cosa che non capisco è che 'model.matrix (f, data = V1Factor)' produce 3 parametri rilevanti, quando non dovrebbe avere 'V1no: V2' come è un'intercettazione. –
R è riluttante a rimuovere i parametri di ordine inferiore quando sono presenti interazioni, forse questo è il motivo: http://stackoverflow.com/q/11335923/289572 – Henrik
@JonClaus Penso che dovrebbe avere tre parametri: l'intercetta, la pendenza di 'V2' quando' V1' è no, e la pendenza di 'V2' quando' V1' è sì (il modo in cui è parametrizzato qui). Si potrebbero anche ottenere 3 parametri con un'intercetta, una pendenza di 'V2' quando' V1' è no, e il cambiamento nella pendenza di 'V2' quando' V1' cambia da no a sì. Comunque lo parametrizzi, ci sono 3 parametri. –