[R-br] Ajuda quasi likelihood

Éder Comunello comunello.eder em gmail.com
Sexta Abril 18 11:31:36 BRT 2014


Senhores, bom dia!

Não sei se ainda há interesse no tópico, mas tentei acompanhar as
explicações dadas pelo Fernando Mayer e parece que a substituição do
deparse() por eval() na condicional de vtemp parece funcionar... Mas também
não sei afirmar se seia um erro...

### função simplificada para teste...
### <function>
teste <- function (variance = "constant") {
          vtemp <- substitute(variance)
#           if (!is.character(vtemp)) vtemp <- deparse(vtemp)
          if (!is.character(vtemp)) vtemp <- eval(vtemp)
          variance_nm <- vtemp

 tmp <- switch(vtemp, constant = 1, `mu(1-mu)` = 2, mu = 3, `mu^2` = 4,
`mu^3` = 5, variance_nm <- NA)
    if (is.na(variance_nm)) {
        if (is.character(variance))
            stop(gettextf("'variance' \"%s\" is invalid: possible values
are \"mu(1-mu)\", \"mu\", \"mu^2\", \"mu^3\" and \"constant\"",
 variance_nm), domain = NA)}

print(c((str(variance)),(str(vtemp)),(tmp)))
}
### </function>

teste()
teste(variance=2)
teste(variance='mu^2')
teste(variance=variance)
teste(variance=variance)

### </code>


Éder Comunello <c <comunello.eder em gmail.com>omunello.eder em gmail.com>
Dourados, MS - [22 16.5'S, 54 49'W]


Em 15 de abril de 2014 13:17, Fernando Mayer <fernandomayer em gmail.com>escreveu:

> Wagner,
>
> se olhar dentro da função quasi, no início tem isso para o link
>
> linktemp <- substitute(link)
>     if (!is.character(linktemp))
>         linktemp <- deparse(linktemp)
>     if (linktemp %in% c("logit", "probit", "cloglog", "identity",
>         "inverse", "log", "1/mu^2", "sqrt"))
>         stats <- make.link(linktemp)
>     else if (is.character(link)) {
>         stats <- make.link(link)
>         linktemp <- link
>
> Ou seja, passando um caracter como
>
> link <- "log"
>
> vai fazer com que a função use
>
> make.link(link)
>
> e funciona como esperado. Já para a variance, a parte relevante eh essa
>
> vtemp <- substitute(variance)
>     if (!is.character(vtemp))
>         vtemp <- deparse(vtemp)
>     variance_nm <- vtemp
>     switch(vtemp, constant = {
> ...
>
> Portanto, se fizermos
>
> variance <- "mu"
>
> e seguir a lógica
>
> (vtemp <- substitute(variance))
> variance
> class(vtemp)
> [1] "name"
>
> vtemp ja não eh mais um character, portanto ele vai executar
>
> vtemp <- deparse(vtemp)
> vtemp
> [1] "variance"
>
> variance_nm <- vtemp
> variance_nm
> [1] "variance"
>
> Como dentro das opções do switch(...) ele não vai achar nenhuma opção, ele
> vai para a alternativa no final que é
>
>     switch(vtemp, constant = {
> ...
>
>             }, variance_nm <- NA)
>
> e variance_nm sendo NA vai cair nisso aqui
>
> if (is.na(variance_nm)) {
>         if (is.character(variance))
>             stop(gettextf("'variance' \"%s\" is invalid: possible values
> are \"mu(1-mu)\", \"mu\", \"mu^2\", \"mu^3\" and \"constant\"",
>                 variance_nm), domain = NA)
>
> que é o erro. Agora, se isso faz sentido ou se é uma "falha" de
> programação na função já não sei dizer (acredito que isso seja intencional,
> mas o motivo não da pra saber).
>
> De qualquer maneira vc pode modificar a função quasi() pra fazer do jeito
> que vc esperaria, começando por tirar o substitute() ali no começo...
>
> Abraço,
>
>
>
> ---
> Fernando de Pol Mayer
> Laboratório de Estatística Ambiental - LEA
> Instituto de Matemática, Estatística e Física - IMEF
> Universidade Federal do Rio Grande - FURG
> URL: http://fernandomayer.github.io
> e-mail: fernando.mayer [@] {gmail.com, furg.br}
>
>
> 2014-04-15 12:24 GMT-03:00 Wagner Bonat <wbonat em gmail.com>:
>
> Ok ! Mas vocês não acharam estranho não precisar fazer a mesma coisa para
>> o link ?
>> Vc teria alguma explicação para isso ?
>>
>> Obrigado !!
>>
>>
>> Em 15 de abril de 2014 14:20, Éder Comunello <comunello.eder em gmail.com>escreveu:
>>
>>>  Wagner, bom dia!
>>>
>>> Supondo que o vetor de valores possíveis é da classe 'expression':
>>>
>>> ### <code r>
>>>  link = "log"
>>> variance = "mu"
>>> quasi(link = link, variance = as.expression(variance))
>>> #
>>> # Family: quasi
>>> # Link function: log
>>>
>>> variance = "mu(1-mu)"
>>> quasi(link = link, variance = as.expression(variance))
>>> #
>>> #Family: quasi
>>> #Link function: log
>>> ### </code>
>>>
>>> Éder Comunello <c <comunello.eder em gmail.com>omunello.eder em gmail.com>
>>> Dourados, MS - [22 16.5'S, 54 49'W]
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> R-br mailing list
>>> R-br em listas.c3sl.ufpr.br
>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>> código mínimo reproduzível.
>>>
>>
>>
>>
>> --
>> Wagner Hugo Bonat
>> LEG - Laboratório de Estatística e Geoinformação
>> UFPR - Universidade Federal do Paraná
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>> código mínimo reproduzível.
>>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20140418/9a31a1c3/attachment.html>


Mais detalhes sobre a lista de discussão R-br