From 5a98a67f29d5e94d5a28873a07c464d711f6f181 Mon Sep 17 00:00:00 2001 From: MarcoRianiUNIPR Date: Thu, 3 Oct 2024 15:10:46 +0200 Subject: [PATCH] Added option exactR2 in simulateLM --- .../helpfiles/FSDA/images/simulateLM_01.png | Bin 9074 -> 10690 bytes .../helpfiles/FSDA/images/simulateLM_02.png | Bin 17446 -> 17807 bytes toolbox/helpfiles/FSDA/simulateLM.html | 309 +++++++++--------- toolbox/regression/simulateLM.m | 160 +++++---- 4 files changed, 255 insertions(+), 214 deletions(-) diff --git a/toolbox/helpfiles/FSDA/images/simulateLM_01.png b/toolbox/helpfiles/FSDA/images/simulateLM_01.png index 1403a6652a317b5cca7cc2548722492290087f10..7a656492a1d743c2844149def85d901790904099 100644 GIT binary patch literal 10690 zcmd6NbySqy+V_YeFo1wGNF&|djSL|%fOM$jkkXBGNjFM^gaXnH3Q7%vlt@d5Gzik) zMxS%ebIy9tTJImxEY6$3(j>v}@@|6}U7(xi|gq4fJTUq9=m>`LH> zAN9%DbD40J`(zk}c|_H|FSt+ceZqa^kA4}PSm?~h7dPxw9m@!;&Z4lVx|0-tyno$A zXV(nnHb;Zt1_WwVI{2SWmCE)gz>IGZ!*j^rSbrmo$Bzi|&?-Ti@svI-mZFXS*6x4R z-`}6XZ`0J=>}*0tNvT>0A6R5JsN)k9v^1%*^LBFL8I{t=oxT^($sWhE)uWcE8bvni zdptuS>b5yiZF#ggp(c6Z;_G`cS!+{Wu|3mVUr{mWIXyaB!1MqjmF&U-d;0XLk&#gp zF=ri{&B4lNM%7n6L&wVgcQ-c{Y+Q)CcqSC?;81ZuovBJCUjQZuhwR~+_15#sEF}wX}Zyw%Hw;0Y}lRqcO&Fz zxp{aJj{PU(+x#{(JPh9u zr=z1=TwLUA*_AmWJxSevPw2Gu*JdqY`T6;&97dD%4kq^eN(_nXE?(p1MxC9V1H52k z$|-Cb__UB5eGwyB5w}fU+ITA)8)rY?-4AGJw{HvBP4Y=d%uY>Bjf^C!FmRf*O@I5= z@VN7KZEk3O`M~hT`B%Og$rj`mJI%DUVo>uf!hB8X$wueZflSeZESCW(ax$_zR1!Yh z(~VtSU8tBu#o>1#VxB+B>I1VxMiwG9Xuy5bD=RB2m4!gG6pL(N5J-?l9G|9+`$5sJ z&JGp)kh`z6=E8bbsn@o0BadawKpl#z$eZ5(IlIFIk8hG{HhF_x;&d%PcHoup;wmGH z`6xd`=EZmBYh`u4G46DY^svBN*Fpc+R3+yY8Yhnp$zgqJPqy?O>wie{ zC^87OR;6x#-B!+3gp{NtH32;YeT=oDB~Rp5Zd%n%NVt?V%JmfJ&~iSrY?WuuA|EB6 zC_El_H{#>v#hImr#n-obBQrB)BKPoUz45(`;;2u0G}5q`VLNSS+c6ZPATxNqk2Z_4 z{hHd^{I(`*OM_4#TJPhSn=30T%gf6@MG@E6)!EOsoP3PHFQo&Yb;a=(%+4CGN{eJl zIDVH>Pzam!$O~$3HiWWkGV5c7zM>J1p^|KK+nNL^adddN)M_>b!hFxeP|@^p>6_*g z&0lYJc+y`=hP0;;{t0>qsWzqB7v>=u)N`n*Rb*!gu`-l$(ySl}Hh5m&^FI9fvk+ba zQn{w4=6bcGrKN(%90JS}FI)C2L;IM1q)ti7&}pD&4s+rNj}vW4=6Sq%PtwfV+FGG< z>e1Fzkq9nGa}y%*H~(EsBb{z{fWL0?&&Z^)15f+xXe(qeTiBT)S;^JK<*j}# z!pf?67aN2@9Yt(+P^^Y>>1Btl7^OQr@wlbNXOGyU+C@?C3*W}wLO6rE(S!P%3E(H{ z>gpmQBBmMV{LZ#O-4x&Zh`;V~nj1!`5Aw0e^+#33WSzLMFsWAop}L=GvDowJdl>zx z`$xxW7^>b3+CT)!{}VoiQD+`!STheB8#@e#O2U2H@afaVKvc|8`6B#i zw_8eIBzk01(KGx|d*y9x-fZAPAlf{o)Tm`^7|pvQM@%X_Omh!7Z!qETRQcF?rpE67 z$PO2R!cn1W-!4S#aLUIYJWh~45%9uze@q>%W{#V!_Y~=U!lbF7Csbo%j%LCYJUt{K z1%eg=!TW2{c3N>f%;+6ro!t1_+9z--c_$m`KSk$v<@r7F5D9vYQjm^fo|IDj2TnPz z;)S~J{`qj97?oLT+ya3P7v47T;K!Dmo$0TOJM(A zXFTqlaY@9o;B{85x^*{okk=loiHsYyl3X!$NQyf4{_PvMmzb;jOp!4+IP<=$^)tg5)w1q^K}x!} zzfxQ%tYb8Deeh`H=Y6)>`~3NNh*%z}+zoC^4O!aww2TZmMTk&{j$w!)^eDc#jH|-a zl~|6b$4Lq-1S0=sR@RY6s9EWBApEyH#L7i*&r?0b zwhI_`JooPt0nk*EgrSwny;f}M<<(SHX7}U??T+VE9U~)Saxg(v2QU5cqJ*$QNTYBm zpGj$5-ex2J{0cj>pSn0xu+B@&Z+5E zoYb+bef#ZZLLJ8Ng0vP9KLiq-|EJK9azLwbHNHL2ir&t}gC=M=byF^KSwRiHJzr9q zx@Em5hyNeXA63y|dYf`Sr|2Xk#pOQ&$8@xHlU8Pof~Ijor_jZLds}>i_*j&BBu$Ti zK4RM4Y#MJ^jOPHRb`YhkO!T#ssh(HU?RSI{nzp{?=phJ{-GScGbaU*~4ptg^!h~F; z8hb$vO&}QC>It0fenyxJpEXda7{1R%|8Tk1>@ok{S$q_E>4ZQd|IxT-LTea$1O+^Y zA}^wOctXB^Y3`7gX6YOaB2KLPl*Lm)6U}m&XtBxtsDM0#vSbgc$t{h`+|%jja;{xF>j#u;>sfpW)llJ&J@n`ni2?c zJ)=$dAgw7D=y--+cbW%aYC-=4;{p6??8wwlm6-kzBnA72%-Mg6tWwkobCu=*C6rYU4J&N1($BR{Z z)|XW*4=PD#gwRFGszhBkvfwqP z9H}9_Um~vvt%jEiN(eFs;vQ8P`yQ@otnPgXLIWt89rO1g?wlbbugJKqUlj*YFY;XBiSVUjVX$!Fq6D=eXrO#EFHKHkcxIbvKC z$rR{HULLNltbu&2uoUypF9j<`l^aczW#nDn%F^UV(1sU;sr+Yci%)P|cRXTdk z{;n`|P94HMEw79B%NJY*L!-@XL2omVMcU6Ak@N%wT)#v^w$AthosGmbdq2~DVwsLq zB5&VB5Cl^<_^s_%hLqs=3o*4%7ZRZ=k}kKFjaH`ZzxP>EKH)t5mc}5H)l!0zK*<1w zyAX;K@s^OC$eiee;#Extyk~am(H(^VXw6&jPTM_+VzN-xR}H15UkY(dSO~*&6*rOD zxc?EC2MRAPrF1gheuVpB`z6vGA-^)i&0_8o8Pt$9C@T!)1>S6T*9+ehnKt63e%xa*xtxU z!|B$H2i}HsJ{5g8BCXfve)qOD4K%?*Y&I&RwXE~l&6JTgn?v|X91*DDp{j2m%|<40 zO=TN;e{&7iHhv%lsv+&srB8VkLgGg#&HgB(3Az>%2MJW{q*$o z$9RS0K|e2m+dAcj8Wc&l54S%0ZOM&ppZ>JFS_^lIaS`K!w-o1ARO}qLU->d5dj6UZ zoAWvNY+&E`sp>6&e4iHgwx;UeL}Np68In<%la-8`T-M#&&t^J8FrBm80f(8Kn$niP zAI*6@D0n6`^b6ZX&W!ise(8`LDqUh<;OO+U7$2Y3VWFDeej*K;rc$(T&*FHf&$;f- z(4z|)ix+RCrqnmxO%4~H{R$qL9GeMb+VMs?#C2cs!LfF7aso9KFzLmv=;K-MiVm34 zMa1y)O98bpD)Rkt{`1qOCqsiJ3kK4S{!3lR6=GktA%UfG89(MRd1dhwwpWs61<2Gu zWxUGbTsOeRz0dc$1??seKjNzaMw2P(uIei1g}LBVY=W5rm1I0C;BaY~e4CG6=PZRp zk$no27I9jFu@OamdID65?e+DEc7R>N5%9Bmsux$6a@()<80>R8e~I0usfZXA&>zCm zk7r9UCV|JPW{Qk`{kkG%Z*T8+b#Z(!Yx;+PO(Tn#=P*b8((pf~+6G!B{=pz8RVOT7 zp-azhV%C4EI`6I6Ig<`RYtb%x>n87Qn%lwvZ5*0D$QpO()L=13A$7uD?}{dOUg>{E zIX*r<*x$d@`q;^7_zdLuvrouTJE`hfb7JbzOPWX8b_>fF2KDwcO|Eau^*r+n^L(^f zc0{U?by|FMCK~wbPRse~Y0S>+t;XdiA zZj1q0A?_x+XMj|6wK? z6J^G&r)xv`1B*duIQ#ssS0cE?$U zZOtE95rt6l$Q~{+-!B>^caqdpeQDLLe6S*pFNc}BwUn-MnIV#}J@D$fD7SbXXoZ>T z-9Ob!BTkRJG@!x3@~^K?QFCl>*xKtKu1H#53B1sdZ{gFKhX&@5H;yV5>Zd%FOV>bU zrd8Uy*Qz$1Jky%NXVLQ3Yrm(vDoI>|tE8k;XVnXNJH*alBPY(KIiGsHbj>AzC~P*K zEQO<5BxL7>YBf`CK}dSl8+4$n$gh6O>pJR>}UgJS@1S;5l(nc%t4Cr zSmte{E51IKAPp1D%dy@3`8l&_<(v1&{Z@{qx20c-^$48OQQ2+z^mRE2=&_j^$(0-h zrxOi@E|TjDJyY?OxbvR{n+b=<=(xrwexdFlb^1ZAX+9WMHCOHID40aXoK1^FS|7D9 zX|<_T8c6B!kCHF9YTSV)bS2I4^Y9G|d`S}z=O)jSn;`ATvvMXTpwFEya*1qXv8%A7 zq%sf+c6edkx_Ch1Gam>qt0yy*O(=K7({PmKc*Xj@W87r41DWxCdIzRtkYhqO&x-C7 zo4b~3EKZ3?6S;+ulfGNDmfA!yVdN>r-@93emYX~^?Vq>i)zgxybn#=d@criH(?&{J zt;%8kCDb4KIn)t}&7FO$l8s@eA(qM<7vFkXWeXA0Mo`J~E9h}80x-xXt?e++14T(3GNZlXC`G-VS0_PoS`Yr+Gv&LZS6ai zHIG(!)utH_HSMP1aZVX*7)JIb$xGiYTPuAOYYFSxoD5V~#%$ka1#5t zjOZJ6CWh`gw%s4O}i+!=l7+|6#wfTBb- zFCPAe1Qv(;zr)72InEy^{)WfeWbJvwHgEFtkB$bFZH`FMXC49Y1ug7;zjN6nQ zGKIaG%?4<)n8X}n{+BHW=VNbl$jQm89Sp!3I$WsCjs$}G*FQSQc$q=!nQ&ra;ykKR zu9a$(aNTv;{_zM|wf`V$$>&71;!ciEU&~z7j42Rk;tqKWQc_a3e~*)c)r!Ar?ExAN zrLBWQJsa!aZ&{oZr&==nzAqnVHzHcbNY`uETl~GUlr-G z4`fUk`GOe+c4EUUiK?i*Rc`@4Flq641~Bwcp8NpsfSk0fZ0CGu*kGpUIFPYTKcEzH zqd-b?^{y-UY>Q{1ao>eLPy{%KD`@1gc`@)5(9rMLu~MO8*w+{&7Z|;l(i>VI`Iwqb=92?Y3LI;qA5Ix(HG3eBMd0Y|xBo-5S~iU%9dt$6~|Y(JC`~ zAD+R|WX|W!|C_H0$=+qpDB5bvS)A#v0}bCj?*5a-@}TX+Hq<= zCU8meekZkiLI#r2Q?6EOVv{7Br}eam6AwD~K$rvumI-~<_W zh-ReF*bop%__bc%q9W}`!jx`ovWOknUlwI6l9W$v{dR*HeT8*8WKN==Ap&kB0yEr7 zs~Wj`(T4cFme#-S>TAM+%S*p8n&8}BRYT)T9{D5S1Za&)1PG8-DsQ@UF0(&4R=@Jmj;4dFn>8K-al$ zmtX~US;C6cvMEWfM}yUyI)xwegvOS<*d$?-yB6(CM_HP`ygTLX z>uHYm;Q{*PMshQxt;V*d@+dUxF>mKM zp9ThMu`Y)RytozO(HUAGu-C|wwg+s} zCjTINhJ9^~Si)Y<@1(wrKB3Zpg@FWk&F$g$zQC>|{d+&$GoGnX(|ii?5r$6^*t>uEq~FZ zfBxPn6(snXzJM9dCn`G$0u|7B%xp>L6&04`jkPu1TEy6wFY5E;wjhW_DPz&7@-+e_ zuwHa8sv`EYaA-{K%|BvXN{W9ynGA5WE9pdpxbNxV+FG%>UaZ)DPo8`f8!{s+%ihN3 zWm;N~@6?n-yYJeUT*fR9+Dui+!!NRcw3*b~8y#u?mPBM@S{|UZE0b8k8ik>fCh~$0 zO`&oalIBl%X$9Vi?H>mZ7j4=%Z`FaDp_jrBWb4#=_G^wdTnJ$Yi`IGLbF?rf%!=B^6-R^WBs1`2{>3aQI*nv8fYNfckJsNKgDv z8?xGb4g%5qD`tO_dkDm0K*ACN!9ZO10syv88z4!KPnMxiosft5FURKhtNb<+*5EjU ztNk!D8BJGB%ypIrcgL<2YZM6RpDy2lbjjveAp&5LF`)cWvWDjc8K%l0(*gnuuwAOHN6lqo6qP*;|xNeQrZ7WKGu8lMh*eX-lDQ==1tLf%Ype3bjqY(Cl4_^67? z_k85h8aX}{n&&VB5#xNa(Q&u1q$AVfC>^dyKVG<0tHRM&_nHZo`(*X*vye0O)8{5m zt1{Nw4=eiy{IPC>V2?n*yM^~hn^pAwvs_3D_f4R*gsOiWx`86oxe@ipnJge}v&FkJ zN!pe}r~UDj`5e&803PDy<+b_xc71#M5yc%y4i8{x?sLBGz)%D3VY;~Y(TJL)k%>vW z+m`;A^bH7$De&LEebd#^8DIDmWnf?+=rHTE@DXDS4}A8thxFflbXhyG%ex*11a$3K zJC&Ky({8_*8gAJ5%#HlQT0dMLx%qn#a~L{i3HzP@0um_D6DELJeQa@E$z!?~bHmny z{^XZ_)SpbyN#G2cno!7tGbGl;XaVLrW?n;Kw>p@u#*mm|URz%e3VVA+1!uC-*0;+1 z!ovGInRRw*s;VsL+z^>N@jf_of(m!{m#YF~;5n~ql6sdM97^^^mWmV?nVSLjvE3r2 zplAhg-sXFj^Z=MhSzV~iP|9kr3kI$`PPHKyOJR%wTd59gWnQT6JKU~Pa{SN%o z!d}A$?mk`u@rMwCwJrpioBWd80yU*J6O0fz{cs8y37LJ`hB%ZN-G`m!;jdu#KITKO z151W}`-mdylkL>e-pz{(K9e;{I2#et_uiM4TjNRrb?yD{E*_@W+_5ziYh+F=;pm*< zz3$EV(+Bc*U;K|l{@Cr>sv&VnfYJM%j%2s(b&&%N#h}hMeZ%oBkjtsgzoR*{>~&q8 z4_^5kRcC8c#F+Qm-pwG@fSnr#9ZvKtB)5~Eka`>qi0=5DAWbAdzygK+ zc&x(jXMOuc*`!Cgach&s=Zr+)1A#z}GC5xWpBD*ay=Y8K>(W^c2bk}4eiru)S;SZfa zELJY@Ym|e=4}SjT9n0Gpfz&8H+Gj<#+YgV9L~w@J4+CzZiHL}db~$g1 zmekb=tUhygKKS@Cc+!K-^I?(=2zY=%fOIY4XOY8H8zYC>`5Yd@Td=R1Eg{Zz zJsjsdP?1&tX2Ta_Z~nV*Qyk5xtct(9JmCIBQ$1z!Uhh54C)LaazB2Dg;hyy~ZZDnL zp8@&+jG+>(Yx}maP~O$>E1)PKb9ThqynZ5{KFuF?yi6@-==*Gho6X6KYR)_u-_L!Y z_odS$XT$>X5N&s-1R{iR;zR1SdE)nJ3VtzJKe@)a_>|Ih^;vKVu{ui%6N>#W#c zo}Wnjw7n-tx=*9P)1CC*RtfefO-Q!%{h!=&OF8*~Ms<&bM4eCgC}2Ou_adMVOaW?`7DTI#&$PqJhVN7U+|E_k|%_#q{ zJpc7-_~K`UzwhPAYK39r!np`9@5tPoKWOOLBxhh?0F47T<%ejpmD^qy72!~b@PSqy z6^7)l@T-M{DsX&?GK>12)(n&62L{s5fQy8ej7D*`t(~8O$f8YGxo%4usJOa3ZqN2y zA;l1!3C!1Ov#_veyZl)Z8x!LPnsPu42L%No7Udq5Bo&T;n!62DtjmLJ5a<(@VPRoo zU8ESL4uUcJmwU1PZ*?mdfYPg5ksch&(ehlgj^mFZ=SaNU!?RChupw0_8-F^@vW} zKB0C%ZZZ6%$zyK;fF8-c2(^~OVdc^%vKsQ50umAue0)hN49A-j*H^`a#R+W)EeMl5 zpU1gg4;=L-{ui!el{qc&lT(n}wSd7kZ#Vq_n`|uormj_zGy~cQz-^s78F0_?+9(0N zStU?T7Og?jyp~wdU4&`!s{^P2AfdOxt@OY6VbWOPw@5zsoh*T=aQ`RhKJq(wIR|bX z4%oGfyr$dt_W|Q3{^Dm@*FO{Mf1ck&LKnbGk1cj}ez3K*WpX;4y4|>%H83!+3F-_EXdgqa82f%bF|cKh`4RgpLBLM zcXioC?jY1Iakg1~Jm-J)rlJjTJ{L2pRpN88%;_%-upNc_biD6sZz3Zo&IBP5FO>>y zfo0^-cCrEj?YME!cN+k#104TfouE9GV2^nK4);6(B!maZZqc00yZT z;NE+^=RMy(-}=_K)>-S^f86lg&vW;$uIo498fpsoIA9zQ2!yW)lhXo$(0M>0w48hB zKubnc*a7ed%S}=B3DyQC1`$3uXu*vL1fl~e%E{<>e%hV)k0Q0cYX8-+49R*4*75jlt3w5QSXp!s;E;bqOt^sabf?R23TgFUAG6rWvPWTIKo6GNTu%fG0;=`#R zjjsE?K|n3$uHr#@Z*+M0*H8Yz zdZ~DB1~}h}r}m>U3$!`6QPmVlQwD9>mlXMD*e7WYy`d*nB5N$H%1E;2k2Cu5rtejz ze{br}`9xi7u2@ik3bwA|r##=M+-3tyoSuUA0;+0iThS2LTrJyIuQY&}R{DvMeCVwF z(U$_1p_m}TfRO*D$|S72FRLA|{dN?^WQN#%KGzb9SFfx=2qp#zyxN)KUD7`|Pf%i- zhcJFkpaDr^0`1b6c{?TJV>)LL1wp=!Zj7FaP>a%@9*>)GNjY~4FT`5E@Zx2c)ODs9 zj^z{-9i%OBGNuiMLa(l_8Zk5jB^W{7flge)xvuL2FQ=<4`;s`>Om&1$;h=V&K}pn( z-`RY=7|zKQlnpc5WaC>m1Fq@yVY0&SvfqkwoUbhS@sJoqvG&ovEama*B2?hsQ=Kdb znzUa1T{<#geHI4C(_!XF%V@rt%=or%Z?;73zy$PT~1Yp4M zowYDPA9_Eg-fggf-R<7}si~%^%K8h$cPMJ!ZkYw4q^sjs5Pc$;`var9dp!y*Iouou z0ukBVRv)V3!$dJtx|Mka1w~D->=X)hMrdGoG&D4gP}sM$5S>Dui;Ig#j~|KeGT9}(_cH7jNmq7!WRUjxvGNGYKoX;j^W*%D)e0spHM=k0i=OG7r>&Y<}Nne0+S2M?g?++SZzz+i{k!RVW}LQov9URGqF3_XjOdhxaGPy%Y~tN)EL@Gw`}m3+Mf~{k1m85X0_u4t42>+(D4?OQbYSu}u!&{* zqaPHHgR*7$WT7J=?@I(IB%Z$IJI#dHYB$B|aw?o*74c(cW32?$(VkXQgX36!V&r_? zkP%U;h744VvexmxWV!mmh(}{>p_tSv+wJt=&qGqg#7Eml zxNQ7Tg#ij{e;D^!_7P?V&KEA5F#7P|5Jt@lW6#B)nEein^pJY9{vz9yBw!pS3iUh_ z^Gt{(lhW>*-sf>)vsew5x^cf{ee;(ENpZjMIH=Cr7{fvm9!%VsVCaC+9SB8{#ze-0 z9oivT@3KK|FA(Eq1d0(mYyMN`Bf(IS103NZH1e+D!I+;_DEQG)n!`s{r=hJk!8w8a6*Yj zHiKnRfw5>1qQ&G^9jk2;MTLYWCMJYX~773zSgsddif*BF$n4x%NxseX7AAWjZI?Nk=v}sJ=&Uio7rgj5<9g2Qp$WOxgMhtnw-I1$5E&i2 zk07!oEqYU82kY!RJ>Uu&*&0Fs*pDtN8*G3PUzWYoXzy4Sq=&fb>nf_H{MdlPg-r5~057*2Dt6VJ zakLxx`G?Bx>souOCp!%e@I82g=Gcr@FV38h4SNbhFetFlox-DtoXgrfwm5K+KWlmO zt+TxOUlTd~(%647%%=t&$u`0E?h{5lld()2ql1K~Fr`itq}!KXKjPWvBY9tRfSP}z zqUYJU-9P&*JS0b9PB--=*hWG)Fj(U0%UthSoN?N2CnIXW*M&(#dvTb*p&3?eq(rhd zRadJtkF{o(^`J#}brRPZqL*8n!Go3K6WZ-D&}j{kuPFo=ucFw&-1j3GJ1ygqdg!^I zC`)L&cc=RCvz_|U>%`89SBB8%&p4fLJQ&!zlzJ5;uLNrkhv9InQQUs3? z%?9pH)g|QJ$aR!pGO)1fA5szFE2do953~x3b=&6AbLCjbkmv2-$n=Z}X%p7S(eS?| zg9x_MlaS-Hk{FhSN1nH#%)VG97G2eD8(_gXw5^ylt1!>3U*vIdfwdOQO7&cx_PBtI zl0y>zP{v9bDPB6qdQ^R(>?(Y6CbQv9EJ+!H zzF2L>e(DsP$^1kHs?`&QGG#jN)Jkq=QqpOQLPdY;A|ncR@~a9Z#l=@-Vw(KH^t7jl z&0{5r5;d_&^u_5bv!G!@1EEJR7o4W%;~lUTMO|7I`{#E3S|=v^+$b%Q4}ND@5i%Jw zu3KQPv2o`3enTUQ;;4ed2p7V>j~K?mx~VcQ;IgGcXD@n#8XH)cl1^6*p1D2K2$)>k zJ*9hHzTo5`nJaI_jy9G_N8AZDpB9dy>L1sH*e96~WUzW5!szkbut9>jFnWGeybtNj!)%~RpAHuy6GzF zI111zg#^pME4I<#bPol!?4f$nb9Z0GBm!nZij0Mm+97&X99TLLB1ch;5t#v*e!I)j z6l>ZCAM*ZCg{vLZxa81cQH`gz+gfE1DvBTXydlg-yDV$>N=^n^rSw`>ythgdrD7i~ z{q#ttdHErO9O=oxYR`)Xy4xMg20LUhO@&vw-1(dzX3aAprck_egS$)Yo2VjBPp0y` zC8afI6dr_wG{eot9ni3Cwf@oTr-2H}VO?L-LA+bax!a6&G}G{+AeP8gIZ}dgh4m8= z--Wb&rd8(-N=`IVmov)U(FQiH)Z9hmCog6p#JU>G`~@L8tm*Vz`@YNYnzewEDW_rF z1IwD{$D7FljG4q7Jgr+ChbnGhO-B&PIf5lng^W;n7ynn0tePEO!=ITu9^5DCKghYAk zMbTcE3ZE$QHonpb%aoUIezHpO%rHqH=L&V^;dWc9Yir#-JkCx|Z1FlJJhdf)R(w7b z)_3G@lip?8r}|a@@fEnZ1I*gR=3Rq`FQLz0hzoIB{t;eVD|EI#{lz+6!bi`Xr?>7M z^tvldIZTG#hLgD5rWqsE0p9XtnWE{1eE^FfogLO>@3YrWN8n{9EstMs>71>vt*wQJ zV=t2Y9S=4DF{Y+64E-;sBf8#q{NiUkJb~5P8GlSUMOrnUEUIqB0XPRYx8q?2+SkBSH;&es2(L!vcV{E7h17OY-mW^Sy`JNv`O+ z?-DHKkRK2!VKb9GTpiw{q`^!+FpoLst^f?Ix%9KW`Pu2|loPR!VuQuo8NqR9{ru-D zSd0gO7FT&fJq5%94|P{HvdsH!7mwBl_cu14);dhrOqz)KT^yH{am^F8K)X9jlFPQ^ z6Pn8f$@LA6WZZ@&-`Xu|qPmE_#f2b51{z;)1K~Lj;EC-gIOZ!iVq3!^n;CT~?W8~E zX!F}njl!wB8kRz+WUseoktd(UF~Xi~8ioW-nCn7ulHc^{dr?;MGO6w+_?-wNX@$zo z@;SAUby&oP>H%Oa@6*KCvX~5n-0Y#iS|fV`X$Ei{AF+}sniYYs z96oF=i?8}#VxJea+<4Tm4a_UPwijOORbc!YlXwTh`?iDBqwC}2!u$+;MJGW|;f%w% z4`#eW%02GYWq31&;z-}J_F_{E|5_J#HoFZ}iCcAE<@$y^X{r%E`+_fUfAD1QO{{mo zVH-z`(g9$?&A!f6-l6@<=gcpA*Vwx&fP)2cJR$S_`**2};TSHH<^nPJUHS!h?#M&SThKHX@1q4(S0B86-_z5B_0aSAVyhp& z)z4Sd>%rtEEXjS_6Q!dx#&6-AG?mOFIv7W)R7zru?CzlKBYcMhBDI4;Raz$9L+a4> z@Ybzy7(}r;qbQMN1|AX`%5Bnoj#|9A?xb=$zP>JN+S58WRxre&_brnLPNkK+Ptgp* zPPd=#JBwD?NXnP^+)Jfmhf%HUq%UtMM8M~Cr}SCf-Rn&Z+H>iFuQ^0j>q~Y|`*DnzDUnMzLZA8}>k_kb5Tm!l%ol~u{TWQxwFSE9q6=GUic zMue+n`EbN41}PuQrDOpSwy%`|10+5OKZQ8ou;X$p$=35iB)(ju|bV!k%41-}Vbjiref z9gM3OxQukA4BE-=o^<3{DBN2)9i)FK9Y^Uak24SFGyIZY2&r6OgBZPwjL1j|M_D_k z77)?0y_Xec3{WvD_yco33=(;)N${=XbCIRjStewY)E-r^q)L0pXwjo6t{iXWoxea5 z6ctVw5-q>{9Zp0Ge$3Hu`a-g{nd6uWalJkjpE;+ONDk>z$B#%U} zb(2mn4-zr-+TqHG)$;KpgBUNOt=fm1i=jFe!EAD=a1lo7X^~sNNvJZtsqeGj6f%~k zmv$%^3?uY^7wdHX4)E<>4<88=-C(O{#OX*0U=n2{v6hdC?HvD)2(QbYyi@}@ z?zghJBHBGv&NA>l zR^w*4n-r)>Gz=e$tO`PiW3&fBbseEgKC5#JlVK04W#z}*d+8$MwZU=TUR;o*M26)e zP7s6MkbIv%3}}x2PfXfoz8#kM@>Lt>!eR{jU}lBqg6Vw-230E~4z|`KuvTpXsVQ0; z-mICIRs8F8HkTxsCRZh>mb6;sH}r(~4w$3JZz!dP5_;y$rNKiq$v}>!oJ9<{Tlxu) z+ZIhhni>+p@x`E=sGzL}#a%y)i4`5`z*@4R4uoF%)?;PE;024%eyjmHFLz_-Hf&(n zmGvd=P1@?efo0Y;e*cRAi2RFj>u z`vq&q-2<$}OKta-mKJ0iYw(?57Usyba!eqXHkB{EZAA0T9Oh(g6?TM&aTdxCsXu2q=sO;_S zsVFE8B);gd0U?Iny3LKeDEJ4eT|&*dZoCEq)Y8tqfyjB)m>&B;Ibasu!q0j}aX$-h8taWo`F zwx?2c*L7&bs=bCFjFmVc-2j8Vf*8GP?y9_6<0K1W+rDIGBZpj#;f)Dn75hz|0F}yg zN)Yb0F9l(J0jAgxTp+Thnulcf``a9g{xC`%>^Sq$XjZZ2?{)97ap9wvylb{Ya1e<8 zuS%surJ4W(ojmb5mzrILX*aJ)>VPWo8x}EPq17=`m(IE4+_xbXQ5;JB8Lsif75gMl zUU;Zk#tE$vo54c<^BSfV2Xfr=a1MC`2!-aAK7}wEE?D1M}8$-~DiwgoMqt>eozvQAWQi#*GLWA6w&zP=mEHd5Sft z5i@cY@4xKuC2uyAeo9SFKFP?SF(LzW&M(4AQ5Zd(%ch~CQ`Nb1lpSzXP5nspZ*1-Vp%5a6Y*cT z_BXg?Bg`X;2sBC!D;b9Wl)v*V3IUGz!6g4D^8NkA-_`TM;7ULX%FCV1%*>X)1@|R$ zPtpKucnA=Bo1^)Y0A=WhI%U<)6Td!R0i3sTGS@f_DTwZ_a^B8;n#a`+(^UYKA?mtT z^0acfJC>o50Uh+iT=ACRTorCZs&+Ydc6E8|FI*L>`}Lj$-IADzy{lEx8yflzM()}x zCmnGdsxPvI-CHT$&wF&#JAZs0U`VDf zsO|nY3;vgMhV>p7+WqsO|7DK<%VUGD>GwO4vD@hMn*ciew;2}l#X!xWPKMK{p(<`k zv<5D^xQEdpjFELLsUHh8Q-Aka`b|YXAAC3x$=!NB=Q=1FJvx3{a>b}Y(&7Nj8qHU~ zIS7@yL=O7zi3~sqB#tX%{7OnoRXsF7Zz(uZs+!z3N4Ca`pZzXQEhiIStOvKEVQ6c~ zfQ=<5R4lhtgxWbd?eFcqL9Qly?9F*?jTN4ry8jC~8GeIG{Dqnj${bo&pS)Q~3T#KF zg!}+Eaee)!%UQ3~5bz}&UCw|Dc(XHAxt`{;2LzFCtgWq2QvS^0Jj)1cPh~i?#MH8) zM%wb7Q;eKUno4=>8Fe`W9OCJSGPfUsf!5aPcd@nI+}=JC0<4(tUE!Rh+d_7>-r{qX zCguNTccvzKrTJGU6%g*>xkjhOpJ^gR$^3={rl z<8~Qp*U8^!?Pp45WhJ138~3q5gsDu{(+yVrA9Hi4DBbelteI@#qX`7tPkxFv-zm4k zF9yf4J*#sZr;*jk3o2q%)0QkD=UqPlGFXDYFOowvgtRO>n_=(C3wa~CH9n@X0}-*u zkDH|?eX3Y#C;BEnFywLcKRd9qGwo01OTla9Ap@LM-p;@L#=rfivbnoEP7^4SsI)D1E-GgIHhYc24-}%Q zfkEH?pUl8!bOD#{imjYUGhS~jdpc3;KgevJm*6U|K3igJY-|GevX%)5$DE{?(8Dgw zakGrO9L8q}j7_!4v(nh;vqHY5$cMAP5*37~U(`nRepuyCaijL|s<-zwOo8 zv|b+e`QM-x)jvNz>1K$@xgES5u%ZqQ4nVxbYTDJ40V3^uM25df)5gsy*<44efCs;{5&1$uyub#Sr5B$RPp@O{pHJ|||t-fA1 zHXAFnH=e!v%9LOB$BCO|>7cmM+~5(hX49~R(NTVJ@#fdt6I;R~O0FyKg4(uLq3{+0dyyl%z0_Ay(Yg@&ImPTkWY3QMt=fQJ;$ydAPGN`in z9)j-;EfVy2F1=zyD8;L9sE}#Cx-cIlb8z zS%rFKW|mb~cXqJ!eViE&5ATzhhnlwA0dCLa)YKF%cXNgPWZ6nrjQx9}eWJLk;bBc- zOJ?=7F|fJj5IiSU%K!S{;6PhlVpTH2Pdpw3!T{g?7T|Jv@QwTB`L8>;Wc36$XKgp7 z#!Y(Hej^dtCapjUwDmBt{P^rFUCg7buFhjLPt|)xPPZlDeM}6uX{+!4LJM$97bNQ9 zzW_axb@~*XfpTB5*#VIC*(LIbfLi1gpiT|0>(@u=H*Wqn@#&Wq3(a1_^KPT9eyC&l zd*$uEyNhjYO--|Y-+*gzYDKQqExvhX|G`tgC1KuYzh#f)KD9{2^RMWoykzJec0BDR z247l_KJWYP`z)pcHV$wFZb$vXO>O==m0b_L5V2Uaz8X%R2iQL+qbT`{>aH(`LL~(x zCCdcmn-!k-IyS5(oor7wsRMc4Lj|b|&D&wgJHgq-#oHsf%KpGQ%Ny1tNJ@+KN*iyk zQEdmo+#5J}0b8rv--2-gzQG63rZ&qyGUG~!#`E55fGBjFZ#+5wwF2aQ+W?^z4AIA= zhVp%EcrEz`J zmfhOfJe8CzF*4NfEd+Um_fN|4Kh^f_294uvICB1-z!dQN6p-Q*HMug`=kNXlw>G!b diff --git a/toolbox/helpfiles/FSDA/images/simulateLM_02.png b/toolbox/helpfiles/FSDA/images/simulateLM_02.png index 4d2cff2bb8ea5c8bffc089148e62918f30dfac70..f52fa66b7caf9a0f9d268f3d4bb0da51e9eee290 100644 GIT binary patch literal 17807 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 aqBmUa{n7bkISQ=%5HgaA64hcx!T$@jn}vx0 literal 17446 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 diff --git a/toolbox/helpfiles/FSDA/simulateLM.html b/toolbox/helpfiles/FSDA/simulateLM.html index a9529082b..af47a9eb6 100644 --- a/toolbox/helpfiles/FSDA/simulateLM.html +++ b/toolbox/helpfiles/FSDA/simulateLM.html @@ -1,26 +1,21 @@ - simulateLM

simulateLM

simulateLM simulates linear regression data with prespecified values of statistical indexes.

Syntax

Description

simulateLM simulates linear regression data. It is possible to specify: - 1) the requested value of R2 (or equivaletly its SNR);

- 2) the values of the beta coefficients (possibly sparse);

- 3) the correlation (covariance) matrix among the explanatory variables.

- 4) the value of the intercept term.

- 5) the distribution to use to generate the Xs;

- 6) the distribution to use to generate the ys.

- 7) the MSOM contamination in Xs and ys.

- 8) the VIOM contamination in ys.

example

out =simulateLM(n) Use all defaul options.

example

out =simulateLM(n, Name, Value) Simulate with prefixed value of R2.

Examples

expand all

  • Use all defaul options.
  • - Simulate 100 observations y and X (uncorrelated with y) using standard normal distribution.

    out=simulateLM(100,'plots',true);
    Click here for the graphical output of this example (link to Ro.S.A. website).

  • Simulate with prefixed value of R2.
  • - Set value of R2;

    R2=0.82;
    -n=10000;
    -out=simulateLM(n,'R2',R2);
    -outLM=fitlm(out.X,out.y);

    Related Examples

    expand all

  • Use prefixed correlation matrix for cov(X).
  • - Set value of R2;

    R2=0.26;
    -n=10000;
    -A = gallery('moler',5,0.2);
    -out=simulateLM(n,'R2',R2,'SigmaX',A);
    + 
    
    
    
    simulateLM
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
      

    simulateLM

    simulateLM simulates linear regression data with pre-specified values of statistical indexes.

    Syntax

    Description

    simulateLM simulates linear regression data. It is possible to specify: + 1) the requested value of R2 (or equivalently its SNR);

    + 2) the values of the beta coefficients (possibly sparse);

    + 3) the correlation (covariance) matrix among the explanatory variables.

    + 4) the value of the intercept term.

    + 5) the distribution to use to generate the Xs;

    + 6) the distribution to use to generate the ys.

    + 7) the MSOM contamination in Xs and ys.

    + 8) the VIOM contamination in ys.

    example

    out =simulateLM(n) Use all default options.

    example

    out =simulateLM(n, Name, Value) Simulate with prefixed value of R2.

    Examples

    expand all

  • Use all default options.
  • + Simulate 100 observations y and X (uncorrelated with y) using standard normal distribution.

    out=simulateLM(100,'plots',true);
    Click here for the graphical output of this example (link to Ro.S.A. website).

  • Simulate with prefixed value of R2.
  • + Set value of R2;

    R2=0.82;
    +n=10000;
    +out=simulateLM(n,'R2',R2);
    +outLM=fitlm(out.X,out.y);

    Related Examples

    expand all

  • Use prefixed correlation matrix for cov(X).
  • + Set value of R2;

    R2=0.26;
    +n=10000;
    +A = gallery('moler',5,0.2);
    +out=simulateLM(n,'R2',R2,'SigmaX',A);
     outLM=fitlm(out.X,out.y)
     outLM = 
     
    @@ -29,139 +24,147 @@
         y ~ 1 + x1 + x2 + x3 + x4 + x5
     
     Estimated Coefficients:
    -                   Estimate        SE        tStat       pValue  
    -                   _________    ________    _______    __________
    +                   Estimate       SE       tStat       pValue  
    +                   ________    ________    ______    __________
     
    -    (Intercept)    -0.076653    0.053898    -1.4222       0.15501
    -    x1                1.0515    0.056414     18.638    3.0647e-76
    -    x2               0.92447    0.056001     16.508    2.0145e-60
    -    x3                1.0394    0.055297     18.797      1.72e-77
    -    x4               0.92012    0.055248     16.654    1.8903e-61
    -    x5                 1.029    0.054653     18.828    9.8022e-78
    +    (Intercept)    0.075868    0.053908    1.4073       0.15936
    +    x1               1.1242    0.056285    19.974    4.6082e-87
    +    x2               1.0032    0.055788    17.982    3.5569e-71
    +    x3              0.95948    0.055435    17.308    3.7476e-66
    +    x4              0.97913    0.055195    17.739    2.3933e-69
    +    x5              0.98381    0.054149    18.169    1.3412e-72
     
     
     Number of observations: 10000, Error degrees of freedom: 9994
     Root Mean Squared Error: 5.39
    -R-squared: 0.253,  Adjusted R-Squared: 0.253
    -F-statistic vs. constant model: 679, p-value = 0
    -

  • Use prefixed values of R2, beta and intercept.
  • - Set value of R2.

    R2=0.92;
    -beta=[3; 4; 5; 2; 7];
    -intercept=true;
    -n=100000;
    -out=simulateLM(n,'R2',R2,'beta',beta);
    -outLM=fitlm(out.X,out.y);

  • Sim study.
  • - Compare the distribution of values of R2 with data generated from - Normal with those generated from Student T with 5 degrees of freedom.

    % Set value of R2.
    -R2=0.92;
    -beta=[3; 4; 5; 2; 7; 2; 3];
    -nsimul=1000;
    -R2all=zeros(nsimul,2);
    -n=100;
    -df=5;
    -for j=1:nsimul
    -% Data generated from Normal
    -out=simulateLM(n,'R2',R2,'beta',beta);
    -outLM=fitlm(out.X,out.y);
    -R2all(j,1)=outLM.Rsquared.Ordinary;
    -% Data generated from T(5)
    -out=simulateLM(n,'R2',R2,'beta',beta,'distriby','T','distribypars',df);
    -outLM=fitlm(out.X,out.y);
    -R2all(j,2)=outLM.Rsquared.Ordinary;
    -end
    -boxplot(R2all,'Labels',{'Normal', 'T(5)'});

  • Use SNR and include MSOM (on active features) and VIOM contamination - SNR=3; - beta=[2, 2, 0, 0]; - intercept=true; - n=100; - out=simulateLM(n,'SNR',SNR,'beta',beta, 'pMSOM', 0.
  • %% Use SNR and include MSOM (on active features) and VIOM contamination
    -SNR=3;
    -beta=[2, 2, 0, 0];
    -intercept=true;
    -n=100;
    -out=simulateLM(n,'SNR',SNR,'beta',beta, 'pMSOM', 0.1, 'pVIOM', 0.2, 'plots', 1);
    -X = out.X;
    -y = out.y;
    -outLM=fitlm(X,y);
    -Xc = out.Xc;
    -yc = out.yc;
    -outLM2=fitlm(Xc,yc);
    Click here for the graphical output of this example (link to Ro.S.A. website)

    Input Arguments

    expand all

    n — sample size. Scalar.

    n is a positive integer - which defines the length of the simulated data. For example - if n=100, y will be 100x1 and X will be 100xp.

    Data Types: single| double

    Name-Value Pair Arguments

    Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside single quotes (' '). You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.

    Example: 'R2',0.90 -, 'SNR',10 -, 'beta',[3 5 8] -, 'Sigma', gallery('lehmer',5) -, 'distribX', 'Beta' -, 'distribXpars', '[0.2 0.6]' -, 'distriby', 'Lognormal' -, 'distribypars', '[2 10]' -, 'distribypars', '[2 10]' -, 'intercept', true -, 'plots',false -, 'pMSOM',0.25 -, 'pVIOM',0.25 -, 'shiftMSOMe',-3 -, 'predMSOM',true(2,1) -, 'shiftMSOMx',3 -, 'inflVIOMe',5 -

    R2 —Squared multiple correlation coefficient (R2).scalar.

    The - requested value of R2. A number in the - interval [0 1] which specifies the requested value of R2.

    - The default is to simulate regression data with R2=0;

    -

    Example: 'R2',0.90 -

    Data Types: double

    SNR —Signal to noise ratio characterizing the simulation.this is defined such that sigma_error == sqrt(var(X_u*beta_true)/SNR) The default is SNR=='' and R2 is used instead.

    Example: 'SNR',10 -

    Data Types: double

    beta —the values of the beta coefficients.vector.

    Vector which - contains the values of the regression coefficients. The - default is a vector of ones.

    -

    Example: 'beta',[3 5 8] -

    Data Types: double

    SigmaX —the correlation matrix.matrix.

    Positive definite matrix - which contains the correlation matrix among regressors. The - default is the identity matrix.

    -

    Example: 'Sigma', gallery('lehmer',5) -

    Data Types: double

    distribX —distribution to use to simulate the regressors.character.

    Character which specifies the distribution to use to - simulate the values of the explanatory variables.

    - For the list of valid names see MATLAB function random.

    - Default is to use the Standard normal distribution.

    -

    Example: 'distribX', 'Beta' -

    Data Types: double

    distribXpars —parameters of the distribution to use in distribX.vector.

    Scalar value or array of scalar values containing the - distribution parameters specified in distribX.

    -

    Example: 'distribXpars', '[0.2 0.6]' -

    Data Types: double

    distriby —distribution to use to simulate the response.character.

    Character which specifies the distribution to use to - simulate the values of the explanatory variables. The - default is to use the Standard normal distribution.

    -

    Example: 'distriby', 'Lognormal' -

    Data Types: double

    distribypars —parameters of the distribution to use in distriby.vector.

    Scalar value or array of scalar values containing the - distribution parameters specified in distriby. For examples - if distriby is 'Lognormal' and 'distribypars' is [2 10], the - errors are generated according to a Log Normal distribution - with parameters mu and sigma respectively equal to 2 and 10.

    -

    Example: 'distribypars', '[2 10]' -

    Data Types: double

    nexpl —number of explanatory variables.if vector beta is supplied nexpl is equal to length(beta).

    Similarly if - sigmaX is supplied nexpl is set equal to size(sigmaX,1).

    - Note that both nexpl is supplied together with beta and SigmaX it is check that - nexpl =length(beta) = size(SigmaX,1). If options beta and - sigmaX are empty nexpl is set equal to 3.

    -

    Example: 'distribypars', '[2 10]' -

    Data Types: double

    intercept —value of the intercept to use.boolean.

    The default value - for intercept is false.

    -

    Example: 'intercept', true -

    Data Types: boolean

    plots —Plot on the screen.boolean.

    If plots = true, the yXplot which shows the response - against all the explanatory variables s shown on the - screen. The default value for plots is false, that is no - plot is shown on the screen.

    -

    Example: 'plots',false -

    Data Types: single | double

    pMSOM —Proportion of MSOM outliers.the default is 10% MSOM contmaination.

    Example: 'pMSOM',0.25 -

    Data Types: double

    pVIOM —Proportion of VIOM outliers (non-overlapping with MSOM).the default is 10% VIOM contmaination.

    Example: 'pVIOM',0.25 -

    Data Types: double

    shiftMSOMe —Mean-shift on the error terms for MSOM outliers.default value shiftMSOMe==10.

    Example: 'shiftMSOMe',-3 -

    Data Types: double

    predxMSOM —Predictors subject to a mean shift by MSOM.it is a p-dimensional vector indexing design matrix columns.

    Default value is to contaminate only the non-zero - entries of beta_true (excluding the intercept).

    -

    Example: 'predMSOM',true(2,1) -

    Data Types: boolean

    shiftMSOMx —Mean-shift on the predictor terms for MSOM outliers.default value shiftMSOMx==10.

    Example: 'shiftMSOMx',3 -

    Data Types: double

    inflVIOMe —Variance-inflation for the errors subject to a VIOM.default value is inflVIOMe==10.

    Example: 'inflVIOMe',5 -

    Data Types: double

    Output Arguments

    expand all

    out — description Structure

    Structure which contains the following fields
    Value Description
    y

    simulated response. Vector. Column vector of length n - containing the response.

    X

    simulated regressors. Matrix . Matrix of size - n-times-nexpl containing the values of the regressors.

    - - Optional Output (for pVIOM+pMSOM>0):

    yc

    Contaminated response vector.

    Xc

    Contaminated response vector.

    ind_clean

    Indexes for non-outlying cases.

    ind_MSOM

    Indexes for MSOM outlying cases.

    ind_VIOM

    Indexes for VIOM outlying cases.

    vareps

    Variance for the uncontaminated errors.

    References

    Insolia, L., F. Chiaromonte, and M. Riani (2020a).

    - "A Robust Estimation Approach for Mean-Shift and Variance-Inflation Outliers".

    +R-squared: 0.26, Adjusted R-Squared: 0.259 +F-statistic vs. constant model: 701, p-value = 0 +

  • Use prefixed values of R2, beta and intercept.
  • + Set value of R2.

    R2=0.92;
    +beta=[3; 4; 5; 2; 7];
    +intercept=true;
    +n=100000;
    +out=simulateLM(n,'R2',R2,'beta',beta);
    +outLM=fitlm(out.X,out.y);

  • Sim study.
  • + Compare the distribution of values of R2 with data generated from + Normal with those generated from Student T with 5 degrees of freedom.

    % Set value of R2.
    +R2=0.92;
    +beta=[3; 4; 5; 2; 7; 2; 3];
    +nsimul=1000;
    +R2all=zeros(nsimul,2);
    +n=100;
    +df=5;
    +for j=1:nsimul
    +% Data generated from Normal.
    +out=simulateLM(n,'R2',R2,'beta',beta);
    +outLM=fitlm(out.X,out.y);
    +R2all(j,1)=outLM.Rsquared.Ordinary;
    +% Data generated from T(5).
    +out=simulateLM(n,'R2',R2,'beta',beta,'distriby','T','distribypars',df);
    +outLM=fitlm(out.X,out.y);
    +R2all(j,2)=outLM.Rsquared.Ordinary;
    +end
    +boxplot(R2all,'Labels',{'Normal', 'T(5)'});

  • Use SNR and include MSOM (on active features) and VIOM contamination.
  • %% Use SNR and include MSOM (on active features) and VIOM contamination.
    +SNR=3;
    +beta=[2, 2, 0, 0];
    +intercept=true;
    +n=100;
    +out=simulateLM(n,'SNR',SNR,'beta',beta, 'pMSOM', 0.1, 'pVIOM', 0.2, 'plots', 1);
    +X = out.X;
    +y = out.y;
    +outLM=fitlm(X,y);
    +Xc = out.Xc;
    +yc = out.yc;
    +outLM2=fitlm(Xc,yc);
    Click here for the graphical output of this example (link to Ro.S.A. website)

    Input Arguments

    expand all

    n — sample size. Scalar.

    n is a positive integer + which defines the length of the simulated data. For example + if n=100, y will be 100x1 and X will be 100xp.

    Data Types: single| double

    Name-Value Pair Arguments

    Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside single quotes (' '). You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.

    Example: 'R2',0.90 +, 'SNR',10 +, 'beta',[3 5 8] +, 'SigmaX', gallery('lehmer',5) +, 'distribX', 'Beta' +, 'distribXpars', '[0.2 0.6]' +, 'distriby', 'Lognormal' +, 'distribypars', '[2 10]' +, 'exactR2', true +, 'nexpl', '[2 10]' +, 'intercept', true +, 'plots',false +, 'pMSOM',0.25 +, 'pVIOM',0.25 +, 'shiftMSOMe',-3 +, 'predxMSOM',true(2,1) +, 'shiftMSOMx',3 +, 'inflVIOMe',5 +

    R2 —Squared multiple correlation coefficient (R2).scalar.

    The + requested value of R2. A number in the interval [0 1] that + specifies the asymptotic requested value of R2. The default is + to simulate regression data with R2=0; Note that the value of + R2 is the one in the population not in the sample in the sense + that if, for example 'R2',00 the sample data (expecially if n + is very small) can have a value which is slightly different + from the prefixed one. If the exact value of R2 is required + then the user has to use option exactR2. See below for further + details.

    +

    Example: 'R2',0.90 +

    Data Types: double

    SNR —Signal to noise ratio characterizing the simulation.this is defined such that sigma_error == sqrt(var(X_u*beta_true)/SNR).

    The default is SNR=='' and R2 is used instead.

    +

    Example: 'SNR',10 +

    Data Types: double

    beta —the values of the beta coefficients.vector.

    Vector which + contains the values of the regression coefficients. The + default is a vector of ones.

    +

    Example: 'beta',[3 5 8] +

    Data Types: double

    SigmaX —the correlation matrix.matrix.

    Positive definite matrix + which contains the correlation matrix among regressors. The + default is the identity matrix.

    +

    Example: 'SigmaX', gallery('lehmer',5) +

    Data Types: double

    distribX —distribution to use to simulate the regressors.character.

    Character that specifies the distribution to use to + simulate the values of the explanatory variables.

    + For the list of valid names see MATLAB function random.

    + Default is to use the Standard normal distribution.

    +

    Example: 'distribX', 'Beta' +

    Data Types: double

    distribXpars —parameters of the distribution to use in distribX.vector.

    Scalar value or array of scalar values containing the + distribution parameters specified in distribX.

    +

    Example: 'distribXpars', '[0.2 0.6]' +

    Data Types: double

    distriby —distribution to use to simulate the response.character.

    Character that specifies the distribution to use to + simulate the values of the response. The + default is to use the Standard normal distribution.

    +

    Example: 'distriby', 'Lognormal' +

    Data Types: double

    distribypars —parameters of the distribution to use in distriby.vector.

    Scalar value or array of scalar values containing the + distribution parameters specified in distriby. For examples, + if distriby is 'Lognormal' and 'distribypars' is [2 10], the + errors are generated according to a Log Normal distribution + with parameters mu and sigma respectively equal to 2 and 10.

    +

    Example: 'distribypars', '[2 10]' +

    Data Types: double

    exactR2 —exact value of R2.boolean.

    If exactR2 is the sample data have the requested value of + R2. The default is exactR2 equal to false, that is just + asymptotically, the sample data have a value of R2 equal + to the one which is specified in option R2.

    +

    Example: 'exactR2', true +

    Data Types: logical

    nexpl —number of explanatory variables.if vector beta is supplied, nexpl is equal to length(beta).

    Similarly if + SigmaX is supplied nexpl is set equal to size(SigmaX,1).

    + Note that both nexpl is supplied together with beta and SigmaX it is check that + nexpl =length(beta) = size(SigmaX,1). If options beta and + SigmaX are empty nexpl is set equal to 3.

    +

    Example: 'nexpl', '[2 10]' +

    Data Types: double

    intercept —value of the intercept to use.boolean.

    The default value + for intercept is false.

    +

    Example: 'intercept', true +

    Data Types: boolean

    plots —Plot on the screen.boolean.

    If plots = true, the yXplot that shows the response + against all the explanatory variables s shown on the + screen. The default value for plots is false, that is no + plot is shown on the screen.

    +

    Example: 'plots',false +

    Data Types: single | double

    pMSOM —Proportion of MSOM outliers.the default is 10% MSOM contamination.

    Example: 'pMSOM',0.25 +

    Data Types: double

    pVIOM —Proportion of VIOM outliers (non-overlapping with MSOM).the default is 10% VIOM contamination.

    Example: 'pVIOM',0.25 +

    Data Types: double

    shiftMSOMe —Mean-shift on the error terms for MSOM outliers.default value shiftMSOMe==10.

    Example: 'shiftMSOMe',-3 +

    Data Types: double

    predxMSOM —Predictors subject to a mean shift by MSOM.it is a p-dimensional vector indexing design matrix columns.

    Default value is to contaminate only the non-zero + entries of beta_true (excluding the intercept).

    +

    Example: 'predxMSOM',true(2,1) +

    Data Types: boolean

    shiftMSOMx —Mean-shift on the predictor terms for MSOM outliers.default value shiftMSOMx==10.

    Example: 'shiftMSOMx',3 +

    Data Types: double

    inflVIOMe —Variance-inflation for the errors subject to a VIOM.default value is inflVIOMe==10.

    Example: 'inflVIOMe',5 +

    Data Types: double

    Output Arguments

    expand all

    out — description Structure

    Structure that contains the following fields:
    Value Description
    y

    simulated response. Vector. Column vector of length n + containing the response.

    X

    simulated regressors. Matrix. Matrix of size + n-times-nexpl containing the values of the regressors.

    + + Optional Output (for pVIOM+pMSOM>0):

    yc

    Contaminated response vector.

    Xc

    Contaminated response vector.

    ind_clean

    Indexes for non-outlying cases.

    ind_MSOM

    Indexes for MSOM outlying cases.

    ind_VIOM

    Indexes for VIOM outlying cases.

    vareps

    Variance for the uncontaminated errors.

    References

    Insolia, L., F. Chiaromonte, and M. Riani (2020a).

    + "A Robust Estimation Approach for Mean-Shift and Variance-Inflation Outliers".

    Festschrift in Honor of R. Dennis Cook pp 17–41.

    See Also

    This page has been automatically generated by our routine publishFS
    \ No newline at end of file diff --git a/toolbox/regression/simulateLM.m b/toolbox/regression/simulateLM.m index 1f88f279f..f0dd769ac 100644 --- a/toolbox/regression/simulateLM.m +++ b/toolbox/regression/simulateLM.m @@ -12,7 +12,7 @@ % 6) the distribution to use to generate the ys. % 7) the MSOM contamination in Xs and ys. % 8) the VIOM contamination in ys. -% +% % Required input arguments: % % n : sample size. Scalar. n is a positive integer @@ -22,9 +22,15 @@ % Optional input arguments: % % R2 : Squared multiple correlation coefficient (R2). Scalar. The -% requested value of R2. A number in the -% interval [0 1] that specifies the requested value of R2. -% The default is to simulate regression data with R2=0; +% requested value of R2. A number in the interval [0 1] that +% specifies the asymptotic requested value of R2. The default is +% to simulate regression data with R2=0; Note that the value of +% R2 is the one in the population not in the sample in the sense +% that if, for example 'R2',00 the sample data (expecially if n +% is very small) can have a value which is slightly different +% from the prefixed one. If the exact value of R2 is required +% then the user has to use option exactR2. See below for further +% details. % Example - 'R2',0.90 % Data Types - double % @@ -59,7 +65,7 @@ % Data Types - double % distriby : distribution to use to simulate the response. Character. % Character that specifies the distribution to use to -% simulate the values of the explanatory variables. The +% simulate the values of the response. The % default is to use the Standard normal distribution. % Example - 'distriby', 'Lognormal' % Data Types - double @@ -71,6 +77,15 @@ % with parameters mu and sigma respectively equal to 2 and 10. % Example - 'distribypars', '[2 10]' % Data Types - double +% +% exactR2 : exact value of R2. Boolean. +% If exactR2 is the sample data have the requested value of +% R2. The default is exactR2 equal to false, that is just +% asymptotically, the sample data have a value of R2 equal +% to the one which is specified in option R2. +% Example - 'exactR2', true +% Data Types - logical +% % nexpl : number of explanatory variables. If vector beta is % supplied, nexpl is equal to length(beta). Similarly if % SigmaX is supplied nexpl is set equal to size(SigmaX,1). @@ -91,33 +106,33 @@ % Example - 'plots',false % Data Types - single | double % -% pMSOM : Proportion of MSOM outliers. The default is 10% MSOM +% pMSOM : Proportion of MSOM outliers. The default is 10% MSOM % contamination. % Example - 'pMSOM',0.25 % Data Types - double -% -% pVIOM : Proportion of VIOM outliers (non-overlapping with MSOM). +% +% pVIOM : Proportion of VIOM outliers (non-overlapping with MSOM). % The default is 10% VIOM contamination. % Example - 'pVIOM',0.25 % Data Types - double -% +% % shiftMSOMe : Mean-shift on the error terms for MSOM outliers. % Default value shiftMSOMe==10. % Example - 'shiftMSOMe',-3 % Data Types - double -% -% predxMSOM : Predictors subject to a mean shift by MSOM. It is a +% +% predxMSOM : Predictors subject to a mean shift by MSOM. It is a % p-dimensional vector indexing design matrix columns. % Default value is to contaminate only the non-zero % entries of beta_true (excluding the intercept). % Example - 'predxMSOM',true(2,1) % Data Types - boolean -% +% % shiftMSOMx : Mean-shift on the predictor terms for MSOM outliers. % Default value shiftMSOMx==10. % Example - 'shiftMSOMx',3 % Data Types - double -% +% % inflVIOMe : Variance-inflation for the errors subject to a VIOM. % Default value is inflVIOMe==10. % Example - 'inflVIOMe',5 @@ -147,8 +162,8 @@ % % References: % -% Insolia, L., F. Chiaromonte, and M. Riani (2020a). -% "A Robust Estimation Approach for Mean-Shift and Variance-Inflation Outliers". +% Insolia, L., F. Chiaromonte, and M. Riani (2020a). +% "A Robust Estimation Approach for Mean-Shift and Variance-Inflation Outliers". % Festschrift in Honor of R. Dennis Cook pp 17–41. % % @@ -262,7 +277,7 @@ predxMSOM = ''; shiftMSOMx = 10; inflVIOMe = 10; - +exactR2=false; options=struct('R2',R2,... 'beta',beta,'SigmaX',SigmaX,... @@ -271,7 +286,7 @@ 'nexpl',nexpl,'intercept',intercept,'plots',plots, ... 'SNR', SNR, 'pMSOM', pMSOM, 'pVIOM', pVIOM, ... 'shiftMSOMe', shiftMSOMe, 'predxMSOM', predxMSOM, ... - 'shiftMSOMx', shiftMSOMx, 'inflVIOMe', inflVIOMe); + 'shiftMSOMx', shiftMSOMx, 'inflVIOMe', inflVIOMe,'exactR2',exactR2); %% User options @@ -280,12 +295,12 @@ [varargin{:}] = convertStringsToChars(varargin{:}); UserOptions=varargin(1:2:length(varargin)); if ~isempty(UserOptions) - + % Check if number of supplied options is valid if length(varargin) ~= 2*length(UserOptions) error('FSDA:simulateLM:WrongInputOpt','Number of supplied options is invalid. Probably values for some parameters are missing.'); end - + % Check if all the specified optional arguments were present in % structure options. Remark: the nocheck option has already been dealt % by routine chkinputR. @@ -295,17 +310,17 @@ disp(strcat('Non existent user option found->', char(WrongOptions{:}))) error('FSDA:simulateLM:NonExistInputOpt','In total %d non-existent user options found.', length(WrongOptions)); end - + % Check the presence of input options beta, SigmaX and nexpl. betaboo=max(strcmp(UserOptions,'beta'))==1; SigmaXboo=max(strcmp(UserOptions,'SigmaX'))==1; nexplboo=max(strcmp(UserOptions,'nexpl'))==1; - + % Write in structure 'options' the options chosen by the user. for i=1:2:length(varargin) options.(varargin{i})=varargin{i+1}; end - + R2=options.R2; nexpl=options.nexpl; beta=options.beta; @@ -317,6 +332,7 @@ distribypars = options.distribypars; plots=options.plots; intercept=options.intercept; + exactR2=options.exactR2; SNR = options.SNR; pMSOM = options.pMSOM; pVIOM = options.pVIOM; @@ -335,21 +351,21 @@ if SNR<=0 error('FSDA:simulateLM:WrongOpt','SNR must be greater than zero'); end - + % Preliminary checks both beta, nexpl and SigmaX have been supplied. if betaboo==true && SigmaXboo==true && nexplboo==true - + if nexpl~=size(SigmaX,1) error('FSDA:simulateLM:WrongOpt',['Length of supplied vector beta ' ... 'must be equal to number of rows (columns) of matrix SigmaX']); end - + if nexpl~=length(beta) error('FSDA:simulateLM:WrongOpt',['Length of supplied vector beta ' ... 'must be equal to number of rows (columns) of matrix SigmaX']); end end - + % Preliminary checks just beta and SigmaX have been supplied. if betaboo==true && SigmaXboo==true && nexplboo==false nexpl=length(betaboo); @@ -358,7 +374,7 @@ 'must be equal to number of rows (columns) of matrix SigmaX']); end end - + % Preliminary checks just beta and nexpl have been supplied. if betaboo==true && SigmaXboo==false && nexpl==true nexpl=length(beta); @@ -368,7 +384,7 @@ end SigmaX=eye(nexpl); end - + % Preliminary checks just SigmaX and nexpl have been supplied. if betaboo==false && SigmaXboo==true && nexplboo==true nexplchk=size(SigmaXboo,1); @@ -378,60 +394,60 @@ end beta=ones(nexpl,1); end - + % Preliminary checks just beta has been supplied. if betaboo==true && SigmaXboo == false && nexplboo==false nexpl=length(beta); SigmaX=eye(nexpl); end - + % Preliminary checks just SigmaX has been supplied. if betaboo==false && SigmaXboo == true && nexplboo==false nexpl=size(SigmaX,1); beta=ones(nexpl,1); end - + % Preliminary checks just nexpl has been supplied. if betaboo==false && SigmaXboo == false && nexplboo==true beta=ones(nexpl,1); SigmaX=eye(nexpl); end - + [T,err] = cholcov(SigmaX); if err ~= 0 error('FSDA:mvnrnd:BadCovariance2DSymPos','WrongSigma'); end lXpars=length(distribXpars); - + %% checks on the explanatory variables. if ischar(distribX) - if lXpars==1 - X = random(distribX,distribXpars,n,nexpl); - elseif lXpars==2 - X = random(distribX,distribXpars(1),distribXpars(2),n,nexpl); - elseif lXpars==3 - X = random(distribX,distribXpars(1),distribXpars(2),distribXpars(3),n,nexpl); - else - X = random(distribX,distribXpars(1),distribXpars(2),distribXpars(3),distribXpars(4),n,nexpl); - end - % Generate the X in such a way their corr is SigmaX. - X=X*T; + if lXpars==1 + X = random(distribX,distribXpars,n,nexpl); + elseif lXpars==2 + X = random(distribX,distribXpars(1),distribXpars(2),n,nexpl); + elseif lXpars==3 + X = random(distribX,distribXpars(1),distribXpars(2),distribXpars(3),n,nexpl); + else + X = random(distribX,distribXpars(1),distribXpars(2),distribXpars(3),distribXpars(4),n,nexpl); + end + % Generate the X in such a way their corr is SigmaX. + X=X*T; else % In this case, the user has directly supplied matrix X. % Make sure that the size of X is n-by-nexpl. X=distribX; [nchk,nexplchk]=size(X); - if nchk~=n + if nchk~=n error('FSDA:simulateLM:WrongOpt',['supplied matrix X must have ' ... num2str(n) ' rows']); - end - if nexpl~=nexplchk + end + if nexpl~=nexplchk error('FSDA:simulateLM:WrongOpt',['supplied matrix X must have ' ... num2str(nexpl) ' columns']); - end + end end - - + + lypars=length(distribypars); if lypars==1 err = random(distriby,distribypars,n,1); @@ -442,35 +458,57 @@ else err = random(distriby,distribypars(1),distribypars(2),distribypars(3),distribypars(4),n,1); end - + p=nexpl+intercept; - + % Divide by std and multiply by a small sample correction factor. - err=sqrt((n)/(n-p))*err/std(err,1); + err=sqrt((n)/(n-p))*err/std(err,1); % err=err/std(err,1); - + if R2>0 && isempty(SNR) % Find var(\epsilon) which produces a value of R2 centered around % the one which has been requested. vareps=(intercept+beta'*SigmaX*beta)*((1 - R2)/R2); y=intercept+X*beta(:)+err*sqrt(vareps); + if exactR2==true + step=100; + outTMP=fitlm(X,y); + while abs(outTMP.Rsquared.Ordinary-R2)>0.01 + if outTMP.Rsquared.Ordinary >R2 + while outTMP.Rsquared.Ordinary>R2 + vareps=vareps+step; + y=intercept+X*beta(:)+err*sqrt(vareps); + outTMP=fitlm(X,y); + end + step=step/2; + elseif outTMP.Rsquared.Ordinary 0 - + eu = err*sqrt(vareps); Xu = X; @@ -480,7 +518,7 @@ indMSOM = randperm(n, nMSOM); % MSOM (also on X). Xc = Xu; - Xc(indMSOM, predxMSOM) = Xu(indMSOM, predxMSOM) + shiftMSOMx; + Xc(indMSOM, predxMSOM) = Xu(indMSOM, predxMSOM) + shiftMSOMx; ec = eu; ec(indMSOM) = eu(indMSOM) + shiftMSOMe; @@ -497,7 +535,7 @@ indcont = unique([indMSOM, indVIOM]); % clean obs indexes indkeep = setdiff(1:n, indcont); - + if plots==true indunit = zeros(n, 1); indunit(indMSOM) = 1; @@ -513,7 +551,7 @@ out.ind_MSOM = indMSOM; out.ind_VIOM = indVIOM; out.vareps = vareps; - + end out.X = X;