Tava vendo agora que ainda tem alguma coisa que devo ter especificado errado, pois agora apenas o valor para i=0 e i=1 estão corretos, após isso os valores estão em 1 passo adiantados, exemplo:

> conv3(10)
 [1] 0.5273934138 0.4374971494 0.3996213000 0.3239581987 0.2247104996 0.1297119898 0.0613151283 0.0235521138 0.0073294684 0.0018468713 0.0003769962

comparando:

F_0<-pnorm(0,m,dp)
F_.1<- pnorm(0.1,m,dp)
F_.2<- pnorm(0.2,m,dp)
P_G0<-F_0
P_G1<-F_.1-F_0
P_G2<-F_.2-F_.1 

> -P_G0*log2(P_G0)
[1] 0.5273934
> -P_G1*log2(P_G1)
[1] 0.4374971
> -P_G2*log2(P_G2)
[1] 0.4374971
> -P_G3*log2(P_G3)
[1] 0.3996213

O terceiro valor de conv3 deveria ser ainda 0.437 e só a partir do quarto (i=3) que deveria ser o 0.3996


--
Daniela Rodrigues Recchia
M.Sc. in Statistics

Tel. (Mobil): +49 01578 7588382
Germany

“The standard of success in life is absolutely the amount of joy you feel”
Esther & Jerry Hick
 


Em Terça-feira, 18 de Novembro de 2014 18:48, Manoel Galdino <mcz.fea@gmail.com> escreveu:


Mais uma correção e simplificando: 

conv3 <- function(n, m=0.1, dp=sqrt(0.05)) {
  u <- numeric(n+1)
  f <- function(x) {pnorm(x,m,dp)}
  p <- function(x) {f(x)}
  I <-  function (x) {-p(x)*log2(p(x)) }
  u[1]<- I(0)
  for (i in 2:(n+1)) { 
    f  <-  function(i) {pnorm(i*1/n,m,dp)}
    p <-  function(i) {f(i)-f(i-1)}
    u[i]<- I(i)
  }
 return(u)
}

2014-11-18 15:44 GMT-02:00 Manoel Galdino <mcz.fea@gmail.com>:
Não há de que.

Ah, corrige só uma linha do código que ainda está errado (embora não afete o resultado, aparentemente). No final, troca por:
y <- u[1:n,]

2014-11-18 15:41 GMT-02:00 Daniela Recchia <daniela_recchia@yahoo.com.br>:

Muito obrigada Manoel!

Apesar se usar o R acabo não programando muita coisa sózinha, por isso quando tenho que fazer algo mesmo que simples as vezes me confundo. Por bug tinha entendido que eu deveria receber algum warning ou error do R, e como isso não ocorreu achei que estava tudo ok.

Muito obrigada e boa semana!

Abraços,
 
--
Daniela Rodrigues Recchia
M.Sc. in Statistics

Tel. (Mobil): +49 01578 7588382
Germany

“The standard of success in life is absolutely the amount of joy you feel”
Esther & Jerry Hick
 


Em Terça-feira, 18 de Novembro de 2014 18:37, Manoel Galdino <mcz.fea@gmail.com> escreveu:


Se a sua função não faz o que deveria fazer, bem, então acho que ela tem um bug! =)

Eu reescrevi sua função, eacho que agora funciona. Seu problema era de índice. Não existe índice 0 no R (diferentemente de C, por exemplo). Matriz, vetor etc. começa sempre em 1.

conv2 <- function(n, m=0.1, dp=sqrt(0.05)) {
  u <- matrix(nrow=n+1,ncol=1)
  f <- function(x) {pnorm(x,m,dp)}
  p <- function(x) {f(x)}
  I <-  function (x) {-p(x)*log2(p(x)) }
  u[1,]<- I(0)
  for (i in 2:n) { 
    f  <-  function(i) {pnorm(i*1/n,m,dp)}
    p <-  function(i) {f(i)-f(i-1)}
    u[i,]<- I(i)
  }
  y <-u[0:n,]
  y
}





2014-11-18 15:12 GMT-02:00 Daniela Recchia <daniela_recchia@yahoo.com.br>:
Olá Manoel,

obrigada pelo retorno. Não conhecia o GitHub obrigada pela indicação.

A princípio os valores de m e dp são fixos, não são importantes nesse exemplo, e não tenho nenhum Bug pra solucionar, a função funciona perfeitamente, com a única exceção de que o valor para i=0 não é calculado corretamente.

É isso mesmo que eu quero, ter os valores de f e p para então realizar a multiplicação que será retornada na matriz. Aqui um exemplo: (usei m=0.1; dp=sqrt(0.05))

> conv(10)
 [1] 0.437497149 0.437497149 0.399621300 0.323958199 0.224710500 0.129711990
 [7] 0.061315128 0.023552114 0.007329468 0.001846871

Veja que o primeiro e o segundo valores sãi iguais (o que na verdade corresponde a i=1) e é isso que quero resolver.

Abraços,

Daniela
 
--
Daniela Rodrigues Recchia
M.Sc. in Statistics

Tel. (Mobil): +49 01578 7588382
Germany

“The standard of success in life is absolutely the amount of joy you feel”
Esther & Jerry Hick
 


Em Terça-feira, 18 de Novembro de 2014 18:01, Manoel Galdino <mcz.fea@gmail.com> escreveu:


Seu código tá bem ruim de ler...
Recomendo que você utilize o GitHub para postar seus códigos. Além disso, ajudaria se você dissesse o que pretende com a função. Do jeito que está é bem difícil ajudar.

Mas voltando a sua pergunta. Fiz algumas alterações no código (só reorganizei). Veja se está funcionando...



conv<- function(n) {
                   u <- matrix(nrow=n+1,ncol=1)
                        for (i in 0:n) { 
                                if (i==0) {
                                      f <- function(i) {pnorm(i,m,dp)}
                                      p<- function(i) {f(i)}
                                } else  {
                                      f  <-  function(i) {pnorm(i*1/n,m,dp)}
                                      p <-  function(i) {f(i)-f(i-1)}
                               }
                     I <-  function (i) {-p(i)*log2(p(i))}
                     u[i,]<- I(i)}
                   y <-u[0:n,]
                   y }


Use o browser pra você debugar seu código. No livro do Hadley tem mais explicações sobre como debugar um código.

abçs
M

ps.: Onde que os argumentos 'm' e 'dp' entram na função? Eles são valores globais? Não é a prática mais recomendada...
ps.2: a cada iteração do loop, as funções f e p são subscritas, de forma que ao final você terá uma f e uma p, dada por i igual a n. É isso mesmo que você quer?

On Tue, Nov 18, 2014 at 2:00 PM, Daniela Recchia <daniela_recchia@yahoo.com.br> wrote:
Boa tarde pessoal,

tenho certeza que meu problema é bem simples mas não estou conseguindo visualizar a solução, criei a função:

conv<- function(n){u<-matrix(nrow=n+1,ncol=1)
                   for (i in 0:n) { 
                     if(i==0) f<-function(i) {pnorm(i,m,dp)}
                     else     f<- function(i) {pnorm(i*1/n,m,dp)}
                     if(i==0) p<- function(i) {f(i)}
                     else     p<- function(i) {f(i)-f(i-1)}
                     I<- function (i) {-p(i)*log2(p(i))}
                     u[i,]<- I(i)}
                   y<-u[0:n,]; y}

Mas para o caso onde i==0 não está sendo feito corretamente, e preciso idendificar se não tenho problemas na condição f(i)-f(i-1), o que ele retorna no lugar do i=0 é o valor do i=1.

Alguém saberia me dar uma dica?

Abraços,

Daniela
 
--
Daniela Rodrigues Recchia


“The standard of success in life is absolutely the amount of joy you feel”
Esther & Jerry Hick
 

_______________________________________________
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.



--





--





--