Интегрирование по корню в R
Я построил модель, которая, к сожалению, не дает аналитических решений для некоторых переменных, поэтому мне нужно решить ее численно для каждого значения. Как я могу интегрировать функцию, которая должна найти корень для каждой точки интервала? То есть при интегрировании по x мне нужно использовать каждый x, чтобы найти корневое значение, как видно из выражения ниже.
crrafun <- function(w){ alpha/(1-alpha)*(theta-w)-w/(1-gam)+rhovu*w^gam}
integrand4 <- function(x){uniroot(crrafun,c(rhovu,xhat2_new,theta=x)$root+xi-rhovu2_new)*dlnorm(x,mu,sigma)}
integ4 <- integrate(integrand4,xhat2_new,20)$value
Это дает мне ошибку «значения f() в конечных точках не противоположного знака», но когда я запускаю uniroot отдельно для последовательности значений в интервале x (включая самое высокое и самое низкое значение), никогда не возникает никаких проблем, поэтому ошибка сообщение, вероятно, вводит в заблуждение.
Я пробовал писать crrafun прямо в подынтегральную функцию, но это не помогло. Я также попытался заменить uniroot.all на uniroot. Есть ли альтернатива интеграции или uniroot, которая может помочь мне в этом случае? Я знаю, что, вероятно, мог бы написать свою собственную функцию интегрирования, суммирующую корневые значения по некоторой последовательности. Однако я бы предпочел этого не делать, так как это кажется очень случайным и дает только приблизительное представление о размере интеграла.