Traduzione formula in linguaggio R

bomberone1
Buongiorno a tutti,

per chi fosse più pratico avrei bisogno qualche dritta in quanto non sono proprio un esperto col software R.
Ho la seguente formula che non so come scrivere in modo corretto:
$$\sum_{k \in U}{a_k d_k \frac{y_l - y_k}{|y_l - y_k|}}-G*N$$
Inoltre ho dei dubbi riguardo al fatto che con l=k il denominatore sarebbe uguale a 0 di conseguenze riscontrerei dei problemi.

Ecco in sintesi i miei dubbi sono questi due.

Vi ringrazio molto

Risposte
dasalv12
La scrittura delle formule non è molto diversa da altri linguaggi, in questo caso ti conviene creare una funzione:

nomefunzione <- function(a, d, yl, yk, G, N) {
  sum(a * d * (yl - yk)/abs(yl - yk)  - G * N)
}

nomefunzione(a, d, yl, yk, G, N)


Inoltre ho dei dubbi riguardo al fatto che con l=k il denominatore sarebbe uguale a 0 di conseguenze riscontrerei dei problemi.


Questo è un problema matematico, non di certo di codice, nel caso di denominatore uguale a 0 R ti restituirà come output "NaN".
Quella frazione ti serve solo per stabilire il segno del risultato (infatti restituisce un vettore i cui possibili valori sono -1, 1 o "NaN").
Nel caso volessi assegnare un valore diverso ad "NaN" per motivi di interpretazione della formula ti basterà aggiungere una funzione ifelse:
nomefunzione <- function(a, d, yl, yk, G, N) {
  z <- (yl - yk)/abs(yl - yk)
  z <- ifelse (z == "NaN", 1, z) 
  sum(a * d * z  - G * N)
  
}

nomefunzione(a, d, yl, yk, G, N)

In questo caso io ho fatto in modo che se la frazione ha denominatore uguale a 0 diventi 1...dal punto di vista matematico è un obbrobrio, ma dipende dal senso che vuoi dare a questa espressione ed ai suoi risultati.
Puoi testare le funzioni una volta assegnati i valori agli oggetti della funzione.

bomberone1
Ciao intanto grazie molte dell'aiuto, ma avrei un dubbio. Non posso usare quella frazione come funzione segno?

dasalv12
Ciò che ti devi domandare è cosa vuoi che succeda se yl = yk.
La funzione sign(yl - yk) ti restituirà 0 anziché "NaN"...(ps mentre se continui ad usare la frazione l'output sarà sempre "naN")

bomberone1
"Injuria":
Ciò che ti devi domandare è cosa vuoi che succeda se yl = yk.
La funzione sign(yl - yk) ti restituirà 0 anziché "NaN"...(ps mentre se continui ad usare la frazione l'output sarà sempre "naN")


Quindi se definissi che l ≠ k allora mi converrebbe utilizzare la funzione segno oppure eguagliare NaN a zero no?

dasalv12
"bomberone":
[quote="Injuria"]Ciò che ti devi domandare è cosa vuoi che succeda se yl = yk.
La funzione sign(yl - yk) ti restituirà 0 anziché "NaN"...(ps mentre se continui ad usare la frazione l'output sarà sempre "naN")


Quindi se definissi che l ≠ k allora mi converrebbe utilizzare la funzione segno oppure eguagliare NaN a zero no?[/quote]

Questo lo devi sapere tu, però mi sembra che ti concentri molto sul codice e non sul senso di ciò che stai facendo.
Il senso dell'espressione che hai postato non lo conosco (non vi riconosco nessuna delle formule statistiche da me conosciute), quindi solo tu puoi sapere cosa ti conviene fare. Per quanto riguarda la scrittura dei codici possono esserci infinite soluzioni, vuoi usare la funzione sign()? Puoi usarla, ma non è che fa i miracoli e riesce a dividere per 0, ti restituirà sempre "NaN".

vict85
Supponendo tu decida di usare la funzione sign io suggerisco:
result <- sum(sign(y-yk)*a*d) - G%*%N

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.