【问题标题】:fminsearch-likelihood estimation for grid valued function网格值函数的 fminsearch 似然估计
【发布时间】:2012-02-20 21:06:55
【问题描述】:

我想创建一个带有网格的多变量(这里是四个)函数,而不是为任何 X、Y 插值。假设这是我的概率密度函数,我计算它们在 X 上的边际。我使用这个函数来构建一个数据集。我的每个 M 文件都运行良好,至少我是这么认为的。但是当我让运行估计部分时,我收到一个错误。如果我的错误是可以弥补的,请您帮助我。

    clear all;
    %%%Some parameters
    m1=0.01;
    m2=0.02;
    m3=0.001;
    Z=zeros(10,20,10,5);
    % MFILE1
    %Create a four variable function 
    % function w=anemon(m1,m2,m3,X,Y,k,l)
    % w=(m1*k+(m1+m2).*l)+X.*exp(-m3.*Y);
    % end

    % MFILE2
    %Interpolate any (Xstar,Ystar) with a nonsence interpolation code
    %I wrote it only for giving an example
    % function p=interpanemon(Xstar,Ystar,m1,m2,m3,Z,X,Y,kk,ll)
    % p=0;
    % for i=1:length(X)-1
    %     for j=1:length(Y)-1
    %           if ((Y(j)<=Ystar)&&(Ystar<=Y(j+1)))&&((X(i)<=Xstar)&&(Xstar<=X(i+1)))
    %           p=(Z(i,j,kk,ll)+Z(i+1,j,kk,ll)+Z(i,j+1,kk,ll)+Z(i+1,j+1,kk,ll))/4;
    %          end
    %     end
    % end
    %     return
    %  end

    % MFILE3
    %Create a model which I'm going to use for parameter estimation
    % function loglik= modelanemon(p)
    % global n x m2 m3 kk ll ;
    % f =marjinteranemon(Ystar,p,m2,m3,Z,X,Y,kk,ll); 
    % loglik0=(-1)*(x.*log(f)+(n-x).*log(1-f));%minus likelihood
    % loglik=sum(loglik0);
    % end

%%
    X=linspace(0,10,6);
    Y=linspace(0,20,6);
    for k=1:10
        kk=k-1;
        for l=1:5
            ll=l-1;
    for i=1:length(X)
        for j=1:length(Y)
            Z(i,j,k,l)=anemon(m1,m2,m3,X(i),Y(j),kk,ll);
        end
    end
        end
    end
    %%%Now run all M-Files for self control
    anemon(m1,m2,m3,X,Y,4,5)
    interpanemon(3,4,m1,m2,m3,Z,X,Y,4,5)
    marjinteranemon(3,Z,X,Y,m1,m2,m3,4,5)

%STARTING PROBLEM PART


%SCRIPT fminsearch, I will be greatful if you have any advise. This part of        %       code  doesn't work
    % global n Ystar x kk ll m1 m2 m3;
    % m1=0.1;
    % m2=0.2;
    % m3=0.3;
    % Ystar=[1 3 6 9 12 18]';
    % kk=[1 1 2 3 3 4]';
    % ll=[0 0 1 3 4 5]';
    % y=marjinteranemon(Ystar,Z,X,Y,m1,m2,m3,kk,ll);
    % n=100;
    % x=y.*n;
    % pstart=5;
    % [p1,modelvalue]=fminsearch(@modelanemon,pstart);

【问题讨论】:

  • 你能发布你看到的错误吗?我从anemon 函数中得到:??? Undefined function or variable 'mu'.,应该是m3
  • @macduff 感谢您的快速回答!错误休闲:'==> modelanemon 在 3 f =marjinteranemon(Ystar,p,m2,m3,Z,X,Y,kk,ll); ==> fminsearch 在 205 处出错 fv(:,1) = funfcn(x,varargin{:});'
  • mu的值应该是多少?如果这很明显,请原谅我。我也错过了marjinteranemon()这个功能
  • 我在你的@macduff 通知后修复了它并替换为 m3:)
  • 这解决了您的问题吗?另外,作为个人恩惠,我可以查看marjinteranemon() 函数吗?

标签: matlab parameters estimation


【解决方案1】:
  1. anemon 函数中,mu 应该是 m3。
  2. 由于您尝试估计参数 m1,因此您需要将所有其他数据作为参数或全局变量传递给 modelanemon 函数。

我通常不会推荐全局变量,但我认为尝试将参数传递给本地函数句柄可能有点太高级了。 :-) 你的代码会是这样的:

    % MFILE3
    %Create a model which I'm going to use for parameter estimation
    function loglik= modelanemon(p)
      global Ystar m2 m3 Z X Y kk ll n x;
      f =marjinteranemon(Ystar,p,m2,m3,Z,X,Y,kk,ll); 
      loglik0=(-1)*(x.*log(f)+(n-x).*log(1-f));%minus likelihood
      loglik=sum(loglik0);
    end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多