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 ExchangeAgriculture についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by