首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fminsearch删失MATLAB

fminsearch删失MATLAB
EN

Stack Overflow用户
提问于 2015-04-15 03:47:49
回答 2查看 122关注 0票数 0

编辑我发现我的脚本中的y(c)给出了这个错误:

代码语言:javascript
复制
Subscript indices must either be real positive integers or logicals.

但是在这个例子中,脚本y(c)打印被审查的y的值。

我试图使用我找到的一个脚本来分析被审查的数据。脚本本身运行良好,但当我尝试将其与自己的数据一起使用时,会出现一个错误。

以下是示例代码:

代码语言:javascript
复制
% I have some (x,y) data
n = 100;
x = 10*rand(n,1);
y = 5 + .5*x + randn(n,1);
plot(x,y,'o','Color',[.8 .8 .8]);

% But it's censored, I can't observe values larger than 8
c = y>8
o = min(y,8);
line(x,o,'Marker','o','Color','b','LineStyle','none')

% If I fit a line to the data I observe, no good
b = polyfit(x,o,1)
s = norm(o-polyval(b,x))/sqrt(n)
xx = linspace(0,10);
line(xx,polyval(b,xx),'Color','r')

% Instead I need a likelihood function that taket it censoring into account
nloglik = @(p) - sum(log(normpdf(o(~c),p(1)*x(~c)+p(2),p(3)))) ...
               - sum(log(1-normcdf(o(c),p(1)*x(c)+p(2),p(3))));

nloglik = @(p) - sum(log(normpdf(tof(~c),p(1)*z(~c)+p(2),p(3)))) ...
           - sum(log(1-normcdf(tof(c),p(1)*z(c)+p(2),p(3))));
p = fminsearch(nloglik,[b,s])

这是我的代码:

代码语言:javascript
复制
load('UV.mat') % is an 18 column array

for i = 1 : length(UV{1,7})
    if UV{1,7}(i) ~= 0
        x(i)=log10(UV{1,4}(i));
        y(i) = UV{1,7}(i);
    end
end
c=zeros(length(y),1); % c stands for censored
for i=1:length(y)
    if UV{1,8}{i} == 'u' % u stands for upper limit
        c(i)=1;
    end
end

b = polyfit(x,y,1)
s = norm(y-polyval(b,x))/sqrt(length(x))
nloglik = @(p) - sum(log(normpdf(y(~c),p(1)*x(~c)+p(2),p(3)))) ...
               - sum(log(1-normcdf(y(c),p(1)*x(c)+p(2),p(3))));
p = fminsearch(nloglik,[b,s])

错误是:

代码语言:javascript
复制
Subscript indices must either be real positive integers or logicals.

Error in @(p)-sum(log(normpdf(y(~c),p(1)*x(~c)+p(2),p(3))))-sum(log(1-normcdf(y(c),p(1)*x(c)+p(2),p(3))))


Error in fminsearch (line 191)
fv(:,1) = funfcn(x,varargin{:});

Error in zWithCensoring (line 22)  %zWithCensoring is the name of my script
p = fminsearch(nloglik,[b,s])

我试着调试它,但是在定义它之前,似乎会调用p。我发现nloglik是一个输入参数p的函数。

我的脚本如何给出这个错误,而不是示例脚本?我该如何克服这个错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-15 05:16:55

将变量c更改为逻辑变量,即:

代码语言:javascript
复制
c = logical(c)

在你用它做索引之前。

或者,创建“c”作为逻辑开始:

代码语言:javascript
复制
c= false(length(y),1); % c stands for censored
for i=1:length(y)
    if UV{1,8}{i} == 'u' % u stands for upper limit
        c(i)=true;
    end
end

如果这样做不起作用,那么发布一段工作代码将有助于解决问题。

票数 1
EN

Stack Overflow用户

发布于 2015-04-15 04:54:25

y(c)给出了错误,不确定为什么它在示例脚本中工作。使ya和yc、xa和xc分别为y(~c)、y(c)、x(~c)和x(c),现在起作用了。

编辑:

我让你,yc,xa,xc这样:

代码语言:javascript
复制
for i =1:length(y)
    if UV{1,8}{i} == 'u'
        yc(j)=y(i);
        xc(j)=x(i);
        j=j+1;
    else
        ya(k)=y(i);
        xa(k)=x(i);
        k=k+1;
    end
end

并在函数nloglik中对y(~c)、y(c)、x(~c)和x(c)进行了细分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29641259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档