Hi, I would like to creat a function that calculate fn. I would like to assign 1 to s when x>v and 0 otherwise.
[fn]=lillietest1(daily_logreturns);
function [fn] = lillietest1(x)
n=lenght(x);
x=sort(x);
for i=1:n
v(i)=i/n;
if x(i)>=v(i)
s(i)=1;
else
s(i)=0;
end
end
fn=sum(s)/n;
end

 採用された回答

Alan Stevens
Alan Stevens 2020 年 11 月 11 日

0 投票

I don't have your daily log returns vector, so I can't check your result. You are the only person who can decide if the function makes sense!!

5 件のコメント

Julian Wzorek
Julian Wzorek 2020 年 11 月 11 日
I created test function and it doesn't work properly.
clear;
clc;
bd=[2,3,4,5,3,1,4,5,6];
[fn]=lillietest1(bd);
function [fn] = lillietest1(x)
n=length(x);
x=sort(x);
for i=1:n
v(i)=i/n;
if x(i)>=v(i)
s(i)=1;
else
s(i)=0;
end
end
fn=sum(s)/n;
end
Alan Stevens
Alan Stevens 2020 年 11 月 11 日
Sure it works!
first it sorts bd in order, so x = [1 2 3 3 4 4 5 5 6]; then it compares x(1) = 1 with 1/9, and since 1>1/9 them s(1) = 1. Then it compares x(2) = 2 with 2/9 and since 2>2/9 then s(2) = 1; and so on through the list. With this list every s is 1, so the final result, fn = 1.
If you change, let's say one of the 4s to -4, then you would find fn = 8/9 (0.8889 approx).
So the function works. However, it might not be doing what you thought you were asking it to do - but only you know what you thought you were asking it to do!
Julian Wzorek
Julian Wzorek 2020 年 11 月 11 日
Thanks a lot for all the time. Could you just check if this matrix works for you? I still get 0 for fn :C.
Alan Stevens
Alan Stevens 2020 年 11 月 11 日
編集済み: Alan Stevens 2020 年 11 月 11 日
I've just done that and the value of 0 is correct for daily_logreturns, as you can see by the graph plotted by the modified code below. However, if you look at daily_prices instead, the value returned is 0.7305.
load daily_logreturns
[fn,c]=lillietest1(daily_logreturns);
% [fn,c]=lillietest1(daily_prices);
disp(fn)
plot(c(:,1),c(:,2),c(:,1),c(:,1))
xlabel('x'),ylabel('v'),grid
legend('v vs x','x vs x')
function [fn,c] = lillietest1(x)
n=length(x);
x=sort(x);
s = zeros(n,1);
v = zeros(n,1);
for i=1:n
v(i)=i/n;
if x(i)>=v(i)
s(i)=1;
else
s(i)=0;
end
end
fn=sum(s)/n;
c = [x v];
end
Julian Wzorek
Julian Wzorek 2020 年 11 月 11 日
danke schön! :)

サインインしてコメントする。

その他の回答 (1 件)

Alan Stevens
Alan Stevens 2020 年 11 月 11 日

0 投票

Try changing
n=lenght(x);
to
n=length(x);
(Notice the spelling).

4 件のコメント

Julian Wzorek
Julian Wzorek 2020 年 11 月 11 日
Still I get : Unrecognized function or variable 'lillietest1'.
Alan Stevens
Alan Stevens 2020 年 11 月 11 日
You must be running it from the command window. Save it as a script and run the script.
Julian Wzorek
Julian Wzorek 2020 年 11 月 11 日
編集済み: Julian Wzorek 2020 年 11 月 11 日
Hmm, it works but the fn is 0 and don't think this is right
Julian Wzorek
Julian Wzorek 2020 年 11 月 11 日
Does this function make even sense?

サインインしてコメントする。

カテゴリ

ヘルプ センター および File Exchange で App Building についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by