[R-br] Ajuda quasi likelihood

Wagner Bonat wbonat em gmail.com
Sexta Abril 18 14:30:05 BRT 2014


A minha solução bem mais inocente que as explicações do Fernando e as
outras soluções foi simplesmente

my.quasi <- function (link = "identity", variance = "constant")
{
    link <- link
    variance <- variance ## Coloquei estas duas linhas rsr pronto funcionou
o resta da função é igual
    linktemp <- substitute(link)
    if (!is.character(linktemp))
        linktemp <- deparse(linktemp)
    if (linktemp %in% c("logit", "probit", "cloglog", "identity",
        "inverse", "log", "1/mu^2", "sqrt")) ....


Em 18 de abril de 2014 16:31, Éder Comunello <comunello.eder em gmail.com>escreveu:

> 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.
>>
>
>
> _______________________________________________
> 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á
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20140418/c8241b98/attachment.html>


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