Ajuda quasi likelihood

Caros, Alguem tem ideia do que acontece nesta situacao quasi(link = "log", variance = "mu") Family: quasi Link function: log Resultado perfeito, agora preciso deixar generico para usar a funcao quasi dentro de outra funcao para obter valores iniciais, entao pensei algo assim link = "log" variance = "mu" quasi(link = link, variance = variance) Error in quasi(link = link, variance = variance) (from quasi.R@3553CaW#69) : 'variance' "NA" is invalid: possible values are "mu(1-mu)", "mu", "mu^2", "mu^3" and "constant" Alguma ideia ?? Obrigado -- Wagner Hugo Bonat LEG - Laboratório de Estatística e Geoinformação UFPR - Universidade Federal do Paraná

Wagner, não sei se é isso que você quer... mas a solução é só atribuir um valor para mu. Pois a variance tem que ser numerica. E com isso tua função pode ser genérica. Olha o exemplo que fiz, talvez seja isso, não? link <- "log" mu <- 2 quasi(link = link, variance = mu) Assim, teu mu pode assumir quaisquer valor conforme a necessidade da aplicação da função. Espero ter te ajudado... Abs, RS ___________________________________________________ *Rodrigo Sant'Ana* -- Mestre em Ciência e Tecnologia Ambiental - MCTA/UNIVALI Graduado em Oceanografia - CTTMar/UNIVALI Universidade do Vale do Itajaí - UNIVALI -- Em 15 de abril de 2014 05:08, Wagner Bonat <wbonat@gmail.com> escreveu:
Caros,
Alguem tem ideia do que acontece nesta situacao
quasi(link = "log", variance = "mu")
Family: quasi Link function: log
Resultado perfeito, agora preciso deixar generico para usar a funcao quasi dentro de outra funcao para obter valores iniciais, entao pensei algo assim
link = "log" variance = "mu" quasi(link = link, variance = variance) Error in quasi(link = link, variance = variance) (from quasi.R@3553CaW#69) : 'variance' "NA" is invalid: possible values are "mu(1-mu)", "mu", "mu^2", "mu^3" and "constant"
Alguma ideia ??
Obrigado
-- Wagner Hugo Bonat LEG - Laboratório de Estatística e Geoinformação UFPR - Universidade Federal do Paraná
_______________________________________________ R-br mailing list R-br@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, 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@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]

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@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@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]
_______________________________________________ R-br mailing list R-br@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á

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@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@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@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]
_______________________________________________ R-br mailing list R-br@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@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.

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@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W] Em 15 de abril de 2014 13:17, Fernando Mayer <fernandomayer@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@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@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@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]
_______________________________________________ R-br mailing list R-br@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@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@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.

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@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@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]
Em 15 de abril de 2014 13:17, Fernando Mayer <fernandomayer@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@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@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@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]
_______________________________________________ R-br mailing list R-br@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@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@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@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á
participantes (4)
-
Fernando Mayer
-
Rodrigo Sant'Ana
-
Wagner Bonat
-
Éder Comunello