2016-02-01 4 views
1

Я ищу способ, чтобы правильно интегрировать свою функцию:интеграции вектора одной переменной в г

lik = function(par, x){ 
    cl = c() 
    for(i in 1:ncluster){ 
    sub = c() 
    for(j in 1:nsub){ 
     times = t[[i]][[j]] 
     m = c(1,t[[i]][j],t(cov[[i]][j,])) 
     repmat = cbind(1,1:t[[i]][j],matrix(rep(cov[[i]][j,], times),times, 3,byrow=T)) 
     sub[j] = d[[i]][j]*m%*%c(par[-5],x)-sum(log((1+exp(repmat%*%c(par[-5],x))))) 
    } 
    cl[i] = sum(sub) 
    } 
    return(exp(cl)) 
} 

функцию lik (что вероятность) принимает x, вектор par длины 5, и дает вектор вероятности на x на каждом кластере. Например,

> lik(1:5,1) 
[1] 4.640101e-30 3.632315e-44 5.348611e-09 1.121790e-27 1.696704e-98 
> #number of clusters=5 

Я хочу, чтобы интегрировать из x, чтобы я мог получить вектор маргинальной PDF на каждом кластере, но функционируют integrate или любые другие числовые пакеты интеграции способны только интегрировать скалярную функцию. Я искал вопросы, связанные с этим, и, возможно, Vectorization является ключом к решению этой проблемы, но я просто не знаю, как это сделать.

Буду признателен, если вы можете оказать мне помощь. Спасибо

+1

Пожалуйста, отформатируйте свой код, чтобы другие люди могли легко его прочитать, и вы можете получить наилучший ответ. – Mahesh

ответ

1

Обычно я рекомендую преобразовать функцию 2 переменных в функцию одной переменной до интеграции следующим образом.

myfunc <-function(x,y){ stuff} 

intfunc <-function(x){myfunc(x,y)} 

integrate(intfunc,x, etc)