%23%20%2F%2F%2F%20script%0A%23%20requires-python%20%3D%20%22%3E%3D3.11%22%0A%23%20dependencies%20%3D%20%5B%22marimo%3E%3D0.23.9%22%2C%20%22numpy%3E%3D2.0%22%2C%20%22matplotlib%3E%3D3.9%22%2C%20%22scipy%3E%3D1.14%22%5D%0A%23%20%2F%2F%2F%0A%0Aimport%20marimo%0A%0A__generated_with%20%3D%20%220.25.2%22%0Aapp%20%3D%20marimo.App()%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Descriptive%20statistics%20of%20data%0A%0A%20%20%20%20%3E%20Marcos%20Duarte%2C%20Renato%20Naville%20Watanabe%3Cbr%3E%0A%20%20%20%20%3E%20%5BLaboratory%20of%20Biomechanics%20and%20Motor%20Control%5D(https%3A%2F%2Fbmclab.pesquisa.ufabc.edu.br%2F)%3Cbr%3E%0A%20%20%20%20%3E%20Federal%20University%20of%20ABC%2C%20Brazil%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20How%20to%20use%20this%20guide%0A%0A%20%20%20%20A%20mean%20can%20hide%20an%20outlier%2C%20a%20missing%20trial%2C%20or%20two%20very%20different%20groups.%20This%20guide%20uses%20a%20descriptive-statistics%20helper%20to%20inspect%20location%2C%20spread%2C%20and%20distribution%20together.%20The%20goal%20is%20to%20decide%20what%20the%20data%20look%20like%20before%20choosing%20a%20model.%0A%0A%20%20%20%20Read%20the%20examples%20in%20order%2C%20predict%20each%20result%2C%20and%20then%20run%20the%20cell.%20Try%20the%20distributed%20Exercises%20before%20opening%20their%20worked%20solutions.%20Finish%20with%20the%20checkpoint%20questions%20and%20independent%20Problems%3B%20their%20panels%20contain%20final%20answers%20only.%0A%0A%20%20%20%20**Challenge%200.**%20The%20trial%20times%20are%201%2C%202%2C%202%2C%203%2C%20and%2012%20seconds.%20Would%20you%20call%204%20seconds%20a%20typical%20trial%3F%20Compare%20that%20guess%20with%20the%20middle%20observation.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Python%20setup%0A%0A%20%20%20%20NumPy%20creates%20synthetic%20examples%2C%20SciPy%20computes%20statistics%2C%20and%20Matplotlib%20draws%20the%20plots.%20The%20Python%203%20version%20of%20%60statdesc%60%20is%20included%20below%2C%20so%20the%20older%20external%20helper%20is%20not%20needed.%20Rows%20are%20observations%20and%20columns%20are%20variables.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Here%20is%20a%20function%20for%20the%20calculation%20of%20descriptive%20statistics%20which%20might%20be%20useful%20for%20the%20initial%20characterization%20and%20visualization%20of%20numerical%20data.%3Cbr%3E%0A%20%20%20%20The%20function%20signature%20is%3A%0A%20%20%20%20%60%60%60python%0A%20%20%20%20stats%20%3D%20statdesc(data%2C%20missing%3D'NaN'%2C%20labels%3D%5B%5D%2C%20alpha%3D.05%2C%20show%3D2)%0A%20%20%20%20%60%60%60%0A%20%20%20%20And%20the%20function%20help%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(statdesc)%3A%0A%20%20%20%20%23%20functions%2Fstatdesc.py%20is%20an%20older%2C%20Python%202%20version%20of%20this%20function%20that%20cannot%20be%0A%20%20%20%20%23%20imported%20in%20Python%203%3B%20we%20use%20the%20version%201.0.2%20defined%20at%20the%20end%20of%20this%20notebook.%0A%20%20%20%20help(statdesc)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Location%20and%20spread%20answer%20different%20questions%0A%0A%20%20%20%20The%20**mean**%20balances%20all%20observations%3B%20the%20**median**%20identifies%20the%20middle%20of%20the%20ordered%20sample.%20A%20large%20value%20pulls%20the%20mean%20more%20strongly.%20Standard%20deviation%20measures%20spread%20in%20the%20original%20units%3B%20quartiles%20describe%20the%20middle%20half%20without%20assuming%20symmetry.%20Always%20inspect%20the%20plot%20alongside%20the%20summary.%0A%0A%20%20%20%20**Exercise%201.**%20For%201%2C%202%2C%202%2C%203%2C%20and%2012%20seconds%2C%20calculate%20the%20mean%2C%20median%2C%20and%20range.%0A%0A%20%20%20%20%2F%2F%2F%20details%20%7C%20Solution%20to%20Exercise%201%0A%20%20%20%20The%20mean%20is%20%2420%2F5%3D4%24%20s%2C%20the%20median%20is%202%20s%2C%20and%20the%20range%20is%20%2412-1%3D11%24%20s.%20The%20mean%20is%20correct%20but%20is%20a%20poor%20stand-in%20for%20most%20trials%20in%20this%20skewed%20sample.%20Investigate%20the%2012%20s%20observation%20rather%20than%20deleting%20it%20automatically.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Let's%20test%20%60statdesc.py%60%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20%23%20'%25matplotlib%20inline'%20command%20supported%20automatically%20in%20marimo%0A%20%20%20%20return%20(np%2C)%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20statdesc)%3A%0A%20%20%20%20_stats%20%3D%20statdesc(np.random.randn(100%2C%201))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20statdesc)%3A%0A%20%20%20%20_stats%20%3D%20statdesc(np.random.randn(100%2C%202)%2C%20show%3D1)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Missing%20observations%20and%20inferential%20summaries%0A%0A%20%20%20%20Missing%20values%20reduce%20the%20available%20sample%20in%20each%20column.%20Zero%20is%20a%20real%20value%20and%20must%20not%20stand%20for%20%E2%80%9Cnot%20measured%E2%80%9D.%20The%20helper%20reports%20a%20confidence%20interval%20for%20a%20mean%20and%20normality%2Fvariance%20tests%2C%20but%20those%20outputs%20add%20assumptions%3A%20independence%2C%20a%20suitable%20sampling%20design%2C%20and%20a%20meaningful%20population.%0A%0A%20%20%20%20A%20nonsignificant%20normality%20test%20does%20not%20establish%20that%20a%20population%20is%20normal.%20With%20small%20samples%20it%20may%20have%20little%20power%3B%20with%20large%20samples%20it%20can%20detect%20departures%20too%20small%20to%20matter.%20The%20helper%E2%80%99s%20historical%20test-selection%20rule%20is%20an%20illustration%2C%20not%20a%20universal%20recipe%20for%20choosing%20an%20analysis.%0A%0A%20%20%20%20**Exercise%202.**%20One%20column%20contains%20%60%5B1%2C%202%2C%20NaN%2C%203%5D%60.%20How%20many%20observations%20support%20its%20mean%2C%20and%20what%20happens%20if%20NaN%20is%20replaced%20with%20zero%3F%0A%0A%20%20%20%20%2F%2F%2F%20details%20%7C%20Solution%20to%20Exercise%202%0A%20%20%20%20Three%20observations%20support%20the%20mean%2C%20%24(1%2B2%2B3)%2F3%3D2%24.%20Replacing%20the%20missing%20value%20with%20zero%20produces%20%246%2F4%3D1.5%24%20and%20invents%20a%20measurement.%20Report%20the%20available%20count%20as%20well%20as%20the%20mean.%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20**Exercise%203.**%20If%20every%20observation%20is%20multiplied%20by%20100%20to%20convert%20metres%20to%20centimetres%2C%20how%20do%20mean%2C%20SD%2C%20and%20variance%20change%3F%0A%0A%20%20%20%20%2F%2F%2F%20details%20%7C%20Solution%20to%20Exercise%203%0A%20%20%20%20Mean%20and%20SD%20multiply%20by%20100%20because%20both%20have%20the%20data%E2%80%99s%20units.%20Variance%20multiplies%20by%20%24100%5E2%3D10%7B%2C%7D000%24%20because%20its%20units%20are%20squared.%20A%20change%20of%20units%20is%20not%20a%20change%20in%20variability%20relative%20to%20the%20mean.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20How%20the%20descriptive%20summary%20is%20computed%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20%22%22%22Descriptive%20statistics%20of%20data.%22%22%22%0A%20%20%20%20__author__%20%3D%20'Marcos%20Duarte%2C%20https%3A%2F%2Fgithub.com%2FBMClab%2FBMC'%0A%20%20%20%20__version__%20%3D%20'1.0.2'%0A%20%20%20%20__license__%20%3D%20'MIT'%0A%20%20%20%20import%20scipy.stats%20as%20stats%0A%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20import%20matplotlib.pyplot%20as%20_plt%0A%20%20%20%20%20%20%20%20import%20matplotlib.ticker%20as%20ticker%0A%20%20%20%20except%20ImportError%3A%0A%20%20%20%20%20%20%20%20_plt%20%3D%20None%0A%0A%20%20%20%20def%20statdesc(data%2C%20missing%3D'NaN'%2C%20labels%3DNone%2C%20alpha%3D0.05%2C%20show%3D2)%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20Descriptive%20statistics%20of%20data.%0A%0A%20%20%20%20%20%20%20%20This%20function%20calculates%20the%20following%20statistics%20for%20each%20column%0A%20%20%20%20%20%20%20%20(variable)%20of%20the%20input%3A%20mean%20and%20sample%20standard%20deviation%20(with%20ddof%3D1)%20%5B1%5D_%2C%2095%25%0A%20%20%20%20%20%20%20%20confidence%20interval%20(confidence%20limits%20for%20the%20mean)%20with%20unknown%0A%20%20%20%20%20%20%20%20population%20STD%20%5B2%5D_%2C%20minimum%20and%20maximum%2C%20median%2C%2025th%20and%2075th%20percentiles%0A%20%20%20%20%20%20%20%20%5B3%5D_%2C%20test%20for%20normality%20(Shapiro-Wilk's%20test)%20%5B4%5D_%2C%20and%20a%20test%20for%0A%20%20%20%20%20%20%20%20equality%20of%20variances%20for%20all%20columns%20(Levene's%20or%20Bartlett's%20test)%20%5B5%5D_.%0A%0A%20%20%20%20%20%20%20%20This%20function%20also%20generates%20plots%20(if%20matplotlib%20is%20available)%20to%0A%20%20%20%20%20%20%20%20visualize%20the%20data%20and%20shows%20the%20calculated%20statistics%20on%20screen.%0A%0A%20%20%20%20%20%20%20%20Parameters%0A%20%20%20%20%20%20%20%20----------%0A%20%20%20%20%20%20%20%20data%20%3A%20array_like%0A%20%20%20%20%20%20%20%20%20%20%20%201D%20or%202D%20(column%20oriented)%20numerical%20data%20with%20possible%20missing%20values%0A%0A%20%20%20%20%20%20%20%20missing%20%3A%20string%20('nan')%20or%20number%20(int%20or%20float)%2C%20optional%0A%20%20%20%20%20%20%20%20%20%20%20%20option%20to%20enter%20a%20number%20representing%20missing%20values%20(default%20%3D%20'nan')%0A%0A%20%20%20%20%20%20%20%20labels%20%3A%20list%20of%20strings%2C%20optional%0A%20%20%20%20%20%20%20%20%20%20%20%20labels%20for%20each%20column%20(variable)%20in%20data%0A%0A%20%20%20%20%20%20%20%20alpha%20%3A%20float%2C%20optional%0A%20%20%20%20%20%20%20%20%20%20%20%20statistical%20significance%20level%20(to%20decide%20which%20test%20for%20equality%20of%0A%20%20%20%20%20%20%20%20%20%20%20%20variances%20to%20use)%0A%0A%20%20%20%20%20%20%20%20show%20%3A%20integer%20(0%20or%201%20or%202)%2C%20optional%0A%20%20%20%20%20%20%20%20%20%20%20%20option%20to%20show%20plots%20with%20some%20descritive%20statistics%20(0%3A%20don't%20show%0A%20%20%20%20%20%20%20%20%20%20%20%20any%20plot%3B%201%3A%20show%20plots%20only%20for%20the%20grouped%20data%3B%202%3A%20show%20plots%20for%0A%20%20%20%20%20%20%20%20%20%20%20%20individual%20data%20as%20well%20as%20for%20the%20grouped%20data%20(default))%0A%0A%20%20%20%20%20%20%20%20Returns%0A%20%20%20%20%20%20%20%20-------%0A%20%20%20%20%20%20%20%20m_sd%20%3A%20array%0A%20%20%20%20%20%20%20%20%20%20%20%20mean%20and%20sample%20standard%20deviation%20(with%20ddof%3D1)%20of%20each%20column%20(variable)%20in%20data%0A%0A%20%20%20%20%20%20%20%20ci%20%3A%20array%0A%20%20%20%20%20%20%20%20%20%20%20%2095%25%20confidence%20interval%20(confidence%20limits%20for%20the%20mean)%20with%20unknown%0A%20%20%20%20%20%20%20%20%20%20%20%20population%20STD%20for%20each%20column%20(variable)%20in%20data%0A%0A%20%20%20%20%20%20%20%20min_max%20%3A%20array%0A%20%20%20%20%20%20%20%20%20%20%20%20minimum%20and%20maximum%20of%20each%20column%20(variable)%20in%20data%0A%0A%20%20%20%20%20%20%20%20quartiles%20%3A%20array%0A%20%20%20%20%20%20%20%20%20%20%20%20median%2C%2025th%20and%2075th%20percentiles%20of%20each%20column%20(variable)%20in%20data%0A%0A%20%20%20%20%20%20%20%20normality%20%3A%20array%0A%20%20%20%20%20%20%20%20%20%20%20%20test%20for%20normality%20of%20each%20column%20(variable)%20in%20data%20(Shapiro-Wilk's%0A%20%20%20%20%20%20%20%20%20%20%20%20test)%0A%0A%20%20%20%20%20%20%20%20eq_var%20%3A%20array%0A%20%20%20%20%20%20%20%20%20%20%20%20test%20for%20equality%20of%20variances%20for%20all%20columns%20(variables)%20in%20data%0A%20%20%20%20%20%20%20%20%20%20%20%20(Levene's%20or%20Bartlett's%20test)%0A%0A%20%20%20%20%20%20%20%20References%0A%20%20%20%20%20%20%20%20----------%0A%20%20%20%20%20%20%20%20..%20%5B1%5D%20http%3A%2F%2Fwww.itl.nist.gov%2Fdiv898%2Fhandbook%2Feda%2Fsection3%2Feda356.htm%0A%20%20%20%20%20%20%20%20..%20%5B2%5D%20http%3A%2F%2Fwww.itl.nist.gov%2Fdiv898%2Fhandbook%2Fprc%2Fsection1%2Fprc14.htm.%0A%20%20%20%20%20%20%20%20..%20%5B3%5D%20http%3A%2F%2Fwww.itl.nist.gov%2Fdiv898%2Fhandbook%2Fprc%2Fsection2%2Fprc252.htm.%0A%20%20%20%20%20%20%20%20..%20%5B4%5D%20http%3A%2F%2Fwww.itl.nist.gov%2Fdiv898%2Fhandbook%2Fprc%2Fsection2%2Fprc213.htm.%0A%20%20%20%20%20%20%20%20..%20%5B5%5D%20http%3A%2F%2Fwww.itl.nist.gov%2Fdiv898%2Fhandbook%2Feda%2Fsection3%2Feda35a.htm.%0A%0A%20%20%20%20%20%20%20%20Examples%0A%20%20%20%20%20%20%20%20--------%0A%20%20%20%20%20%20%20%20%3E%3E%3E%20import%20numpy%20as%20np%0A%20%20%20%20%20%20%20%20%3E%3E%3E%20from%20statdesc%20import%20statdesc%0A%20%20%20%20%20%20%20%20%3E%3E%3E%20y%20%3D%20np.random.randn(20%2C3)%0A%20%20%20%20%20%20%20%20%3E%3E%3E%20statdesc(y)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20use%20the%20default%20options%0A%20%20%20%20%20%20%20%20%3E%3E%3E%20y%5B8%3A12%2C1%5D%20%3D%20np.nan%20%20%20%20%20%20%20%20%20%23%20add%20a%20missing%20value%0A%20%20%20%20%20%20%20%20%3E%3E%3E%20y%5B12%2C1%5D%20%3D%202%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20add%20another%20missing%20value%0A%20%20%20%20%20%20%20%20%3E%3E%3E%20statdesc(y%2C%20False%2C%202%2C%20%5B'A'%2C'B'%5D%2C%20.01)%20%23%20set%20arguments%0A%20%20%20%20%20%20%20%20%3E%3E%3E%20m_sd%2Cci%2Cminmax%2Cquartiles%2Cnormality%2Ceq_var%20%3D%20statdesc(y)%0A%0A%20%20%20%20%20%20%20%20See%20Also%0A%20%20%20%20%20%20%20%20--------%0A%20%20%20%20%20%20%20%20scipy.stats.describe%20%3A%20Computes%20several%20descriptive%20statistics%20using%20Scipy%0A%20%20%20%20%20%20%20%20pandas.DataFrame.describe%20%3A%20Computes%20several%20descriptive%20statistics%20using%20Pandas%0A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20labels%20%3D%20list(labels)%20if%20labels%20is%20not%20None%20else%20%5B%5D%0A%20%20%20%20%20%20%20%20data%20%3D%20np.array(data%2C%20dtype%3Dfloat%2C%20copy%3DTrue)%0A%20%20%20%20%20%20%20%20if%20len(data.shape)%20%3D%3D%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20data%20%3D%20data.reshape(data.shape%5B0%5D%2C%201)%0A%20%20%20%20%20%20%20%20if%20isinstance(missing%2C%20(int%2C%20float))%20and%20~np.isnan(missing)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20data%5Bdata%20%3D%3D%20missing%5D%20%3D%20np.nan%0A%20%20%20%20%20%20%20%20m_sd%20%3D%20np.zeros((data.shape%5B1%5D%2C%202))%20*%20np.nan%0A%20%20%20%20%20%20%20%20ci%20%3D%20np.zeros((data.shape%5B1%5D%2C%202))%20*%20np.nan%0A%20%20%20%20%20%20%20%20min_max%20%3D%20np.zeros((data.shape%5B1%5D%2C%202))%20*%20np.nan%0A%20%20%20%20%20%20%20%20quartiles%20%3D%20np.zeros((data.shape%5B1%5D%2C%203))%20*%20np.nan%0A%20%20%20%20%20%20%20%20normality%20%3D%20np.zeros((data.shape%5B1%5D%2C%202))%20*%20np.nan%0A%20%20%20%20%20%20%20%20eq_var%20%3D%20np.zeros((1%2C%202))%20*%20np.nan%0A%20%20%20%20%20%20%20%20x%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20nmiss%20%3D%200%0A%20%20%20%20%20%20%20%20min_len%20%3D%200%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(data.shape%5B1%5D)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20x.append(data%5B~np.isnan(data%5B%3A%2C%20i%5D)%2C%20i%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20nmiss%20%3D%20nmiss%20%2B%20(data.shape%5B0%5D%20-%20x%5Bi%5D.shape%5B0%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20x%5Bi%5D.shape%5B0%5D%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print('Skipping%20column%20%25d%2C%20only%20missing%20data'%20%25%20(i%20%2B%201))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20x%5Bi%5D.shape%5B0%5D%20%3E%202%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20min_len%20%3D%20min_len%20%2B%201%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20len(labels)%20%3E%20i%20and%20labels%5Bi%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pass%0A%20%20%20%20%20%20%20%20%20%20%20%20elif%20len(labels)%20%3E%20i%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20labels%5Bi%5D%20%3D%20str(i%20%2B%201)%0A%20%20%20%20%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20labels.append(str(i%20%2B%201))%0A%20%20%20%20%20%20%20%20%20%20%20%20(m_sd%5Bi%5D%2C%20ci%5Bi%5D%2C%20min_max%5Bi%5D%2C%20quartiles%5Bi%5D%2C%20normality%5Bi%5D)%20%3D%20summary(x%5Bi%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20show%20%3E%201%20and%20_plt%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20plot1var(data%5B%3A%2C%20i%5D%2C%20x%5Bi%5D%2C%20m_sd%5Bi%5D%2C%20min_max%5Bi%5D%2C%20normality%5Bi%5D%2C%20labels%5Bi%5D%2C%20alpha%2C%20data.shape%5B1%5D)%0A%20%20%20%20%20%20%20%20i%20%3D%200%0A%20%20%20%20%20%20%20%20while%20i%20%3C%20len(x)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20x%5Bi%5D.size%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x.pop(i)%0A%20%20%20%20%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20i%20%2B%201%0A%20%20%20%20%20%20%20%20if%20len(x)%20%3E%201%20and%20min_len%20%3E%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20np.all(normality%5B%3A%2C%201%5D%20%3E%200.05)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20eq_var%5B0%5D%20%3D%20stats.bartlett(*x)%0A%20%20%20%20%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20eq_var%5B0%5D%20%3D%20stats.levene(*x%2C%20center%3D'median')%0A%20%20%20%20%20%20%20%20if%20show%20and%20_plt%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20data.shape%5B1%5D%20%3E%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20plotallvar(data%2C%20x%2C%20min_max%2C%20eq_var%2C%20min_len%2C%20alpha%2C%20labels)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scatterplot(data%2C%20x%2C%20label%3Dlabels)%0A%20%20%20%20%20%20%20%20statprint(m_sd%2C%20ci%2C%20min_max%2C%20quartiles%2C%20normality%2C%20eq_var%2C%20labels%2C%20alpha%2C%20data.shape%5B0%5D%2C%20data.shape%5B1%5D%2C%20nmiss%2C%20len(x))%0A%20%20%20%20%20%20%20%20return%20(m_sd%2C%20ci%2C%20min_max%2C%20quartiles%2C%20normality%2C%20eq_var)%0A%0A%20%20%20%20def%20summary(x)%3A%0A%20%20%20%20%20%20%20%20%22%22%22summary%20statistics%22%22%22%0A%20%20%20%20%20%20%20%20m_sd%20%3D%20(np.mean(x)%2C%20np.std(x%2C%20ddof%3D1))%0A%20%20%20%20%20%20%20%20ci%20%3D%20np.zeros((1%2C%202))%20*%20np.nan%0A%20%20%20%20%20%20%20%20if%20x.shape%5B0%5D%20%3E%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20ci%20%3D%20stats.t.ppf(0.975%2C%20x.size%20-%201)%20*%20m_sd%5B1%5D%20%2F%20np.sqrt(x.size)%20*%20np.array(%5B-1%2C%201%5D)%20%2B%20m_sd%5B0%5D%0A%20%20%20%20%20%20%20%20min_max%20%3D%20(x.min()%2C%20x.max())%0A%20%20%20%20%20%20%20%20quartiles%20%3D%20(np.median(x)%2C%20np.percentile(x%2C%2025)%2C%20np.percentile(x%2C%2075))%0A%20%20%20%20%20%20%20%20normality%20%3D%20np.zeros((1%2C%202))%20*%20np.nan%0A%20%20%20%20%20%20%20%20if%20x.shape%5B0%5D%20%3E%202%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20normality%20%3D%20stats.shapiro(x)%0A%20%20%20%20%20%20%20%20return%20(m_sd%2C%20ci%2C%20min_max%2C%20quartiles%2C%20normality)%0A%0A%20%20%20%20def%20plot1var(data%2C%20x%2C%20m_sd%2C%20min_max%2C%20normality%2C%20labels%2C%20alpha%2C%20ncol)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Summary%20plot%20for%20each%20variable%22%22%22%0A%20%20%20%20%20%20%20%20_plt.figure(figsize%3D(7%2C%205))%0A%20%20%20%20%20%20%20%20ax1%20%3D%20_plt.subplot(211)%0A%20%20%20%20%20%20%20%20ax1.plot(data%2C%20'bo'%2C%20alpha%3D0.75)%0A%20%20%20%20%20%20%20%20ax1.plot(%5B0%2C%20data.shape%5B0%5D%20-%201%5D%2C%20%5Bm_sd%5B0%5D%2C%20m_sd%5B0%5D%5D%2C%20'r'%2C%20linewidth%3D2)%0A%20%20%20%20%20%20%20%20ax1.plot(%5B0%2C%20data.shape%5B0%5D%20-%201%5D%2C%20%5Bm_sd%5B0%5D%20%2B%20m_sd%5B1%5D%2C%20m_sd%5B0%5D%20%2B%20m_sd%5B1%5D%5D%2C%20'r--'%2C%20linewidth%3D2)%0A%20%20%20%20%20%20%20%20ax1.plot(%5B0%2C%20data.shape%5B0%5D%20-%201%5D%2C%20%5Bm_sd%5B0%5D%20-%20m_sd%5B1%5D%2C%20m_sd%5B0%5D%20-%20m_sd%5B1%5D%5D%2C%20'r--'%2C%20linewidth%3D2)%0A%20%20%20%20%20%20%20%20ax1.grid(True%2C%20linestyle%3D'-'%2C%20which%3D'major'%2C%20color%3D'lightgrey'%2C%20alpha%3D0.5)%0A%20%20%20%20%20%20%20%20title%20%3D%20'Variable%3A%20Mean%3D%20%25f%2C%20STD%3D%20%25f'%20%25%20(m_sd%5B0%5D%2C%20m_sd%5B1%5D)%20if%20ncol%20%3D%3D%201%20else%20'Variable%20%25s%3A%20Mean%3D%20%25f%2C%20STD%3D%20%25f'%20%25%20(labels%2C%20m_sd%5B0%5D%2C%20m_sd%5B1%5D)%0A%20%20%20%20%20%20%20%20ax1.set_title(title)%0A%20%20%20%20%20%20%20%20ax1.set_ylabel('Value')%0A%20%20%20%20%20%20%20%20if%20x.shape%5B0%5D%20%3E%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_plt.xlim(left%3D-0.5%2C%20right%3Ddata.shape%5B0%5D%20-%200.5)%0A%20%20%20%20%20%20%20%20%20%20%20%20_plt.ylim(bottom%3Dmin_max%5B0%5D%20-%200.05%20*%20(min_max%5B1%5D%20-%20min_max%5B0%5D)%2C%20top%3Dmin_max%5B1%5D%20%2B%200.05%20*%20(min_max%5B1%5D%20-%20min_max%5B0%5D))%0A%20%20%20%20%20%20%20%20ax2%20%3D%20_plt.subplot(223)%0A%20%20%20%20%20%20%20%20h2%20%3D%20ax2.boxplot(x%2C%20notch%3D1)%0A%20%20%20%20%20%20%20%20_plt.setp(h2%5B'boxes'%5D%2C%20color%3D'r'%2C%20linewidth%3D2)%0A%20%20%20%20%20%20%20%20_plt.setp(h2%5B'medians'%5D%2C%20color%3D'r'%2C%20linewidth%3D2)%0A%20%20%20%20%20%20%20%20_plt.xticks(%5B1%5D%2C%20%5Blabels%5D)%0A%20%20%20%20%20%20%20%20ax2.grid(True%2C%20linestyle%3D'-'%2C%20which%3D'major'%2C%20color%3D'lightgrey'%2C%20alpha%3D0.5)%0A%20%20%20%20%20%20%20%20ax2.set_title('Boxplot')%0A%20%20%20%20%20%20%20%20ax2.set_xlabel('Variable')%0A%20%20%20%20%20%20%20%20ax2.set_ylabel('Value')%0A%20%20%20%20%20%20%20%20ax3%20%3D%20_plt.subplot(224)%0A%20%20%20%20%20%20%20%20nbins%20%3D%20int(2%20*%20np.sqrt(x.size)%20if%20x.size%20%3C%20100%20else%20np.sqrt(x.size))%0A%20%20%20%20%20%20%20%20(n%2C%20bins%2C%20patches)%20%3D%20ax3.hist(x%2C%20nbins%2C%20density%3DTrue%2C%20fc%3D'blue'%2C%20alpha%3D0.75)%0A%20%20%20%20%20%20%20%20bincenters%20%3D%20np.linspace((bins%5B0%5D%20%2B%20bins%5B1%5D)%20%2F%202%2C%20(bins%5B-2%5D%20%2B%20bins%5B-1%5D)%20%2F%202%2C%20100)%0A%20%20%20%20%20%20%20%20y%20%3D%20stats.norm.pdf(bincenters%2C%20loc%3Dm_sd%5B0%5D%2C%20scale%3Dm_sd%5B1%5D)%0A%20%20%20%20%20%20%20%20ax3.plot(bincenters%2C%20y%2C%20'r-'%2C%20linewidth%3D2)%0A%20%20%20%20%20%20%20%20ax3.set_xlabel('Value')%0A%20%20%20%20%20%20%20%20distribution%20%3D%20'normal'%20if%20normality%5B1%5D%20%3E%20alpha%20else%20'not%20normal'%0A%20%20%20%20%20%20%20%20ax3.set_title('Histogram%20(%25s%2C%20p%3D%251.3f)'%20%25%20(distribution%2C%20normality%5B1%5D))%0A%20%20%20%20%20%20%20%20ax3.xaxis.set_major_locator(ticker.MaxNLocator(nbins%3D5%2C%20prune%3DNone))%0A%20%20%20%20%20%20%20%20ax3.yaxis.set_major_locator(ticker.MaxNLocator(nbins%3D5%2C%20prune%3DNone))%0A%20%20%20%20%20%20%20%20_plt.tight_layout()%0A%20%20%20%20%20%20%20%20_plt.show()%0A%0A%20%20%20%20def%20plotallvar(data%2C%20x%2C%20min_max%2C%20eq_var%2C%20min_len%2C%20alpha%2C%20labels)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Summary%20plot%20for%20all%20variables%22%22%22%0A%20%20%20%20%20%20%20%20_plt.figure(figsize%3D(7%2C%205))%0A%20%20%20%20%20%20%20%20ax1%20%3D%20_plt.subplot(211)%0A%20%20%20%20%20%20%20%20h1%20%3D%20ax1.plot(data)%0A%20%20%20%20%20%20%20%20ax1.grid(True)%0A%20%20%20%20%20%20%20%20ax1.set_title('All%20variables')%0A%20%20%20%20%20%20%20%20ax1.set_ylabel('Value')%0A%20%20%20%20%20%20%20%20_plt.xlim(left%3D-0.5%2C%20right%3Ddata.shape%5B0%5D%20-%200.5)%0A%20%20%20%20%20%20%20%20if%20min_max.max()%20-%20min_max.min()%20%3E%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_plt.ylim(bottom%3Dmin_max.min()%20-%200.05%20*%20(min_max.max()%20-%20min_max.min())%2C%20top%3Dmin_max.max()%20%2B%200.05%20*%20(min_max.max()%20-%20min_max.min()))%0A%20%20%20%20%20%20%20%20ax2%20%3D%20_plt.subplot(212)%0A%20%20%20%20%20%20%20%20h2%20%3D%20ax2.boxplot(x%2C%20notch%3D1)%0A%20%20%20%20%20%20%20%20ax2.grid(True%2C%20linestyle%3D'-'%2C%20which%3D'major'%2C%20color%3D'lightgrey'%2C%20alpha%3D0.5)%0A%20%20%20%20%20%20%20%20ax2.set_title('Boxplot')%0A%20%20%20%20%20%20%20%20if%20min_len%20%3E%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20eq_var%5B0%2C%201%5D%20%3E%20alpha%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tit%20%3D%20'Boxplot%20(equality%20of%20variances%2C%20p%3D%25f)'%20%25%20eq_var%5B0%2C%201%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tit%20%3D%20'Boxplot%20(no%20equality%20of%20variances%2C%20p%3D%25f)'%20%25%20eq_var%5B0%2C%201%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20ax2.set_title(tit)%0A%20%20%20%20%20%20%20%20ax2.set_xlabel('Variable')%0A%20%20%20%20%20%20%20%20ax2.set_ylabel('Value')%0A%20%20%20%20%20%20%20%20rot%20%3D%200%20if%20len(''.join(labels))%20%3C%2050%20else%2045%0A%20%20%20%20%20%20%20%20_plt.xticks(range(1%2C%20data.shape%5B1%5D%20%2B%201)%2C%20labels%5B0%3Adata.shape%5B1%5D%5D%2C%20rotation%3Drot)%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(len(h1))%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_plt.setp(h2%5B'boxes'%5D%5Bi%5D%2C%20color%3Dh1%5Bi%5D.get_c()%2C%20linewidth%3D2)%0A%20%20%20%20%20%20%20%20%20%20%20%20_plt.setp(h2%5B'medians'%5D%5Bi%5D%2C%20color%3Dh1%5Bi%5D.get_c()%2C%20linewidth%3D2)%0A%20%20%20%20%20%20%20%20_plt.tight_layout()%0A%20%20%20%20%20%20%20%20_plt.show()%0A%0A%20%20%20%20def%20scatterplot(data%2C%20x%2C%20label%3DNone)%3A%0A%20%20%20%20%20%20%20%20%22%22%22Scatterplot%20matrix%20for%20array%20data%0A%20%20%20%20%20%20%20%20data%20have%20all%20the%20data%20(inlcuding%20missing%20data)%0A%20%20%20%20%20%20%20%20x%20is%20a%20list%20of%20arrays%20without%20the%20missing%20data%20(for%20histogram%20and%20fitting)%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20(fig%2C%20ax)%20%3D%20_plt.subplots(data.shape%5B1%5D%2C%20data.shape%5B1%5D%2C%20figsize%3D(8%2C%208))%0A%20%20%20%20%20%20%20%20fig.suptitle('Scatterplot%20Matrix'%2C%20fontsize%3D12)%0A%20%20%20%20%20%20%20%20fig.subplots_adjust(hspace%3D0.04%2C%20wspace%3D0.04)%0A%20%20%20%20%20%20%20%20nbins2%20%3D%204%20if%20data.shape%5B1%5D%20%3E%203%20else%205%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(data.shape%5B1%5D)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20j%20in%20range(data.shape%5B1%5D)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20i%20%3D%3D%20j%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20nbins%20%3D%20int(2%20*%20np.sqrt(x%5Bi%5D.size)%20if%20x%5Bi%5D.size%20%3C%20100%20else%20np.sqrt(x%5Bi%5D.size))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(n%2C%20bins%2C%20patches)%20%3D%20ax%5Bi%2C%20j%5D.hist(x%5Bi%5D%2C%20nbins%2C%20density%3DTrue%2C%20facecolor%3D'blue'%2C%20alpha%3D0.75)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bincenters%20%3D%20np.linspace((bins%5B0%5D%20%2B%20bins%5B1%5D)%20%2F%202%2C%20(bins%5B-2%5D%20%2B%20bins%5B-1%5D)%20%2F%202%2C%20100)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%20%3D%20stats.norm.pdf(bincenters%2C%20x%5Bi%5D.mean()%2C%20scale%3Dx%5Bi%5D.std())%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.plot(bincenters%2C%20y%2C%20'r-'%2C%20linewidth%3D2)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.plot(data%5B%3A%2C%20i%5D%2C%20data%5B%3A%2C%20j%5D%2C%20'bo'%2C%20alpha%3D0.75)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.grid(True%2C%20linestyle%3D'-'%2C%20which%3D'major'%2C%20color%3D'lightgrey'%2C%20alpha%3D0.5)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.xaxis.set_visible(False)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.yaxis.set_visible(False)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.xaxis.set_major_locator(ticker.MaxNLocator(nbins%3Dnbins2%2C%20prune%3D'both'))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.yaxis.set_major_locator(ticker.MaxNLocator(nbins%3Dnbins2%2C%20prune%3D'both'))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20ax%5Bi%2C%20j%5D.get_subplotspec().is_first_col()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.yaxis.set_ticks_position('left')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.yaxis.set_visible(True)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.set_ylabel(label%5Bi%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20ax%5Bi%2C%20j%5D.get_subplotspec().is_last_col()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.yaxis.set_ticks_position('right')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.yaxis.set_visible(True)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20ax%5Bi%2C%20j%5D.get_subplotspec().is_first_row()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.xaxis.set_ticks_position('top')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.xaxis.set_visible(True)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20ax%5Bi%2C%20j%5D.get_subplotspec().is_last_row()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.xaxis.set_ticks_position('bottom')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.xaxis.set_visible(True)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ax%5Bi%2C%20j%5D.set_xlabel(label%5Bj%5D)%0A%20%20%20%20%20%20%20%20_plt.show()%0A%0A%20%20%20%20def%20statprint(m_sd%2C%20ci%2C%20min_max%2C%20quartiles%2C%20normality%2C%20eq_var%2C%20labels%2C%20alpha%2C%20nrow%2C%20ncol%2C%20nmiss%2C%20nx)%3A%0A%20%20%20%20%20%20%20%20%22%22%22print%20results%20on%20screen%22%22%22%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20str_row%20%3D%20'rows'%20if%20nrow%20%3E%201%20else%20'row'%0A%20%20%20%20%20%20%20%20str_col%20%3D%20'columns'%20if%20ncol%20%3E%201%20else%20'column'%0A%20%20%20%20%20%20%20%20print('Descriptive%20statistics%20for%20data%20(%25d%20%25s%2C%20%25d%20%25s)'%20%25%20(nrow%2C%20str_row%2C%20ncol%2C%20str_col))%0A%20%20%20%20%20%20%20%20print('%25d%20missing%20values'%20%25%20nmiss)%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20print('%25-10s%20%2515s%20%2515s'%20%25%20('Variable'%2C%20'Mean'%2C%20'STD'))%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(ncol)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print('%25-10s%20%2515f%20%2515f'%20%25%20(labels%5Bi%5D%2C%20m_sd%5Bi%2C%200%5D%2C%20m_sd%5Bi%2C%201%5D))%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20print('%25s'%20%25%20'95%25%20confidence%20interval%20with%20unknown%20population%20STD')%0A%20%20%20%20%20%20%20%20print('%25-10s%20%2515s%20%2515s'%20%25%20('Variable'%2C%20'Lower'%2C%20'Upper'))%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(ncol)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print('%25-10s%20%2515f%20%2515f'%20%25%20(labels%5Bi%5D%2C%20ci%5Bi%2C%200%5D%2C%20ci%5Bi%2C%201%5D))%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20print('%25-10s%20%2515s%20%2515s'%20%25%20('Variable'%2C%20'Minimum'%2C%20'Maximum'))%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(ncol)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print('%25-10s%20%2515f%20%2515f'%20%25%20(labels%5Bi%5D%2C%20min_max%5Bi%2C%200%5D%2C%20min_max%5Bi%2C%201%5D))%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20print('%25-10s%20%2515s%20%2515s%20%2515s'%20%25%20('Variable'%2C%20'Median'%2C%20'25th%20percent.'%2C%20'75th%20percent.'))%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(ncol)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print('%25-10s%20%2515f%20%2515f%20%2515f'%20%25%20(labels%5Bi%5D%2C%20quartiles%5Bi%2C%200%5D%2C%20quartiles%5Bi%2C%201%5D%2C%20quartiles%5Bi%2C%202%5D))%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20print('%25s'%20%25%20%22Shapiro-Wilk's%20test%20for%20normality%22)%0A%20%20%20%20%20%20%20%20print('%25-10s%20%2515s%20%2515s'%20%25%20('Variable'%2C%20'W%20statistic'%2C%20'p%20value'))%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(ncol)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print('%25-10s%20%2515f%20%2515f'%20%25%20(labels%5Bi%5D%2C%20normality%5Bi%2C%200%5D%2C%20normality%5Bi%2C%201%5D))%0A%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20if%20nx%20%3E%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20np.all(normality%5B%3A%2C%201%5D%20%3E%20alpha)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(%22Barlett's%20test%20for%20equality%20of%20variances%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(%22Levene's%20test%20for%20equality%20of%20variances%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20print('%2526s%20%2515s'%20%25%20('t%20statistic'%2C%20'p%20value'))%0A%20%20%20%20%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20%20%20%20%20%20%20%20%20print('%2526f%20%2515f'%20%25%20(eq_var%5B0%2C%200%5D%2C%20eq_var%5B0%2C%201%5D))%0A%20%20%20%20%20%20%20%20%20%20%20%20print('-----------------------------------------------------------')%0A%20%20%20%20if%20__name__%20%3D%3D%20'__main__'%3A%0A%20%20%20%20%20%20%20%20y%20%3D%20np.random.randn(100%2C%203)%0A%20%20%20%20%20%20%20%20statdesc(y%2C%20labels%3D%5B'A'%2C%20'B'%2C%20'C'%5D%2C%20alpha%3D0.05)%0A%20%20%20%20return%20(statdesc%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20Checkpoint%20questions%0A%0A%20%20%20%201.%20Which%20summary%20is%20less%20sensitive%20to%20one%20extreme%20observation%2C%20mean%20or%20median%3F%0A%20%20%20%202.%20Is%20sample%20SD%20with%20%60ddof%3D1%60%20itself%20an%20unbiased%20estimator%3F%0A%20%20%20%203.%20Does%20a%20large%20Shapiro%E2%80%93Wilk%20p-value%20prove%20normality%3F%0A%0A%20%20%20%20%2F%2F%2F%20details%20%7C%20Checkpoint%20answers%0A%20%20%20%201.%20Median.%0A%20%20%20%202.%20No%3B%20the%20variance%20with%20denominator%20%24n-1%24%20is%20unbiased%20under%20iid%20sampling%2C%20not%20its%20square%20root%20in%20general.%0A%20%20%20%203.%20No.%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20%23%23%20Problems%0A%0A%20%20%20%201.%20For%20observations%202%2C%204%2C%206%2C%20give%20the%20mean%2C%20median%2C%20and%20sample%20SD.%0A%20%20%20%202.%20State%20whether%20an%20SD%20describes%20dispersion%20of%20observations%20or%20precision%20of%20the%20estimated%20mean.%0A%20%20%20%203.%20Give%20one%20reason%20not%20to%20pool%20repeated%20trials%20from%20one%20person%20as%20independent%20participants.%0A%0A%20%20%20%20%2F%2F%2F%20details%20%7C%20Final%20answers%0A%20%20%20%201.%20Mean%204%3B%20median%204%3B%20sample%20SD%202.%0A%20%20%20%202.%20Dispersion%20of%20observations.%0A%20%20%20%203.%20Within-person%20dependence%20changes%20the%20effective%20information%20and%20uncertainty.%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20%23%23%20Go%20deeper%0A%0A%20%20%20%20%5BConfidence%20and%20prediction%20intervals%5D(https%3A%2F%2Fmolab.marimo.io%2Fgithub%2FBMClab%2FBMC%2Fblob%2Fmaster%2Fnotebooks%2Fconfidence_prediction_intervals.py)%20%E2%80%94%20distinguish%20the%20spread%20of%20observations%20from%20uncertainty%20in%20a%20mean.%20%5BNIST%20statistical%20handbook%5D(https%3A%2F%2Fwww.itl.nist.gov%2Fdiv898%2Fhandbook%2F)%20%E2%80%94%20definitions%2C%20assumptions%2C%20and%20interpretation%20of%20statistical%20summaries.%0A%0A%20%20%20%20%23%23%23%20Video%20lectures%20on%20the%20Internet%0A%0A%20%20%20%20%5BMIT%20Statistics%20for%20Applications%20lectures%5D(https%3A%2F%2Focw.mit.edu%2Fcourses%2F18-650-statistics-for-applications-fall-2016%2Fvideo_galleries%2Flecture-videos%2F)%20%E2%80%94%20use%20the%20lectures%20on%20estimation%20and%20confidence%20intervals%20to%20connect%20the%20numerical%20examples%20with%20repeated%20sampling.%0A%0A%20%20%20%20%23%23%20References%0A%0A%20%20%20%20-%20%5BNIST%20statistical%20handbook%5D(https%3A%2F%2Fwww.itl.nist.gov%2Fdiv898%2Fhandbook%2F)%20%E2%80%94%20definitions%2C%20assumptions%2C%20and%20interpretation%20of%20statistical%20summaries.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
b8529d6ffa0b94b48fedba931079e899