diff --git a/.DS_Store b/.DS_Store index 85456d4..6c5474f 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/supervisado-datascience/.DS_Store b/supervisado-datascience/.DS_Store index 3a789ac..0adc46a 100644 Binary files a/supervisado-datascience/.DS_Store and b/supervisado-datascience/.DS_Store differ diff --git a/supervisado-datascience/diapos/datos/leche_materna.csv b/supervisado-datascience/diapos/datos/leche_materna.csv new file mode 100644 index 0000000..94574e3 --- /dev/null +++ b/supervisado-datascience/diapos/datos/leche_materna.csv @@ -0,0 +1,31 @@ +weight,group +4.17,ctrl +5.58,ctrl +5.18,ctrl +6.11,ctrl +4.5,ctrl +4.61,ctrl +5.17,ctrl +4.53,ctrl +5.33,ctrl +5.14,ctrl +4.81,trt1 +4.17,trt1 +4.41,trt1 +3.59,trt1 +5.87,trt1 +3.83,trt1 +6.03,trt1 +4.89,trt1 +4.32,trt1 +4.69,trt1 +6.31,trt2 +5.12,trt2 +5.54,trt2 +5.5,trt2 +5.37,trt2 +5.29,trt2 +4.92,trt2 +6.15,trt2 +5.8,trt2 +5.26,trt2 diff --git a/supervisado-datascience/diapos/datos/notas_1factor_2cat.csv b/supervisado-datascience/diapos/datos/notas_1factor_2cat.csv new file mode 100644 index 0000000..314c5f9 --- /dev/null +++ b/supervisado-datascience/diapos/datos/notas_1factor_2cat.csv @@ -0,0 +1,1001 @@ +rowid,notas,asignatura +1,8.018036743899849,A +2,6.150809568905759,B +3,7.941876096823999,A +4,6.331501130544651,B +5,8.310189900649211,A +6,7.747478241239552,A +7,8.284754708957585,A +8,6.962147101064959,B +9,6.351567245755977,B +10,8.565190898923428,A +11,8.433550750972303,A +12,8.271783817125142,A +13,6.155383790192572,B +14,8.8354289584295,A +15,8.412290565283367,A +16,6.307504560309026,B +17,7.049928281684105,B +18,5.686929420857631,B +19,6.32030636427023,B +20,6.37536706415785,B +21,5.87193980992144,B +22,5.6816854513402095,B +23,6.049141162159472,B +24,8.142188861355402,A +25,6.471940016167799,B +26,8.665954175863572,A +27,8.288425189435658,A +28,8.315049275534195,A +29,8.468570270091455,A +30,8.529181116672989,A +31,6.91747850116975,B +32,6.337026596886234,B +33,8.056421970834263,A +34,8.363032976050382,A +35,6.466139262539711,B +36,8.051295551239892,A +37,9.05925196531973,A +38,6.433523201427199,B +39,7.418608141593297,A +40,8.272659204767205,A +41,8.24047507763384,A +42,5.927426156909363,B +43,8.079840006183169,A +44,7.759176318152682,A +45,7.596751002618265,A +46,5.992240163468448,B +47,7.353605453620738,B +48,8.400820555514686,A +49,6.299277076344676,B +50,7.742485546828402,A +51,6.744084942658428,B +52,8.070542156430143,A +53,6.7210466877822235,B +54,8.304529331462962,A +55,5.601636154997016,B +56,6.932686975825689,A +57,6.4575445453644615,B +58,8.320369438996654,A +59,7.225630921804607,B +60,8.175296882507695,A +61,6.8861884509362055,B +62,6.345259370939131,B +63,6.618224725777714,B +64,5.948417969292369,B +65,6.169824809977854,B +66,7.3531423549837305,A +67,8.188683533880258,A +68,6.471060740630088,B +69,7.886844802054008,A +70,6.403237323275718,B +71,9.121018068733608,A +72,7.243067960161384,A +73,7.0921438235486,A +74,7.939051087319934,A +75,8.510629203740546,A +76,7.759133216249051,A +77,7.423731806097589,B +78,6.2226192831279565,B +79,6.536400391755949,B +80,6.959639127413834,B +81,8.35655038526271,A +82,6.856400944566767,A +83,6.79496499836712,B +84,8.471300425345763,A +85,6.422218861971199,B +86,7.617280342114937,A +87,6.771970205781002,B +88,7.643037618142438,A +89,6.313169889930396,B +90,7.652726653364624,A +91,6.806890810672086,B +92,5.861432282233477,B +93,7.8162330217247735,A +94,6.686550581794233,B +95,8.796664497158293,A +96,8.399466291866474,A +97,6.151702307289153,B +98,6.875121788033205,B +99,5.718532909995682,B +100,5.955490355134419,B +101,8.171979176051453,A +102,8.131352062412168,A +103,8.15512749271059,A +104,8.412435032675837,A +105,7.918527268340505,A +106,7.820533798706884,A +107,6.841526883275222,B +108,6.362505407912405,B +109,7.919543318911582,A +110,8.200682493752803,A +111,6.56621479795353,B +112,6.92484473512813,A +113,8.365682283268724,A +114,7.9468156730056245,A +115,6.656202497068593,B +116,8.020854587201159,A +117,7.328734259135228,A +118,5.508119735102404,B +119,7.658612822891304,B +120,8.085339005349375,A +121,8.127135596407028,A +122,8.500559923695363,A +123,8.238124140376827,A +124,7.936304831192837,A +125,8.895666020573655,A +126,7.659188399345808,A +127,6.808529431534341,B +128,6.838012782080144,B +129,6.869424523527917,B +130,6.6933600687930355,B +131,6.987717882181973,B +132,7.458410275632101,A +133,8.27008478384611,A +134,8.655111953373686,A +135,8.259427731383065,A +136,6.816740228420513,B +137,5.425252027537141,B +138,6.4180976481745375,B +139,8.564255416795088,A +140,5.710961671647682,B +141,6.001414831002337,B +142,8.816222819740233,A +143,8.943473471012831,A +144,7.846174717208497,A +145,8.630621137194147,A +146,7.79244889242088,A +147,7.429867927575937,A +148,6.960883170309172,A +149,8.12416506341149,A +150,7.588729958062742,A +151,7.8040903140024085,A +152,7.981418639073258,A +153,8.438105405839666,A +154,7.352164159852588,A +155,7.407670467184614,A +156,6.631902011140515,B +157,7.384913876559905,A +158,8.322705526192658,A +159,6.281646027315549,B +160,7.427150675600012,B +161,6.539195784101641,B +162,7.337622372075536,A +163,7.990040131009799,A +164,8.001071975465889,A +165,7.651813502708863,B +166,8.193666442103812,A +167,6.240263922195273,B +168,7.662118860808222,B +169,8.333010348005159,A +170,6.136159281771837,B +171,7.340446918867531,B +172,7.684686394457086,A +173,7.748893594074746,A +174,6.717864493907912,B +175,8.266394146530029,A +176,8.445390354810135,A +177,7.388973538435008,B +178,6.766684045327792,B +179,8.515957431293455,A +180,8.082140498835294,A +181,5.494144668029281,B +182,7.093583117843888,A +183,8.258427335331193,A +184,8.1999324058581209,A +185,7.9834352996116245,A +186,6.813150098805562,B +187,6.129707515465054,B +188,8.543115194499302,A +189,8.699324999813294,A +190,7.706399744418929,A +191,6.7335863404082135,B +192,7.736544659525426,A +193,6.371127315985995,B +194,7.434292515945442,A +195,7.293450611055403,A +196,7.401984240944585,A +197,8.50983706840879,A +198,6.015746734031817,B +199,8.493277974038296,A +200,7.21226858356553,A +201,6.325296491774925,B +202,5.470908514066986,B +203,8.418345122903416,A +204,5.295234752225587,B +205,7.816398640377729,A +206,7.387464336949009,A +207,5.948636951264312,B +208,8.495975338850874,A +209,8.383727330207002,A +210,8.50265873238413,A +211,6.901445421109783,B +212,7.249592959889581,A +213,6.95439389572124,B +214,7.531984740136062,A +215,6.609912710167827,B +216,6.233498356487528,B +217,8.24908608169599,A +218,5.766161170894993,B +219,5.628326092590514,B +220,6.970093983935478,B +221,6.792820452815322,B +222,7.928968310783942,A +223,6.5383463906716095,B +224,6.544115676906841,B +225,9.327894136071398,A +226,6.722186312643939,A +227,6.756745292246974,B +228,8.178684842591322,A +229,6.396596218327934,B +230,8.292764408921927,A +231,7.694223511091652,A +232,7.988160055923496,A +233,6.331890076918868,B +234,8.560356325834778,A +235,8.236524130511746,A +236,8.711991799335035,A +237,6.1681614628456,B +238,6.055719697997874,B +239,8.272515033232397,A +240,7.504098567871638,A +241,6.211369476245835,B +242,8.592724141429564,A +243,7.859210155837798,A +244,7.682675052893468,A +245,7.5104479484447015,B +246,5.820264989488571,B +247,7.11648984703452,A +248,8.027307787664688,A +249,7.540338998762936,A +250,8.241519948069431,A +251,7.789380153330713,A +252,6.814622299169081,B +253,7.5219019459479215,A +254,6.7090722787096215,A +255,7.797306261659093,A +256,8.206510434199775,A +257,8.17626932308925,A +258,7.149166100988819,B +259,8.578859000364263,A +260,7.240400475246012,A +261,7.778216015952656,A +262,7.958032621462094,A +263,6.319585833477399,B +264,6.078793883678652,B +265,6.963304249089054,B +266,6.971577576067567,B +267,7.7474069985741885,A +268,5.8884200932559185,B +269,7.688516737127048,A +270,6.3647039542747486,B +271,7.691389035682985,A +272,8.302943727920196,A +273,7.190335838816931,A +274,6.090676686945168,B +275,6.234154189044081,B +276,7.784993715347935,A +277,7.842133760333712,A +278,7.743901092958372,A +279,5.874780290942903,B +280,6.710087530738533,B +281,7.861907947387392,A +282,9.03835496663872,A +283,6.760515980352809,B +284,6.922494294472034,B +285,8.007396824278102,A +286,7.934057189818474,A +287,7.9487097456020495,A +288,8.599744767250701,A +289,8.399125697349477,A +290,7.443930259666697,B +291,6.0720480621673145,B +292,8.673596388820005,A +293,6.809820969301478,A +294,8.245333888486945,A +295,7.788711566473243,A +296,8.427225860165278,A +297,7.077632440943714,B +298,7.091022016148136,A +299,8.616159415780347,A +300,8.88215703449716,A +301,6.817365649082715,B +302,7.747455096864254,A +303,8.486042511869712,A +304,6.180128257042192,B +305,6.354227197851353,B +306,9.046533997401099,A +307,5.848334429941042,B +308,7.012776276207144,B +309,7.766055815266744,A +310,8.393204570207294,A +311,7.420589488590931,A +312,8.514134269559815,A +313,9.75,B +314,6.342278841796819,B +315,7.631587539188714,A +316,5.984599921689876,B +317,5.687012457382848,B +318,6.766530676569513,A +319,6.471158792006037,B +320,7.509683525525007,A +321,7.624734002748834,A +322,8.274198961507201,A +323,8.393397894701007,A +324,9.11956304206054,A +325,7.396373405353367,A +326,7.883124323618046,A +327,8.659615859821168,A +328,7.863738572465081,A +329,8.235678940285522,A +330,8.306061746325424,A +331,7.846023309581331,A +332,8.253300970657612,A +333,8.083279834365936,A +334,7.140436411075543,B +335,7.000753577057761,A +336,7.918844511540938,A +337,8.146584190379604,A +338,8.521851126160623,A +339,7.031857463249083,B +340,8.011769388719634,A +341,6.229394743025785,B +342,9.373701771124363,A +343,6.9500481454392835,B +344,6.421095807467907,B +345,8.955189074680742,A +346,6.75323164624441,B +347,8.219272661085284,A +348,8.608016693316824,A +349,6.273610230865701,B +350,8.249940532833833,A +351,6.223583375996441,B +352,7.70656020280645,A +353,7.346600583267787,A +354,7.5587711581732275,A +355,5.4310451125533765,B +356,7.945348342659473,A +357,8.77490166598934,A +358,7.668213130428604,A +359,7.8438400221848,A +360,8.00792784653278,A +361,7.782995659079938,A +362,6.3931886598973,B +363,8.097641076905626,A +364,6.968054252040264,B +365,8.04855211233804,A +366,7.356905676722962,A +367,6.087629264786606,B +368,8.528868683563262,A +369,7.792489485644212,A +370,7.731976000754527,A +371,6.925518524042338,A +372,6.826528010818313,A +373,7.494438738190481,A +374,7.716299207440408,A +375,6.71796667002058,B +376,7.945687882396436,A +377,7.0773158552892665,A +378,6.460975879399777,B +379,7.983395161312856,A +380,8.257121051111527,A +381,7.7883185813834785,A +382,6.94394626587405,B +383,8.039218766374463,A +384,7.534685691653297,A +385,7.874526688073844,A +386,7.343570554682435,A +387,8.322691537103038,A +388,7.594229754904459,A +389,6.091253942703365,B +390,9.665366652785229,A +391,6.881689081181658,A +392,6.517357542277045,B +393,8.15047470080422,A +394,6.6027552359297195,B +395,5.561817128688696,B +396,8.190157848497197,A +397,8.105465393476651,A +398,6.60578129661593,B +399,5.981862162149609,B +400,8.66014685991737,A +401,7.961633152730911,A +402,8.111962703760645,A +403,6.938225059492622,A +404,7.572458744450104,A +405,8.008930106605673,A +406,5.573767925828239,B +407,6.400614202407153,B +408,8.183522460699765,A +409,7.499110456890456,A +410,5.6889383615604645,B +411,6.129266902989021,B +412,8.741445592154097,A +413,7.540970898590592,A +414,8.313835911623714,A +415,6.1703306796570345,B +416,6.242997229531696,B +417,6.381221271657695,B +418,6.701852690425521,B +419,7.819839599721789,A +420,6.690360289334398,B +421,7.9566460473257985,A +422,7.649962091637896,A +423,6.49213277794551,B +424,6.193419789313008,B +425,6.951075435728406,B +426,8.268261858355435,A +427,8.476185442589136,A +428,6.307816201006244,B +429,6.21147111274233,B +430,6.107569510914617,B +431,7.844199171817369,A +432,8.099960241913717,A +433,8.43391087129055,A +434,7.063141463999714,B +435,5.596477670218128,B +436,6.399381569705291,B +437,8.014128828096679,A +438,7.091729831358592,B +439,8.338612652315796,A +440,8.415674408957514,A +441,6.554602062817341,B +442,8.345585636437441,A +443,7.201145241651844,A +444,7.677835785384349,A +445,7.649018484277054,A +446,6.944622844134385,B +447,6.313085290043801,B +448,7.859675430597785,A +449,6.148298704218558,B +450,5.93929744300477,B +451,5.893195147037278,B +452,6.807003822738595,B +453,9.090001198742419,A +454,8.883866925436482,A +455,7.985315608402896,A +456,6.711165165210293,B +457,6.807064520076028,B +458,8.44610615448123,A +459,6.469737369371579,B +460,6.871798153901064,B +461,6.243735053088535,B +462,7.247436549390801,B +463,6.205173758074123,B +464,7.908231062061672,A +465,7.438566171285035,B +466,7.92842447212468,A +467,7.4698672239237345,A +468,6.843849642144829,B +469,8.052605907976167,A +470,6.606754870354186,B +471,6.670655780312816,B +472,7.324899215103436,A +473,7.9187055450368655,A +474,6.93685365394919,B +475,8.602343517406508,A +476,8.19712494981599,A +477,8.288082366402055,A +478,8.276899481972137,A +479,8.399216885136056,A +480,7.138898796427443,A +481,7.382609800216015,A +482,7.812088281830228,A +483,6.628726191825512,B +484,7.312624736587237,A +485,8.794981421347705,A +486,6.511775612568328,B +487,6.9890162340678454,B +488,6.7346957845649955,B +489,7.564567390717324,A +490,7.584666063739613,B +491,6.752294934485969,B +492,6.962127158064266,B +493,6.4619340911145935,B +494,7.558507304915921,B +495,8.1006909030284735,A +496,8.82109599538367,A +497,7.475323590521867,A +498,8.144300105552482,A +499,7.869303037055272,A +500,6.270852996114086,B +501,6.019628153654443,B +502,7.834211205028724,A +503,7.409936413036066,A +504,8.276651537751949,A +505,6.973653222251078,B +506,8.03864590820357,A +507,7.296832082820658,A +508,6.361345167514119,B +509,8.26010822877748,A +510,6.62281929316247,B +511,7.973923203334838,A +512,6.907026779943707,A +513,7.9596231193159825,A +514,5.8156992198202255,B +515,8.7278925412384325,A +516,6.90139574400908,A +517,6.172507774866123,B +518,9.057064418039733,A +519,7.924721451205107,A +520,8.160561768746984,A +521,6.937793316325195,B +522,7.952226145812343,A +523,8.902548759405413,A +524,6.355561628218251,B +525,9.098416773173767,A +526,7.282874846284463,A +527,8.004896879966168,A +528,7.6645117305030315,A +529,6.730882693123982,B +530,7.570374619375449,A +531,6.572558495785672,B +532,7.682181028318598,B +533,6.315722783391581,B +534,6.232379450903505,B +535,8.006091253062186,A +536,7.19774324513759,B +537,6.115134550737988,B +538,8.130454841337375,A +539,6.39182567470437,B +540,6.798520143841558,B +541,7.485292584829567,A +542,8.796744236178137,A +543,8.323298761395892,A +544,7.017727902399826,A +545,7.266820252269882,A +546,8.12176088281267,A +547,6.18441283743869,B +548,6.580972323387805,B +549,6.513083839656569,B +550,8.161075787681401,A +551,5.990723579880252,B +552,7.018617289139593,B +553,8.407732367536287,A +554,8.2112092638935,A +555,8.355444999224218,A +556,7.9296764381849965,A +557,8.261141084262416,A +558,8.411897664353043,A +559,6.948458885689881,B +560,7.518049260493099,A +561,5.934448845284288,B +562,6.602834805556796,B +563,6.125614729394274,B +564,6.290761508035656,B +565,6.057834340661482,B +566,8.52157177577572,A +567,8.006652520888075,A +568,8.376430605317696,A +569,6.514988882939023,B +570,8.250435329154035,A +571,8.282128130473724,A +572,5.413130781755102,B +573,8.03388603070211,A +574,6.984685438919157,B +575,8.027734398944812,A +576,8.699179592299556,A +577,8.18706054171813,A +578,8.074795990307605,A +579,7.956096335681343,A +580,6.302340503660959,B +581,9.033123635345357,A +582,8.232154709391972,A +583,6.82521493502689,B +584,7.2264262558048715,A +585,5.916508187806473,B +586,7.420730433262308,A +587,5.777094964036467,B +588,7.847815443653169,A +589,6.46774985444726,B +590,6.998977121988927,B +591,7.543023804586788,A +592,8.032606787390831,A +593,8.379187278403425,A +594,6.703900443664436,B +595,6.582397395735158,B +596,6.219962772429847,B +597,7.002407720768456,B +598,7.879012990185373,A +599,6.186295807459433,B +600,8.400430673164268,A +601,6.239062690647739,B +602,6.611784941738755,B +603,7.456270065246007,A +604,7.402438554690232,A +605,7.975477654573189,A +606,8.237769818989586,A +607,7.743841610151091,A +608,5.59435513007413,B +609,7.486986416326945,A +610,6.917100792040267,B +611,6.8336631925279825,B +612,8.354733008754762,A +613,7.37270942550249,A +614,8.322623496882613,A +615,7.906146760277887,A +616,6.267584135778754,B +617,7.86124100598693,A +618,5.110837244842664,B +619,8.07845741845555,A +620,8.336021234507394,A +621,6.634540216626751,B +622,7.177719221658297,B +623,6.252026618916783,B +624,7.844130378049021,A +625,7.973123030640986,A +626,6.992002288819538,A +627,7.223431297385156,A +628,7.921700783896453,A +629,7.430516506762579,B +630,6.25606663741393,B +631,7.732283503008723,A +632,7.61054888742054,A +633,8.967721384440054,A +634,6.532313038798552,B +635,7.167760736603068,B +636,5.9081492093353125,B +637,8.316260747185847,A +638,8.485610336518722,A +639,8.069345498404864,A +640,9.129885996705088,A +641,7.489656560039947,A +642,8.356539051967273,A +643,9.238555458481486,A +644,7.046329079628614,B +645,7.878952060704501,A +646,7.075892492333347,B +647,6.424373540440051,B +648,7.957590677162844,A +649,7.901035484058731,A +650,6.544664309571116,B +651,7.951426043645431,A +652,6.889451255959857,B +653,8.336134020849045,A +654,7.6994862978718714,A +655,6.569923051687594,B +656,6.027155689865631,B +657,7.700101218087582,A +658,5.5651892434330446,B +659,6.4233163011831165,B +660,6.638536351311039,B +661,6.223305891832137,B +662,8.701352691433716,A +663,8.11022789240043,A +664,6.507604682114853,B +665,6.626226958920146,B +666,8.059780111685596,A +667,8.24236525560017,A +668,6.436047595083907,B +669,8.226871127729604,A +670,6.317724588710994,B +671,5.880984915801299,B +672,8.201821382629769,A +673,8.573563595144826,A +674,7.610369464785152,A +675,5.649686039680094,B +676,7.607675313404227,A +677,7.756180742398457,A +678,7.835051868091125,A +679,5.778530521399522,B +680,8.038208759524071,A +681,6.510843135972394,B +682,8.230436425766186,A +683,7.905188709361449,A +684,7.779131326202509,A +685,7.421888334879613,A +686,6.52536215411693,B +687,9.063731517429414,A +688,5.814620333088545,B +689,7.556313961749965,B +690,8.93354959228336,A +691,6.986313910636787,B +692,8.184348088078227,A +693,8.376168044743988,A +694,8.0344727990685,A +695,8.444069716326009,A +696,7.074647893393554,B +697,6.5486046693329625,B +698,7.61836642196375,A +699,6.75774464250498,B +700,8.343666050278522,A +701,7.43743580838938,B +702,6.264347506769434,B +703,6.935308534611921,B +704,8.6498188249433,A +705,6.487139181151995,B +706,9.078859908253207,A +707,7.785857188466428,A +708,7.230470430913953,B +709,8.091868454774549,A +710,8.195140800014201,A +711,8.185313932128977,A +712,8.767058432192197,A +713,6.981708844618206,B +714,7.595662936171066,A +715,6.924339540821955,B +716,8.40593658927693,A +717,8.033373108330084,A +718,7.674715136572971,A +719,6.1089274548095265,B +720,8.28370162671224,A +721,7.389364962242321,B +722,8.051196531599823,A +723,7.0838113468953,A +724,6.4862805865747655,B +725,8.267401128065469,A +726,8.04684831416239,B +727,7.976175821763685,A +728,6.457897149116325,B +729,6.497326328409095,B +730,7.702650615464553,A +731,7.67913182111503,A +732,6.340492545518152,B +733,8.414097119731437,A +734,8.064588646838097,A +735,7.556821239378394,A +736,6.533108020526876,B +737,6.3865933523207925,B +738,8.581662423912682,A +739,6.944729005250849,B +740,5.801796185754114,B +741,7.5143853985196385,A +742,8.313982556563113,A +743,7.6853701763685995,A +744,6.73149932393402,B +745,8.748091348478217,A +746,8.149361849633646,A +747,8.314383657524175,A +748,7.4084871445108265,A +749,6.011551381631779,B +750,6.902534834707705,B +751,6.180070272328431,B +752,8.132662284887374,A +753,9.241775044663127,A +754,7.511077542747923,A +755,6.569255325093589,B +756,7.76438870667885,A +757,8.107588585373522,A +758,7.226354016477151,A +759,8.865393065249112,A +760,6.854977910270623,A +761,8.164008240011913,A +762,7.729806963068947,A +763,7.397582355449644,A +764,8.334460826257166,A +765,6.995936864071877,B +766,8.423151858839303,A +767,6.898936846376833,B +768,7.168974878070683,A +769,6.780641356825328,B +770,6.6625433201432225,B +771,6.637362187509216,B +772,8.24559413963628,A +773,6.213055079458374,B +774,7.476043144890844,A +775,7.038243717213699,B +776,8.427329259703397,A +777,8.29085003928682,A +778,6.097587694685688,B +779,5.527927318099396,B +780,6.747953390220302,B +781,7.545266024540077,A +782,8.157806412332409,A +783,8.389810962277663,A +784,8.151575618628831,A +785,6.614431072348468,B +786,7.224584712716891,B +787,6.20664881373506,B +788,6.931653771133343,B +789,7.291589039776719,B +790,6.655015874683415,B +791,8.448006592166225,A +792,6.03518527218995,B +793,8.730364701552045,A +794,5.922011881618559,B +795,8.114217659115193,A +796,7.6037529921403575,A +797,7.86560910360448,A +798,7.74845925340362,B +799,8.578662643528574,A +800,7.544130287883561,A +801,7.846325732023995,A +802,7.497135632501614,A +803,8.340031045468388,A +804,6.617330718389229,B +805,8.618111939544855,A +806,8.026795135178727,A +807,6.620152086945413,B +808,7.442485368486248,B +809,8.049378922469666,A +810,6.74446713385854,B +811,6.700655688238175,B +812,6.795213764373693,B +813,7.043280908110649,B +814,7.857920128028314,A +815,5.8391491452443764,B +816,7.904807967216392,A +817,6.4537881357822116,B +818,8.13116554240744,A +819,8.849673334266589,A +820,7.151318086804102,B +821,6.469636380654015,B +822,7.770212161888031,A +823,6.3429874336084815,B +824,9.165255981202355,A +825,8.384585334130003,A +826,8.385551869837792,A +827,7.0680248257447955,B +828,8.42482646496422,A +829,7.316651339880053,B +830,6.483568452709544,B +831,7.944270569891781,A +832,5.592194604415639,B +833,6.5059805241085265,B +834,7.895349431851633,A +835,6.3749555765837895,B +836,5.881588569397856,B +837,8.330146689072413,A +838,9.024595168703097,A +839,7.773251413268619,A +840,8.012900524323904,A +841,8.408449919760292,A +842,7.653882036033192,A +843,7.837956710631441,A +844,8.772431801018797,A +845,7.7146836372907135,A +846,6.4358755595589265,B +847,7.987982301362244,A +848,5.9553492000138935,B +849,6.840484691470008,B +850,7.380090828446071,A +851,8.430062124808096,A +852,7.718672584769331,A +853,6.36449155538693,B +854,5.785532133932875,B +855,5.505757536360278,B +856,8.112084916308488,A +857,7.8563628423868614,A +858,8.228026252316308,A +859,7.337970653922923,A +860,9.133929926779352,A +861,7.2898380707545956,A +862,7.636811546176232,A +863,7.867347591860962,A +864,7.997533810121325,A +865,6.161943543149395,B +866,8.614038728703651,A +867,7.129143452771323,A +868,6.482389785873061,B +869,8.314430312554219,A +870,8.32088458182087,A +871,7.636335924578406,A +872,8.325215121213066,A +873,7.296821782201057,A +874,5.805787881110604,B +875,6.168821394021914,B +876,7.614573035514661,A +877,7.976752590929123,A +878,8.377934964624712,A +879,8.112146025257664,A +880,7.775983354352765,A +881,7.572374663688251,A +882,8.850715915837974,A +883,8.597402816185644,A +884,7.921101005168484,A +885,7.55909356588246,A +886,7.965491346740392,A +887,5.550214310278548,B +888,6.242292429387393,B +889,6.595608266050565,B +890,7.14866407419699,A +891,8.153544915385963,A +892,7.914547972123713,A +893,8.415421026219331,A +894,8.06918977336992,A +895,8.413129143576215,A +896,6.559935480871621,B +897,8.26243794551796,A +898,7.941265755341789,A +899,7.468057482106707,A +900,5.840242822625373,B +901,6.916897715935273,B +902,6.015779511736139,B +903,6.367528807269137,B +904,6.348683147165153,B +905,8.505105499112807,A +906,8.840904248975448,A +907,8.019104893690288,A +908,7.926986804023581,A +909,8.138976847403072,A +910,8.425430218807218,A +911,8.237717710616362,A +912,7.042038968809065,B +913,5.219973779790997,B +914,7.844196957710926,A +915,9.072532510240146,A +916,6.38014663534737,B +917,6.34306753803351,B +918,8.336307266805507,A +919,7.5766446297298815,A +920,6.559990985638671,B +921,8.174618222967213,A +922,6.140456291475324,B +923,6.64082631741043,B +924,6.281249694027882,B +925,7.782640041531938,A +926,6.886951103498733,B +927,8.452121778100746,A +928,7.540422636164012,A +929,6.1312348497043665,B +930,8.236706879270354,A +931,8.302568386377482,A +932,7.827850601867516,A +933,6.7228400830573865,B +934,7.2819271468864635,A +935,6.382796299952686,B +936,8.810727857803704,A +937,6.970763703404663,B +938,8.316508672090086,A +939,7.886154753347614,A +940,8.271761053970316,A +941,7.5985277500718365,A +942,7.317175480604099,B +943,6.155689407390612,B +944,7.779736901898546,A +945,8.834178584461943,A +946,5.918405369668649,B +947,8.23747152207411,A +948,8.417435998639132,A +949,7.761363854308493,A +950,8.607339192632844,A +951,7.22823426815563,B +952,6.59502710722577,B +953,8.601772408015464,A +954,8.202305572304025,A +955,6.7386875119394265,B +956,6.141624244075838,B +957,6.38822510695802,B +958,8.97384633236602,A +959,9.081298038938382,A +960,8.633800876119118,A +961,8.122551222243684,A +962,8.291593826717843,A +963,6.815797636175427,B +964,8.17583142027762,A +965,6.4340862425452015,B +966,6.962932407729817,B +967,6.85889049937873,B +968,8.765477559867579,A +969,8.38945001526801,A +970,6.645417754870808,B +971,6.619703470621349,B +972,6.673976733509618,B +973,8.660726008581316,A +974,7.17219916256476,A +975,8.726873675624866,A +976,7.7766126061952106,A +977,8.146470151351927,A +978,7.835463512767506,A +979,8.441827416581008,A +980,7.712451947881657,A +981,5.978638423537052,B +982,5.997381305362549,B +983,7.92490485589584,A +984,8.020807650082705,A +985,7.751210428449563,A +986,7.108560256521148,B +987,8.10357136188149,A +988,8.908656021852108,A +989,6.3449260470694835,B +990,6.974019801275854,B +991,7.662366587402476,A +992,8.242357917740568,A +993,7.531013844617881,A +994,7.790738716954327,A +995,6.943459814637115,A +996,8.778054821300628,A +997,6.420026313276909,B +998,6.503091844797989,B +999,8.466596083487577,A +1000,7.450412815618359,B diff --git a/supervisado-datascience/diapos/datos/plant_growth.csv b/supervisado-datascience/diapos/datos/plant_growth.csv new file mode 100644 index 0000000..94574e3 --- /dev/null +++ b/supervisado-datascience/diapos/datos/plant_growth.csv @@ -0,0 +1,31 @@ +weight,group +4.17,ctrl +5.58,ctrl +5.18,ctrl +6.11,ctrl +4.5,ctrl +4.61,ctrl +5.17,ctrl +4.53,ctrl +5.33,ctrl +5.14,ctrl +4.81,trt1 +4.17,trt1 +4.41,trt1 +3.59,trt1 +5.87,trt1 +3.83,trt1 +6.03,trt1 +4.89,trt1 +4.32,trt1 +4.69,trt1 +6.31,trt2 +5.12,trt2 +5.54,trt2 +5.5,trt2 +5.37,trt2 +5.29,trt2 +4.92,trt2 +6.15,trt2 +5.8,trt2 +5.26,trt2 diff --git a/supervisado-datascience/diapos/datos/resumen_pvalores.csv b/supervisado-datascience/diapos/datos/resumen_pvalores.csv index 58b8e03..9a47e66 100644 --- a/supervisado-datascience/diapos/datos/resumen_pvalores.csv +++ b/supervisado-datascience/diapos/datos/resumen_pvalores.csv @@ -1,2 +1,2 @@ sig_chisq,sig_fisher -1.6540153843217805e-6,2.51868214738481e-6 +1.6540153843217805e-6,2.5186821473848086e-6 diff --git a/supervisado-datascience/diapos/img/anova-1.png b/supervisado-datascience/diapos/img/anova-1.png new file mode 100644 index 0000000..b34776a Binary files /dev/null and b/supervisado-datascience/diapos/img/anova-1.png differ diff --git a/supervisado-datascience/diapos/img/anova-2.png b/supervisado-datascience/diapos/img/anova-2.png new file mode 100644 index 0000000..ceb001b Binary files /dev/null and b/supervisado-datascience/diapos/img/anova-2.png differ diff --git a/supervisado-datascience/diapos/index-speaker.html b/supervisado-datascience/diapos/index-speaker.html index 518e6e3..3790967 100644 --- a/supervisado-datascience/diapos/index-speaker.html +++ b/supervisado-datascience/diapos/index-speaker.html @@ -8,7 +8,7 @@ - + Aprendizaje Supervisado I @@ -95,7 +95,7 @@ code span.vs { color: #20794d; } /* VerbatimString */ code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */ - + @@ -414,7 +414,7 @@

¡Buenas!

Correo: . Despacho: 722 (3ª planta).

-

+

    @@ -892,8 +892,8 @@

    Repaso: medidas de dispersión

    Una primera idea podría ser medir la distancia de cada dato al centro, es decir, restar cada dato de la media, y después realizar su promedio.

-
- +
+

Wait for it

@@ -2125,53 +2125,160 @@

Test de correlaciones

-
-

Otras correlaciones

-

La correlación de Pearson asume que las variables están distribuidas normalmente, en caso de existir asociación tienen una relación lineal y no tienen valores atípicos.

+
+

Correlación de rango

+

La correlación (lineal) de Pearson asume que las variables están distribuidas normalmente, en caso de existir asociación tienen una relación lineal y no tienen valores atípicos.

-

Por ello existen dos alternativas: correlación de Spearman y correlación de Kendall

+

Esto significa que ANTES de aplicar un test de correlación deberíamos de comprobar que ambas están distribuidas normalmente

+
+
+
+

Contraste de normalidad

+
    +
  1. Antes de nada debemos de eliminar los pares con datos ausentres
  2. +
+
+
starwars_sin_NA <- starwars |> drop_na(mass, height)
+
+
    +
  1. Tras ello podemos chequearlo de manera visual
  2. +
+
+
+
+
ggplot(starwars) +
+  geom_density(aes(x = height)) +
+  theme_minimal() 
+
+

+
+
+
+
+
ggplot(starwars) +
+  geom_density(aes(x = mass)) +
+  theme_minimal() 
+
+

+
+
+
+
+

Obviamente ninguna de las dos aparenta ser Gaussiana (por asimetría y por outliers)

+
+
+
+

Contraste de normalidad

+
    +
  1. También podemos cotejarlo mediante una prueba de inferencia no parámetrica contastando la normalidad
  2. +
+
+
library(performance)
+
+# check_normality realiza el Shapiro test
+check_normality(starwars_sin_NA$height)
+
+
Warning: Non-normality of raw detected (p < .001).
+
+
check_normality(starwars_sin_NA$mass)
+
+
Warning: Non-normality of raw detected (p < .001).
+
+
+
+

No deberíamos aplicar (al menos no interpretar) el test de correlaciones

+
+
+
+

Correlación de rango

+

Por ello existen dos alternativas: correlación de Spearman y correlación de Kendall

+

 

+

Ambos coeficientes cuantifican no una mera correlación lineal sino una correlación de rango: cuantifica la relación entre los distintos rankings de dos variables cuando se ordenan.

Correlación de Spearman

-

El [coeficiente de correlación de Spearman]{hl-yellow} cuantifica de manera no paramétrica la interdependencia entre dos variables aleatorias (tanto continuas como discretas). Cuantifica el grado de asociación monótona entre dos variables ordinales o continuas

+

El [coeficiente de correlación de Spearman]{hl-yellow} cuantifica de manera no paramétrica la interdependencia entre dos variables aleatorias (tanto continuas como discretas). Cuantifica el grado de asociación monótona entre dos variables ordinales o continuas

\[\rho =1-\frac{6\sum D^{2}}{n (n^{2}-1)}\]

donde \(D\) es la diferencia entre los correspondientes estadísticos de orden de \(x - y\).

-
starwars |> 
-  select(where(is.numeric)) |> 
-  drop_na() |> 
-  cor(method = "spearman")
+
starwars |> 
+  select(mass, height) |> 
+  drop_na() |> 
+  cor(method = "spearman")
+
+
            mass    height
+mass   1.0000000 0.7192179
+height 0.7192179 1.0000000
+
+
cor.test(starwars$mass, starwars$height, method = "spearman")
-
             height      mass birth_year
-height     1.000000 0.6899000  0.1725850
-mass       0.689900 1.0000000  0.1476468
-birth_year 0.172585 0.1476468  1.0000000
+

+    Spearman's rank correlation rho
+
+data:  starwars$mass and starwars$height
+S = 9608.4, p-value = 1.393e-10
+alternative hypothesis: true rho is not equal to 0
+sample estimates:
+      rho 
+0.7192179 
+
+

Correlación de Spearman

+ +

Tau de Kendall

-

El coeficiente de correlación de rango de Kendall (\(\tau\) de Kendall) cuantifica la asociación ordinal de variables cualitativas de manera no paramétrica.

-
+

El coeficiente de correlación de Kendall (\(\tau\) de Kendall) cuantifica la asociación ordinal de variables cualitativas ordinales (o cuantis) de manera no paramétrica.

Dados \(\left(x_1, y_1\right), \ldots, \left(x_n, y_n\right)\) un conjunto de observaciones, se dice que \(\left(x_{i},y_{i}\right)\) y \(\left(x_{j},y_{j}\right)\) (con \(i < j\)) son un par concordante si el orden de clasificación coincide (\(x_i < x_j,~y_i < y_j\) o bien \(x_j < x_i,~y_j < y_i\))

\[\tau =\frac{\text{n pares concordantes} - \text{n pares discordantes}}{n \choose 2}\]

+

El coeficiente de Kendall suele usarse solo cuando \(n\) es pequeño y hay muchos empates (ver usos)

+
+
starwars |> 
+  select(mass, height) |> 
+  drop_na() |> 
+  cor(method = "kendall")
+
+
            mass    height
+mass   1.0000000 0.5704061
+height 0.5704061 1.0000000
+
+
cor.test(starwars$mass, starwars$height, method = "kendall")
+
+

+    Kendall's rank correlation tau
+
+data:  starwars$mass and starwars$height
+z = 6.2649, p-value = 3.731e-10
+alternative hypothesis: true tau is not equal to 0
+sample estimates:
+      tau 
+0.5704061 
+
+
+

Correlación general

+

Kendall demostró en 1970 que tanto \(\tau\) de Kendall como \(\rho\) de Spearman son casos particulares de un coeficiente de correlación general.

+

Si tenemos \(n\) observaciones, para cada par \(\left(x_i, y_j \right)\) podemos definir \(a_{ij}\) como un ranking en la variable \(x\) de ambas observaciones (\(a_{ij} > 0\) si \(x_i > y_j\)) y \(b_{ij}\) como un ranking en la variable \(y\) (\(b_{ij} > 0\) si \(x_i > y_j\)), entonces

+

\[\Gamma = \frac{\sum_{i=1}^{n}\sum_{j=1}^{n}a_{ij}b_{ij}}{\sqrt {\left( \sum_{i=1}^{n}\sum_{j=1}^{n}a_{ij}^{2} \right) \left( \sum_{i=1}^{n}\sum_{j=1}^{n}b_{ij}^{2} \right)}}\]

+

💻 Tu turno

Intenta realizar los siguientes ejercicios sin mirar las soluciones

- +

Vamos a tomar de nuevo nuestros datos de satisfacción de pacientes

-
library(readr)
-datos <-
-  read_csv(file = "./datos/SatisfaccionPacientes.csv") |> 
-  janitor::clean_names()
-datos
+
library(readr)
+datos <-
+  read_csv(file = "./datos/SatisfaccionPacientes.csv") |> 
+  janitor::clean_names()
+datos
# A tibble: 100 × 8
       id  edad genero    estado_civil tiempo_espera grado_satisfaccion
@@ -2190,74 +2297,95 @@ 

💻 Tu turno

# ℹ 2 more variables: numero_visitas <dbl>, estado_salud <chr>
-

📝 Obtén la matriz de correlaciones haciendo uso de cor(). Luego haz uso de correlate() del paquete {corrr}

+

📝 Obtén la matriz de correlaciones de Pearson haciendo uso de cor(). Luego haz uso de correlate() del paquete {corrr}

Código -
datos |> 
-  select(where(is.numeric)) |> 
-  cor()
-
-datos |> 
-  select(where(is.numeric)) |> 
-  corrr::correlate()
+
datos |> 
+  select(where(is.numeric)) |> 
+  cor()
+
+datos |> 
+  select(where(is.numeric)) |> 
+  corrr::correlate()
-

📝 Analiza y argumenta, en función de los resultados anteriores, la asociación entre edad y grado_satisfaccion, y entre tiempo_espera y grado_satisfaccion

+

📝 Obtén la matriz de correlaciones con kendall y spearman

Código -
# Vemos que por ejemplo `edad` no correla con `grado_satisfaccion` ($-0.0339$) pero `tiempo_espera` tiene una correlación negativa ($-0.586$) con `grado_satisfaccion`.
+
datos |> 
+  select(where(is.numeric)) |> 
+  corrr::correlate(method = "spearman")
+
+datos |> 
+  select(where(is.numeric)) |> 
+  corrr::correlate(method = "kendall")
+

📝 Analiza y argumenta, en función de los resultados anteriores, la asociación entre edad y grado_satisfaccion, y entre tiempo_espera y grado_satisfaccion

+
+
+Código +
# Vemos que por ejemplo `edad` no correla con `grado_satisfaccion` ($-0.0339$ según Pearson) pero `tiempo_espera` tiene una correlación negativa ($-0.586$ según Pearson) con `grado_satisfaccion`.
+
+
+
+

📝 Con el paquete {corrplot} visualiza la matriz de correlaciones

Código -
datos |> 
-  select(where(is.numeric)) |> 
-  cor() |> 
-  corrplot::corrplot(method = "square")
+
datos |> 
+  select(where(is.numeric)) |> 
+  cor() |> 
+  corrplot::corrplot(method = "square")
-

+

-
+

📝 Investiga el paquete {GGally} y a función ggpairs() para visualizar las correlaciones de todas las variables (salvo id)

Código -
library(GGally)
-ggpairs(datos |> select(-id)) +
-  theme_minimal()
+
library(GGally)
+ggpairs(datos |> select(-id)) +
+  theme_minimal()
-

+

Código -
# cuali vs cuali: pictogramas (con rectángulos)
-# cuanti vs cuanti: scatter plot
-# cuanti vs cuali: boxplot desagregados
-# variable vs sí misma: densidad
+
# cuali vs cuali: pictogramas (con rectángulos)
+# cuanti vs cuanti: scatter plot
+# cuanti vs cuali: boxplot desagregados
+# variable vs sí misma: densidad
-
+

📝 ¿Cómo saber que la correlación observada entre edad y grado_satisfaccion (\(-0.0339\)) es suficientemente pequeña para considerarse incorreladas? ¿Cómo saber si la correlación entre tiempo_espera y grado_satisfaccion (\(-0.586\)) es suficientemente grande para considerar que es significativa?

Código -
cor.test(datos$edad, datos$grado_satisfaccion)
-cor.test(datos$tiempo_espera, datos$grado_satisfaccion)
-
-# En uno el p-valor es bastante alto (**no rechazamos la hipótesis nula de incorrelación**) y en otro el p-valor es prácticamente 0 (rechazamos la hipótesis nula ->  **hay evidencias de correlación significativa**).
+
cor.test(datos$edad, datos$grado_satisfaccion)
+cor.test(datos$tiempo_espera, datos$grado_satisfaccion)
+
+# En uno el p-valor es bastante alto (**no rechazamos la hipótesis nula de incorrelación**) y en otro el p-valor es prácticamente 0 (rechazamos la hipótesis nula ->  **hay evidencias de correlación significativa**).
+
+# Ninguna de las 3 es normal así que lo apropiado sería
+# contrastar la correlación de rango
+performance::check_normality(datos$edad)
+performance::check_normality(datos$grado_satisfaccion)
+performance::check_normality(datos$tiempo_espera)
@@ -2269,16 +2397,648 @@

💻 Tu turno

Clase 3: análisis de la varianza

Asociación cuali vs cuanti: análisis de la varianza (30 de enero de 2025)

-
-

+
+

Cuanti vs cuali

+

Ya conocemos herramientas básicas para analizar la dependencia entre dos variables:

+
    +
  • Cuali vs cuali: test de Fisher o prueba de \(\chi^2\), tablas de contigencia, diagramas de barras.

  • +
  • Cuanti vs cuanti: correlaciones y test de correlaciones lineal (Pearson), correlaciones y test de correlaciones de rango (Spearman y Kendall), diagramas de dispersión.

  • +
+

¿Pero qué sucede con la asociación cuali vs cuanti?

+
+
+

Cuanti vs cuali

+

Imagina que tenemos \(n\) estudiantes de los que disponemos sus notas \(y_{ij}\) para \(j=1,2\) asignaturas alumnos (datos en notas_1factor_2cat.csv)

+
+
datos <- read_csv(file = "./datos/notas_1factor_2cat.csv")
+datos
+
+
# A tibble: 1,000 × 3
+   rowid notas asignatura
+   <dbl> <dbl> <chr>     
+ 1     1  8.02 A         
+ 2     2  6.15 B         
+ 3     3  7.94 A         
+ 4     4  6.33 B         
+ 5     5  8.31 A         
+ 6     6  7.75 A         
+ 7     7  8.28 A         
+ 8     8  6.96 B         
+ 9     9  6.35 B         
+10    10  8.57 A         
+# ℹ 990 more rows
+
+
+

 

+

¿Existe dependencia entre la nota y la variable asignatura (cualitativa)? ¿Son similares (en promedio) entre las asignaturas o hay una de las dos más sencilla?

+
+
+

Análisis de la varianza

+

Disponemos de

+
    +
  • Variable continua: notas de \(n\) estudiantes denotadas como \(y_{ij}\), con \(i=1,\ldots, n\).

  • +
  • Variable cualitativa o factor: dos asignaturas \(j=1,2\)

  • +
+

El objetivo es ver la posible asociación entre la variable objetivo y el factor, es decir, determinar si existe un efecto del factor sobre el valor esperado de la variable continua.

+
+

A eso se le conoce como análisis de la varianza (ANOVA) o análisis factorial, desarrollada por R. Fisher en 1930, y empezaremos por el ejemplo más sencillo de un factor (una sola variable cualitativa).

+
+
+
+

ANOVA: un factor

+

¿Cómo conceptualizar matemáticamente un modelo que asuma que todas las asignaturas tienen medias similares?

+
+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \quad \text{perturbación aleatoria}\]

+

donde \(\mu_j\) representa la media de los estudiantes en la asignatura \(j\) y la perturbación \(\varepsilon_{ij}\) representa la desviación de la nota en la asignatura \(j\) del estudiante \(i\) (representan la variabilidad intrínseca del EXPERIMENTO).

+
+
+
+

ANOVA: un factor

+

Esas perturbaciones vamos a asumir que cumplen una serie de hipótesis

+
    +
  1. Promedio nulo: \(E[\varepsilon_{ij}] = 0\) para todo \(i,j\) (las desviaciones positivas se compensan con las negativas)
  2. +
+
+
    +
  1. Varianza constante (homocedasticidad): \(V[\varepsilon_{ij}] = cte = \sigma^2\) para todo \(i,j\) (las desviaciones respecto a la media de la asignatura son iguales)
  2. +
+
+
+
    +
  1. Normalidad: \(\varepsilon_{ij} \sim N\)
  2. +
+
+
+
    +
  1. Incorrelación: al ser normales esto automáticamente implica que son independientes (conocer la desviación de un estudiante no nos da información sobre otro: el orden de recolección no afecta a los resultados)
  2. +
+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2) \quad \Rightarrow \quad y_{ij} \sim N(\mu_j, \sigma^2)\]

+
+
+
+

ANOVA: un factor

+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2) \quad \Rightarrow \quad y_{ij} \sim N(\mu_j, \sigma^2)\]

+

Los esimadores insesgados de dichos parámetros poblacionales \(\left(\mu_j, \sigma^2 \right)\) son

+
    +
  • Media: \(\hat{\mu}_{j} = \overline{y}_j\), lo que implica que \(\hat{\varepsilon}_{ij} = y_{ij} - \overline{y}_j\).

  • +
  • Varianza:

  • +
+

\[\hat{\sigma}^2 = \frac{1}{n} \sum_{j=1}^{c}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \sum_{j=1}^{c} \frac{n_j}{n} s_{j}^2\]

+

es decir, el promedio de las desviaciones al cuadrado respecto a la media de cada grupo (también expresado como media ponderada de cada variabilidad), donde \(s_{j}^2 = \frac{1}{n_j}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2\) representa la varianza de cada grupo.

+
+
+

ANOVA: un factor

+

\[\hat{\sigma}^2 = \sum_{j=1}^{c} \frac{n_j}{n} s_{j}^2, \quad s_{j}^2 = \frac{1}{n_j}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2\]

+

Sin embargo, dado que cada \(\sum_{i=1}^{n_j} \left(\frac{y_{ij} - \overline{y}_j}{\sigma} \right)^2\) son independientes entre sí y siguen una \(\chi^{2}_{n_j - 1}\) (la suma de normales al cuadrado es una \(\chi^2\)), tenemos que

+

\[n\frac{\hat{\sigma}^2}{\sigma^2} \sim \chi^{2}_{n-c} \Rightarrow E[n\frac{\hat{\sigma}^2}{\sigma^2}] = n - c \Rightarrow E[\hat{\sigma}^2] = \frac{n-c}{n} \sigma^2\]

+
+

Es decir: \(\hat{\sigma}^2\) no es un estimador insesgado de \(\sigma^2\) así que usaremos la conocida como varianza residual (estimada)

+

\[\hat{s}_{r}^2 = \frac{n}{n-c}\hat{\sigma}^2 = \frac{1}{n-c} \sum_{j=1}^{c}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \frac{1}{n-c} \sum_{j=1}^{c}\sum_{i=1}^{n_j} \hat{\varepsilon}_{ij}^2\]

+
+
+
+

ANOVA: un factor

+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)\]

+

¿Qué contraste deberíamos plantear si queremos comprobar si existe un efecto del factor (asignatura) en la variable objetivo (nota)?

+
+

\[H_0:~\mu_1 = \mu_2 = cte = \mu \quad vs \quad H_1:~\text{no todas son iguales}\]

+

La hipótesis nula es que las diferencias (variabilidad) entre notas en las distintas asignaturas se debe únicamente a una variabilidad aleatoria (y no una diferencia sistemática)

+
+
+
+

ANOVA: un factor

+

Vamos a visualizar las dos distribuciones

+
+
+Código +
ggplot(datos) +
+    geom_density(aes(x = notas, color = asignatura, fill = asignatura),
+                 alpha = 0.5) +
+   geom_point(aes(x = notas, y = 0, color = asignatura),
+              size = 1.7, alpha = 0.85) +
+    MetBrewer::scale_color_met_d(palette_name = "Renoir") +
+    MetBrewer::scale_fill_met_d(palette_name = "Renoir") +
+    theme_minimal()
+
+ +
+

Aunque la distribución B está más desplazada a la izquierda, la nota más alta es de la asignatura B. ¿Es suficiente para decir que A distinto de B?

+
+
+

ANOVA: un factor

+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)\]

+

\[H_0:~\mu_1 = \mu_2 = cte = \mu \quad vs \quad H_1:~\text{no todas son iguales}\]

+

En el caso de que solo tengamos dos grupos la solución es fácil: basta con hacer un contraste de medias conocido como prueba t

+
+
t.test(datos |> filter(asignatura == "A") |> pull(notas),
+       datos |> filter(asignatura == "B") |> pull(notas))
+
+

+    Welch Two Sample t-test
+
+data:  pull(filter(datos, asignatura == "A"), notas) and pull(filter(datos, asignatura == "B"), notas)
+t = 46.326, df = 836.58, p-value < 2.2e-16
+alternative hypothesis: true difference in means is not equal to 0
+95 percent confidence interval:
+ 1.468714 1.598677
+sample estimates:
+mean of x mean of y 
+ 8.039705  6.506010 
+
+
+
+
+

ANOVA: un factor

+

¿Pero qué pasaría si en lugar de dos asignaturas tuviésemos 6 asignaturas?

+
+

El problema de hacer contrastes 2 a 2 es que tendríamos que hacer \({6 \choose 2} = 15\) comparaciones (1-1, 1-2, …, 1-6, 2-3, …, 5-6).

+
+
+

No solo son muchos contrastes sino que si cada contraste se hace con una probabilidad individual de error tipo I de \(\alpha = 0.05\), y suponiendo que todas las comparaciones fuesen independientes, la probabilidad de que se verifiquen las 15 igualdades de manera conjunta ya no es de 0.95 sino \(0.95^{15} = 0.463\): si hacemos muchos contrastes es muy probable que, por azar, alguno salga significativo (aunque realmente no haya diferencia en las medias)

+
+
+
+

Corrección de Bonferroni

+

Un paréntesis: para solventar el problema de las comparaciones múltiples un solución habitual (la más sencilla aunque no siempre la mejor) es lo que se conoce como corrección de Bonferroni

+
+

Sea \(A_i\) el suceso “se rechaza la igualdad de medias de la comparación i” (que sucede con probabilidad \(\alpha\) si la hipótesis nula es cierta). Y sea \(B = \bigcup_i A_i\) el suceso de rechazar alguna de las comparaciones (es decir, no todas son iguales). Entonces, si tenemos \(c\) comparaciones

+

\[P(B) = P(\bigcup_i A_i) \leq \sum_i P(A_i) = c \alpha := \alpha_T\]

+
+
+

Si queremos que ese \(\alpha_T\) conjunto sea (al menos) de 0.05, necesitamos que cada \(\alpha\) individual sea \(\alpha = \alpha_T/c\) (en nuestro ejemplo \(\alpha = 0.00333\), demasiado pequeño si \(c\) crece), o lo que es lo mismo $p-valor_{j}^{adj} = c*p-value_j $

+
+
+
+

ANOVA: un factor

+

No solo existe un problema de comparaciones múltiples sino que, además, ¡no lo necesitamos!

+
+

Nosotros (de momento) no queremos saber cuál de las asignaturas tiene más o menos nota media sino simplemente contestar a la pregunta: ¿todas tienen la misma nota media o existe un efecto entre la asignatura y la nota?

+
+
+

Y para responder a dicha pregunta no necesitamos chequear 2 a 2: basta con que encontremos una que no sea igual

+
+
+
+

ANOVA: un factor

+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)\]

+

La idea es que no necesitamos comparar 2 a 2. Si tenemos \(c\) grupos sabemos que las medias \(\mu_j\) (\(j=1,\ldots,c\)) nunca van a ser exactamente iguales aunque el grupo no afecte, debido a la variabilidad intrínseca del experimento \(\varepsilon_{ij}\)

+
+

¿Es esa variabilidad entre las estimaciones muestrales de las medias (varianza ENTRE grupos, debida a estar en un grupo u otro) significativamente superior a la variabilidad promedio (intrínseca) de los grupos (varianza DENTRO de los grupos, no explicada por los grupos sino intrínseca a los datos)?

+
+
+
+

ANOVA: un factor

+

Si la hipótesis nula fuese cierta (todas las observaciones vienen de la misma población con misma varianza y media), la varianza entre grupos (explicada por el grupo) sería la misma que la varianza promedio dentro de los grupos: según se alejen las medias de los grupos, la primera se incrementará pero la segunda permanecerá constante.

+
+
+

+
+

+
+
+
+
+

ANOVA: un factor

+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)\]

+

¿Cómo calcular la varianza explicada por la variable de grupo (la variabilidad de las medias de cada grupo) y la varianza no explicada por el grupo (el promedio de las varianzas dentro de cada grupo, intrínseca a los datos)?

+
+

La variabilidad total (SST o VT) de la variable \(y\) se define como

+

\[SST = \displaystyle \sum_{l=1}^{n} \left(y_l - \overline{y} \right)^2 = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2, \quad VT = \frac{1}{n} \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2\]

+
+
+
+

ANOVA: un factor

+

\[SST = \displaystyle \sum_{l=1}^{n} \left(y_l - \overline{y} \right)^2 = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2, \quad VT = \frac{1}{n} \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2\]

+

A continuación añadimos y restamos dentro del paréntesis la misma cantidad (la media muestral de cada grupo \(\overline{y}_j\), estimación insesgada de \(\mu_j\))

+

\[\begin{eqnarray}\color{green}{SST} &=& \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2 = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left( \left(y_{ij} - \overline{y}_j \right) - \left(\overline{y}_j - \overline{y} \right) \right)^2 \nonumber \\ &=& \color{purple}{\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2} + \color{red}{\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(\overline{y}_j - \overline{y} \right)^2} - 2\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right) \left(\overline{y}_j - \overline{y} \right) \nonumber \\ \color{green}{VT} &=& \color{purple}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2} + \color{red}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(\overline{y}_j - \overline{y} \right)^2} - \frac{2}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right) \left(\overline{y}_j - \overline{y} \right) +\end{eqnarray}\]

+
+
+

ANOVA: un factor

+

El segundo término es en realidad la variabilidad (ponderada) de las medias de los grupos (cómo fluctua la media entre los grupos)

+

\[\color{red}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(\overline{y}_j - \overline{y} \right)^2 = \frac{1}{n}\sum_{j=1}^{c} n_j \left(\overline{y}_j - \overline{y} \right)^2 = \sum_{j=1}^{c} \frac{n_j}{n} \left(\overline{y}_j - \overline{y} \right)^2 }\]

+

ya que

+

\[\overline{\overline{y}_j} = \frac{1}{c} \sum_{j=1}^{c} \overline{y}_j = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \frac{1}{c* n_{j}} y_{ij} = \frac{1}{n}\sum_{l}^{n} y_{l} = \overline{y}\]

+

Es la variabilidad explicada por los grupos (variabilidad - de la media - ENTRE grupos).

+
+
+

ANOVA: un factor

+

El primer término es en realidad la media de la variabilidad \(s_{j}^2\) DENTRO de cada grupo (el promedio de la variabilidad intragrupo)

+

\[\color{purple}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \frac{n_j}{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \sum_{j=1}^{c} \frac{n_j}{n} s_{j}^2} := \hat{\sigma}^2\]

+

lo que hemos denominado antes \(\hat{\sigma}^2 = \frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \hat{\varepsilon_{ij}}^2\) que se relaciona con la varianza residual (estimada) como \(\hat{\sigma}^2 = \frac{n-c}{n} \hat{s}_{r}^{2}\).

+

Es la variabilidad NO explicada (residual) por el factor (promedio - de manera ponderada - de la variabilidad DENTRO de cada grupo)

+
+
+

ANOVA: un factor

+

Por tanto, dado que el modelo es lineal, la variabilidad o información total se puede descomponer como varianza explicada (VE o suma cuadrados explicada - SSE) más varianza no explicada (VR o suma cuadrados residuales - SSR)

+

\[SST = SSE + SSR, \quad VT = VE + VR\]

+

\[VE = \sum_{j=1}^{c}\frac{ n_j}{n} \left(\overline{y}_j - \overline{y} \right)^2, \quad VR = \frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \hat{\varepsilon}_{ij}^2 = \hat{\sigma}^2 = \frac{n-c}{n} \hat{s}_{r}^{2}\]

+

Así el objetivo será construir un estadístico para cuantificar si \(VE\) se aleja mucho de \(VR\) o no.

+
+
+

ANOVA: un factor

+

Se puede demostrar como

+

\[\frac{SSE}{\sigma^2} \sim \chi^2_{c-1}, \quad \frac{SSR}{\sigma^2} \sim \chi^2_{n-c} \quad \Rightarrow \quad F = \frac{\frac{SSE}{(c-1)\sigma^2}}{\frac{SSR}{(n-c)\sigma^2}} = \frac{\frac{SSE}{c-1}}{\frac{SSR}{n-c}} = \frac{\hat{s}_{e}^2}{\frac{n*VR}{n-c}} = \frac{\hat{s}_{e}^2}{\hat{s}_{r}^2} \sim F_{c-1, n-c}\]

+

usando que el cociente (ponderado por sus grados de libertad) de dos \(\chi^2\) sigue una distribución conocida, calculando lo que se conoce como estadístico F.

+
+

Si te fijas

+
    +
  • \(\hat{s}_{e}^2 = \frac{SSE}{c-1} = \frac{n * VE}{c-1} = \frac{1}{c-1}\sum_{j=1}^{c}n_j \left(\overline{y}_j - \overline{y} \right)^2\) es la varianza explicada (estimada) calculada como una cuasivarianza ponderada.

  • +
  • \(\hat{s}_{r}^2 = \frac{SSR}{n-c} = \frac{n*VR}{n-c}\) es la varianza residual (estimada) mencionada anteriormente

  • +
+
+
+
+

ANOVA: un factor

+

Vamos a ver el ejemplo en R haciendo uso de la función aov()

+
    +
  • data = ...: la base de datos
  • +
  • formula = ...: indicado como var_objetivo ~ factor (donde ~ representa un “vs”)
  • +
  • |> summary(): para obtener un resumen
  • +
+
+
aov(data = datos, formula = notas ~ asignatura) |> summary()
+
+
             Df Sum Sq Mean Sq F value Pr(>F)    
+asignatura    1  564.5   564.5    2173 <2e-16 ***
+Residuals   998  259.2     0.3                   
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+
+
+

ANOVA: un factor

+
+
aov(data = datos, formula = notas ~ asignatura) |> summary()
+
+
             Df Sum Sq Mean Sq F value Pr(>F)    
+asignatura    1  564.5   564.5    2173 <2e-16 ***
+Residuals   998  259.2     0.3                   
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+

Si analizamos por filas tenemos

+
    +
  • asignatura: la parte correspondiente la variabilidad explicada o entre grupos

  • +
  • Residuals: la parte correspondiente la variabilidad no explicada o intra grupos

  • +
+
+
+

ANOVA: un factor

+
+
aov(data = datos, formula = notas ~ asignatura) |> summary()
+
+
             Df Sum Sq Mean Sq F value Pr(>F)    
+asignatura    1  564.5   564.5    2173 <2e-16 ***
+Residuals   998  259.2     0.3                   
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+
    +
  • Df: degrees of freedom (grados de libertad), definidos como \(c-1\) para \(SSE/VE\) (ya que \(\frac{SSE}{\sigma^2} \sim \chi^2_{c-1}\)) y \(n-c\) (ya que \(\frac{SSR}{\sigma^2} \sim \chi^2_{n-c}\)).

  • +
  • Sum Sq: sum of squares (suma de cuadrados), es decir, \(SSE\) y \(SSR\).

  • +
  • Mean Sq: mean of squares (media de la suma de cuadrados, ponderado por Df), es decir, \(\hat{s}_{e}^{2}\) y \(\hat{s}_{r}^{2}\).

  • +
  • F value y Pr(>F): valor del estadístico \(F = \frac{\hat{s}_{e}^{2}}{\hat{s}_{r}^{2}}\) y p-valor del contraste

  • +
+
+

En este caso: rechazamos la hipótesis nula de igualdad de medias, es decir, existen evidencias suficientes para concluir que el grupo tiene un efecto en las notas

+
+
+
+

Caso real: crecimiento bebés

+

Vamos a usar la tabla leche_materna.csv que recopila los resultados obtenidos de 2 tratamientos de leche en polvo distintos para el crecimiento de bebés prematuros (de los que se miden su peso tras el tratamiento, partiendo de unas características similares, incluyendo además un grupo control).

+

¿El objetivo? Comprobar si alguno de los tratamientos fue efectivo.

+
+
datos <-
+    read_csv(file = "./datos/leche_materna.csv") |> 
+    janitor::clean_names()
+datos
+
+
# A tibble: 30 × 2
+   weight group
+    <dbl> <chr>
+ 1   4.17 ctrl 
+ 2   5.58 ctrl 
+ 3   5.18 ctrl 
+ 4   6.11 ctrl 
+ 5   4.5  ctrl 
+ 6   4.61 ctrl 
+ 7   5.17 ctrl 
+ 8   4.53 ctrl 
+ 9   5.33 ctrl 
+10   5.14 ctrl 
+# ℹ 20 more rows
+
+
+
+
+

Caso real: crecimiento bebés

+
+
datos
+
+
# A tibble: 30 × 2
+   weight group
+    <dbl> <chr>
+ 1   4.17 ctrl 
+ 2   5.58 ctrl 
+ 3   5.18 ctrl 
+ 4   6.11 ctrl 
+ 5   4.5  ctrl 
+ 6   4.61 ctrl 
+ 7   5.17 ctrl 
+ 8   4.53 ctrl 
+ 9   5.33 ctrl 
+10   5.14 ctrl 
+# ℹ 20 more rows
+
+
+

¿Cómo formulamos el ANOVA?

+
+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad y_{ij} = \text{peso del niño i del grupo j}, \quad j=1,2,3 \text{ (control, trt1, trt2)}\]

+

donde \(\mu_j\) representa la media de peso de cada grupo, cuyo estimador insesgado es \(\overline{y}_{j}\)

+
+
+
+

Caso real: crecimiento bebés

+

¿La hipótesis nula?

+
+

\[H_0:~\mu_1 = \mu_2 = \mu_3 \quad \text{(no diferencias entre tratamientos y control)}, \quad H_1:~existe\]

+

¿Existe una asociación entre el tratamiento/control y el peso?

+
+
+
+

Caso real: crecimiento bebés

+

Desde un punto de vista descriptivo, ¿cómo resumirlo numérica y gráficamente?

+
+
+
+
datos |> 
+  summarise("mean_peso" = mean(weight),
+            "sd_peso" = sd(weight),
+            .by = group)
+
+
# A tibble: 3 × 3
+  group mean_peso sd_peso
+  <chr>     <dbl>   <dbl>
+1 ctrl       5.03   0.583
+2 trt1       4.66   0.794
+3 trt2       5.53   0.443
+
+
+
+
+
+Código +
ggplot(datos) +
+  geom_boxplot(aes(x = group, y = weight, fill = group,
+                   color = group), alpha = 0.5) +
+  MetBrewer::scale_color_met_d(palette_name = "Renoir") +
+  MetBrewer::scale_fill_met_d(palette_name = "Renoir") +
+  theme_minimal()
+
+
+

+
+
+
+
+
+
+

Caso real: crecimiento bebés

+
+
+Código +
ggplot(datos |>
+         rowid_to_column(var = "id") |>
+         mutate("mean_weight" = mean(weight), .by = group)) +
+  geom_point(aes(x = id, y = weight, color = group),
+             alpha = 0.5, size = 4) +
+  geom_line(aes(x = id, y = mean_weight, color = group),
+            linewidth = 2) +
+  scale_y_continuous(limits = c(2.5, 7.5)) +
+  MetBrewer::scale_color_met_d(palette_name = "Renoir") +
+  theme_minimal()
+
+ +
+
+
+

Caso real: crecimiento bebés

+
+
aov(data = datos, formula = weight ~ group) |> summary()
+
+
            Df Sum Sq Mean Sq F value Pr(>F)  
+group        2  3.766  1.8832   4.846 0.0159 *
+Residuals   27 10.492  0.3886                 
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+

El resultado del ANOVA de un factor (one-way ANOVA) es el siguiente:

+

Si analizamos por filas tenemos

+
    +
  • group: la parte correspondiente la variabilidad explicada o entre grupos de tratamiento

  • +
  • Residuals: la parte correspondiente la variabilidad no explicada o intra grupos

  • +
+
+
+

Caso real: crecimiento bebés

+
+
aov(data = datos, formula = weight ~ group) |> summary()
+
+
            Df Sum Sq Mean Sq F value Pr(>F)  
+group        2  3.766  1.8832   4.846 0.0159 *
+Residuals   27 10.492  0.3886                 
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+

Si analizamos por columnas tenemos

+
    +
  • Df: tenemos 2 grados de libertad (3 grupos - 1) para la varianza explicada y 27 grados de libertad (30 - 3 grupos) para la varianza no explicada.

  • +
  • Sum Sq: \(SSE = 3.766\) y \(SSR = 10.492\),

  • +
  • Mean Sq: \(\hat{s}_{e}^{2} = 1.8832\) y \(\hat{s}_{r}^{2} = 0.3886\).

  • +
  • F value y Pr(>F): valor del estadístico \(F = \frac{\hat{s}_{e}^{2}}{\hat{s}_{r}^{2}} = \frac{1.8832}{0.3886} = 4.846\) y p-valor

  • +
+
+

Rechazamos la hipótesis nula: existen evidencias para concluir que el tratamiento tiene un efecto en el peso

+
+
+
+

Caso real: crecimiento bebés

+
+
aov(data = datos, formula = weight ~ group) |> summary()
+
+
            Df Sum Sq Mean Sq F value Pr(>F)  
+group        2  3.766  1.8832   4.846 0.0159 *
+Residuals   27 10.492  0.3886                 
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+

¿El problema?

+
+

Sabemos que el tratamiento (bien sea “real” bien sea el grupo control) tiene un efecto (al menos estadístico) y que se observan medias distintas.

+

 

+

¿Pero cuáles son distintas 2 a 2? ¿Son distintas entre los tratamientos? ¿Son distintas tratamientos vs control? ¿Solo uno de los tratamientos es distinto o ambos?

+

En este caso necesitamos 3 comparaciones.

+
+
+
+

Pruebas post-hoc

+

Tras obtener un resultado significativo en un ANOVA el siguiente objetivo sería determinar cuál de los grupos bajo estudio contribuye a esta significación estadística.

+
+

Pero como hemos explicado, la estrategia de aplicar repetidamente pruebas t-Student puede conllevar un aumento desmesurado de la probabilidad de cometer un error de Tipo I (detectar diferencias por pura aleatoriedad)

+
+
+

 

+

Alguno de los métodos post-hoc más comunes (ver más) son Bonferroni, Tukey y Dunnett.

+
+
+
+

post-hoc: bonferroni

+

El método de corrección Bonferroni ya lo hemos explicado anteriormente y para implementarlo basta con usar pairwise.t.test()

+
+
# `pool.sd = FALSE` implica que, para cada comparativa, se calcula una desv en cada grupo
+# `pool.sd = TRUE` --> la desviación estándar agrupada es un promedio ponderado de las sd de
+# dos o más grupos, tal que las sd individuales se promedian, con más "peso" dado a
+# tamaños de muestra más grandes. solo usar cuando los tamaños de cada grupo sean muy distintos
+pairwise.t.test(datos$weight, datos$group, p.adjust.method = "bonferroni", pool.sd = FALSE)
+
+

+    Pairwise comparisons using t tests with non-pooled SD 
+
+data:  datos$weight and datos$group 
+
+     ctrl  trt1 
+trt1 0.751 -    
+trt2 0.144 0.028
+
+P value adjustment method: bonferroni 
+
+
+
+
    +
  • ctrl vs trt 1: p-valor ajustado 0.751 –> sin diferencias significativas

  • +
  • ctrl vs trt 2: p-valor ajustado 0.144 –> sin diferencias significativas

  • +
  • trt 1 vs trt 2: p-valor ajustado 0.028 –> dif sig de los tratamientos

  • +
+
+
+
+

Pruebas post-hoc

+
    +
  • Bonferroni: +
      +
    • Ventajas: simplicidad y no paramétrico
    • +
    • Desventajas: al intentar controlar tanto error tipo I (rechazar \(H_0\) sin que existan diferencias) es un método muy conservador -> cuesta mucho que se rechace \(H_0\) -> alta tasa de errores tipo II según aumentan comparaciones
    • +
  • +
+
+

Para evitar los problemas de Bonferroni cuando hay un alto número de comparaciones existe una alternativa conocida como test de Tukey.

+
+
aov(data = datos, formula = weight ~ group) |> 
+  TukeyHSD()
+
+
  Tukey multiple comparisons of means
+    95% family-wise confidence level
+
+Fit: aov(formula = weight ~ group, data = datos)
+
+$group
+            diff        lwr       upr     p adj
+trt1-ctrl -0.371 -1.0622161 0.3202161 0.3908711
+trt2-ctrl  0.494 -0.1972161 1.1852161 0.1979960
+trt2-trt1  0.865  0.1737839 1.5562161 0.0120064
+
+
+
+
+
+

post-hoc: Tukey

+
+
aov(data = datos, formula = weight ~ group) |> 
+  TukeyHSD()
+
+
  Tukey multiple comparisons of means
+    95% family-wise confidence level
+
+Fit: aov(formula = weight ~ group, data = datos)
+
+$group
+            diff        lwr       upr     p adj
+trt1-ctrl -0.371 -1.0622161 0.3202161 0.3908711
+trt2-ctrl  0.494 -0.1972161 1.1852161 0.1979960
+trt2-trt1  0.865  0.1737839 1.5562161 0.0120064
+
+
+
    +
  • Tukey: +
      +
    • Ventajas: controla eficazmente la tasa de error tipo I, muy útil para muchas comparaciones y mayor poder estadístico* vs Bonferroni
    • +
    • Desventajas: sensible a valores atípicos y es paramétrico (requiere normalidad, grupos de tamaño similar e igualdad de varianzas)
    • +
  • +
+

Poder o potencia estadística: probabilidad de rechazar \(H_0\) cuando dicha hipótesis es falsa (probabilidad de no cometer un error del tipo II).

+
+
+

post-hoc: Dunnet

+

En muchas ocasiones no siempre queremos comparaciones 2 a 2 indistintamente sino que querremos confrontar el resto de grupos respecto a un grupo control (en nuestro caso: 2 tratamientos vs control, no los tratamientos entre sí).

+
+

Para ello disponemos del test de Dunnet

+

\[H_0:~\mu_{tr_{j}} = \mu_{ctrl}, \quad H_1:~\mu_{tr_{j}} \neq \mu_{ctrl}\]

+
    +
  • Dunnet: +
      +
    • Ventajas: el contraste con mayor potencia cuando se trata de comaprar contra un grupo contorl
    • +
    • Desventajas: paramétrico (requiere normalidad, igualdad de varianzas e independencia entre grupos)
    • +
  • +
+
+
+
+

Pruebas post-hoc

+

Para implementarlo primero chequeamos igualdad de varianzas entre los grupos (por ejemplo, con car::leveneTest())

+
+
car::leveneTest(datos$weight ~ datos$group)
+
+
Levene's Test for Homogeneity of Variance (center = median)
+      Df F value Pr(>F)
+group  2  1.1192 0.3412
+      27               
+
+
+
+

Y luego DunnettTest() del paquete {DescTools}

+
+
DescTools::DunnettTest(x = datos$weight, g = datos$group, control = "ctrl")
+
+

+  Dunnett's test for comparing several treatments with a control :  
+    95% family-wise confidence level
+
+$ctrl
+            diff     lwr.ci    upr.ci   pval    
+trt1-ctrl -0.371 -1.0215695 0.2795695 0.3227    
+trt2-ctrl  0.494 -0.1565695 1.1445695 0.1535    
+
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+

Obtenemos que no hay dif. sig. entre ctrl y tratamientos

+

Clase 4: análisis de la varianza

Asociación cuali vs cuanti: análisis de la varianza (4 de febrero de 2025)

-
-

+
+

ANOVA: dos factores

diff --git a/supervisado-datascience/diapos/index.html b/supervisado-datascience/diapos/index.html index 9559284..20d6df3 100644 --- a/supervisado-datascience/diapos/index.html +++ b/supervisado-datascience/diapos/index.html @@ -8,7 +8,7 @@ - + Aprendizaje Supervisado I @@ -95,7 +95,7 @@ code span.vs { color: #20794d; } /* VerbatimString */ code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */ - + @@ -414,7 +414,7 @@

¡Buenas!

Correo: . Despacho: 722 (3ª planta).

-

+

    @@ -892,8 +892,8 @@

    Repaso: medidas de dispersión

    Una primera idea podría ser medir la distancia de cada dato al centro, es decir, restar cada dato de la media, y después realizar su promedio.

-
- +
+

Wait for it

@@ -2125,53 +2125,160 @@

Test de correlaciones

-
-

Otras correlaciones

-

La correlación de Pearson asume que las variables están distribuidas normalmente, en caso de existir asociación tienen una relación lineal y no tienen valores atípicos.

+
+

Correlación de rango

+

La correlación (lineal) de Pearson asume que las variables están distribuidas normalmente, en caso de existir asociación tienen una relación lineal y no tienen valores atípicos.

-

Por ello existen dos alternativas: correlación de Spearman y correlación de Kendall

+

Esto significa que ANTES de aplicar un test de correlación deberíamos de comprobar que ambas están distribuidas normalmente

+
+
+
+

Contraste de normalidad

+
    +
  1. Antes de nada debemos de eliminar los pares con datos ausentres
  2. +
+
+
starwars_sin_NA <- starwars |> drop_na(mass, height)
+
+
    +
  1. Tras ello podemos chequearlo de manera visual
  2. +
+
+
+
+
ggplot(starwars) +
+  geom_density(aes(x = height)) +
+  theme_minimal() 
+
+

+
+
+
+
+
ggplot(starwars) +
+  geom_density(aes(x = mass)) +
+  theme_minimal() 
+
+

+
+
+
+
+

Obviamente ninguna de las dos aparenta ser Gaussiana (por asimetría y por outliers)

+
+
+
+

Contraste de normalidad

+
    +
  1. También podemos cotejarlo mediante una prueba de inferencia no parámetrica contastando la normalidad
  2. +
+
+
library(performance)
+
+# check_normality realiza el Shapiro test
+check_normality(starwars_sin_NA$height)
+
+
Warning: Non-normality of raw detected (p < .001).
+
+
check_normality(starwars_sin_NA$mass)
+
+
Warning: Non-normality of raw detected (p < .001).
+
+
+
+

No deberíamos aplicar (al menos no interpretar) el test de correlaciones

+
+
+
+

Correlación de rango

+

Por ello existen dos alternativas: correlación de Spearman y correlación de Kendall

+

 

+

Ambos coeficientes cuantifican no una mera correlación lineal sino una correlación de rango: cuantifica la relación entre los distintos rankings de dos variables cuando se ordenan.

Correlación de Spearman

-

El [coeficiente de correlación de Spearman]{hl-yellow} cuantifica de manera no paramétrica la interdependencia entre dos variables aleatorias (tanto continuas como discretas). Cuantifica el grado de asociación monótona entre dos variables ordinales o continuas

+

El [coeficiente de correlación de Spearman]{hl-yellow} cuantifica de manera no paramétrica la interdependencia entre dos variables aleatorias (tanto continuas como discretas). Cuantifica el grado de asociación monótona entre dos variables ordinales o continuas

\[\rho =1-\frac{6\sum D^{2}}{n (n^{2}-1)}\]

donde \(D\) es la diferencia entre los correspondientes estadísticos de orden de \(x - y\).

-
starwars |> 
-  select(where(is.numeric)) |> 
-  drop_na() |> 
-  cor(method = "spearman")
+
starwars |> 
+  select(mass, height) |> 
+  drop_na() |> 
+  cor(method = "spearman")
+
+
            mass    height
+mass   1.0000000 0.7192179
+height 0.7192179 1.0000000
+
+
cor.test(starwars$mass, starwars$height, method = "spearman")
-
             height      mass birth_year
-height     1.000000 0.6899000  0.1725850
-mass       0.689900 1.0000000  0.1476468
-birth_year 0.172585 0.1476468  1.0000000
+

+    Spearman's rank correlation rho
+
+data:  starwars$mass and starwars$height
+S = 9608.4, p-value = 1.393e-10
+alternative hypothesis: true rho is not equal to 0
+sample estimates:
+      rho 
+0.7192179 
+
+

Correlación de Spearman

+ +

Tau de Kendall

-

El coeficiente de correlación de rango de Kendall (\(\tau\) de Kendall) cuantifica la asociación ordinal de variables cualitativas de manera no paramétrica.

-
+

El coeficiente de correlación de Kendall (\(\tau\) de Kendall) cuantifica la asociación ordinal de variables cualitativas ordinales (o cuantis) de manera no paramétrica.

Dados \(\left(x_1, y_1\right), \ldots, \left(x_n, y_n\right)\) un conjunto de observaciones, se dice que \(\left(x_{i},y_{i}\right)\) y \(\left(x_{j},y_{j}\right)\) (con \(i < j\)) son un par concordante si el orden de clasificación coincide (\(x_i < x_j,~y_i < y_j\) o bien \(x_j < x_i,~y_j < y_i\))

\[\tau =\frac{\text{n pares concordantes} - \text{n pares discordantes}}{n \choose 2}\]

+

El coeficiente de Kendall suele usarse solo cuando \(n\) es pequeño y hay muchos empates (ver usos)

+
+
starwars |> 
+  select(mass, height) |> 
+  drop_na() |> 
+  cor(method = "kendall")
+
+
            mass    height
+mass   1.0000000 0.5704061
+height 0.5704061 1.0000000
+
+
cor.test(starwars$mass, starwars$height, method = "kendall")
+
+

+    Kendall's rank correlation tau
+
+data:  starwars$mass and starwars$height
+z = 6.2649, p-value = 3.731e-10
+alternative hypothesis: true tau is not equal to 0
+sample estimates:
+      tau 
+0.5704061 
+
+
+

Correlación general

+

Kendall demostró en 1970 que tanto \(\tau\) de Kendall como \(\rho\) de Spearman son casos particulares de un coeficiente de correlación general.

+

Si tenemos \(n\) observaciones, para cada par \(\left(x_i, y_j \right)\) podemos definir \(a_{ij}\) como un ranking en la variable \(x\) de ambas observaciones (\(a_{ij} > 0\) si \(x_i > y_j\)) y \(b_{ij}\) como un ranking en la variable \(y\) (\(b_{ij} > 0\) si \(x_i > y_j\)), entonces

+

\[\Gamma = \frac{\sum_{i=1}^{n}\sum_{j=1}^{n}a_{ij}b_{ij}}{\sqrt {\left( \sum_{i=1}^{n}\sum_{j=1}^{n}a_{ij}^{2} \right) \left( \sum_{i=1}^{n}\sum_{j=1}^{n}b_{ij}^{2} \right)}}\]

+

💻 Tu turno

Intenta realizar los siguientes ejercicios sin mirar las soluciones

- +

Vamos a tomar de nuevo nuestros datos de satisfacción de pacientes

-
library(readr)
-datos <-
-  read_csv(file = "./datos/SatisfaccionPacientes.csv") |> 
-  janitor::clean_names()
-datos
+
library(readr)
+datos <-
+  read_csv(file = "./datos/SatisfaccionPacientes.csv") |> 
+  janitor::clean_names()
+datos
# A tibble: 100 × 8
       id  edad genero    estado_civil tiempo_espera grado_satisfaccion
@@ -2190,74 +2297,95 @@ 

💻 Tu turno

# ℹ 2 more variables: numero_visitas <dbl>, estado_salud <chr>
-

📝 Obtén la matriz de correlaciones haciendo uso de cor(). Luego haz uso de correlate() del paquete {corrr}

+

📝 Obtén la matriz de correlaciones de Pearson haciendo uso de cor(). Luego haz uso de correlate() del paquete {corrr}

Código -
datos |> 
-  select(where(is.numeric)) |> 
-  cor()
-
-datos |> 
-  select(where(is.numeric)) |> 
-  corrr::correlate()
+
datos |> 
+  select(where(is.numeric)) |> 
+  cor()
+
+datos |> 
+  select(where(is.numeric)) |> 
+  corrr::correlate()
-

📝 Analiza y argumenta, en función de los resultados anteriores, la asociación entre edad y grado_satisfaccion, y entre tiempo_espera y grado_satisfaccion

+

📝 Obtén la matriz de correlaciones con kendall y spearman

Código -
# Vemos que por ejemplo `edad` no correla con `grado_satisfaccion` ($-0.0339$) pero `tiempo_espera` tiene una correlación negativa ($-0.586$) con `grado_satisfaccion`.
+
datos |> 
+  select(where(is.numeric)) |> 
+  corrr::correlate(method = "spearman")
+
+datos |> 
+  select(where(is.numeric)) |> 
+  corrr::correlate(method = "kendall")
+

📝 Analiza y argumenta, en función de los resultados anteriores, la asociación entre edad y grado_satisfaccion, y entre tiempo_espera y grado_satisfaccion

+
+
+Código +
# Vemos que por ejemplo `edad` no correla con `grado_satisfaccion` ($-0.0339$ según Pearson) pero `tiempo_espera` tiene una correlación negativa ($-0.586$ según Pearson) con `grado_satisfaccion`.
+
+
+
+

📝 Con el paquete {corrplot} visualiza la matriz de correlaciones

Código -
datos |> 
-  select(where(is.numeric)) |> 
-  cor() |> 
-  corrplot::corrplot(method = "square")
+
datos |> 
+  select(where(is.numeric)) |> 
+  cor() |> 
+  corrplot::corrplot(method = "square")
-

+

-
+

📝 Investiga el paquete {GGally} y a función ggpairs() para visualizar las correlaciones de todas las variables (salvo id)

Código -
library(GGally)
-ggpairs(datos |> select(-id)) +
-  theme_minimal()
+
library(GGally)
+ggpairs(datos |> select(-id)) +
+  theme_minimal()
-

+

Código -
# cuali vs cuali: pictogramas (con rectángulos)
-# cuanti vs cuanti: scatter plot
-# cuanti vs cuali: boxplot desagregados
-# variable vs sí misma: densidad
+
# cuali vs cuali: pictogramas (con rectángulos)
+# cuanti vs cuanti: scatter plot
+# cuanti vs cuali: boxplot desagregados
+# variable vs sí misma: densidad
-
+

📝 ¿Cómo saber que la correlación observada entre edad y grado_satisfaccion (\(-0.0339\)) es suficientemente pequeña para considerarse incorreladas? ¿Cómo saber si la correlación entre tiempo_espera y grado_satisfaccion (\(-0.586\)) es suficientemente grande para considerar que es significativa?

Código -
cor.test(datos$edad, datos$grado_satisfaccion)
-cor.test(datos$tiempo_espera, datos$grado_satisfaccion)
-
-# En uno el p-valor es bastante alto (**no rechazamos la hipótesis nula de incorrelación**) y en otro el p-valor es prácticamente 0 (rechazamos la hipótesis nula ->  **hay evidencias de correlación significativa**).
+
cor.test(datos$edad, datos$grado_satisfaccion)
+cor.test(datos$tiempo_espera, datos$grado_satisfaccion)
+
+# En uno el p-valor es bastante alto (**no rechazamos la hipótesis nula de incorrelación**) y en otro el p-valor es prácticamente 0 (rechazamos la hipótesis nula ->  **hay evidencias de correlación significativa**).
+
+# Ninguna de las 3 es normal así que lo apropiado sería
+# contrastar la correlación de rango
+performance::check_normality(datos$edad)
+performance::check_normality(datos$grado_satisfaccion)
+performance::check_normality(datos$tiempo_espera)
@@ -2269,16 +2397,648 @@

💻 Tu turno

Clase 3: análisis de la varianza

Asociación cuali vs cuanti: análisis de la varianza (30 de enero de 2025)

-
-

+
+

Cuanti vs cuali

+

Ya conocemos herramientas básicas para analizar la dependencia entre dos variables:

+
    +
  • Cuali vs cuali: test de Fisher o prueba de \(\chi^2\), tablas de contigencia, diagramas de barras.

  • +
  • Cuanti vs cuanti: correlaciones y test de correlaciones lineal (Pearson), correlaciones y test de correlaciones de rango (Spearman y Kendall), diagramas de dispersión.

  • +
+

¿Pero qué sucede con la asociación cuali vs cuanti?

+
+
+

Cuanti vs cuali

+

Imagina que tenemos \(n\) estudiantes de los que disponemos sus notas \(y_{ij}\) para \(j=1,2\) asignaturas alumnos (datos en notas_1factor_2cat.csv)

+
+
datos <- read_csv(file = "./datos/notas_1factor_2cat.csv")
+datos
+
+
# A tibble: 1,000 × 3
+   rowid notas asignatura
+   <dbl> <dbl> <chr>     
+ 1     1  8.02 A         
+ 2     2  6.15 B         
+ 3     3  7.94 A         
+ 4     4  6.33 B         
+ 5     5  8.31 A         
+ 6     6  7.75 A         
+ 7     7  8.28 A         
+ 8     8  6.96 B         
+ 9     9  6.35 B         
+10    10  8.57 A         
+# ℹ 990 more rows
+
+
+

 

+

¿Existe dependencia entre la nota y la variable asignatura (cualitativa)? ¿Son similares (en promedio) entre las asignaturas o hay una de las dos más sencilla?

+
+
+

Análisis de la varianza

+

Disponemos de

+
    +
  • Variable continua: notas de \(n\) estudiantes denotadas como \(y_{ij}\), con \(i=1,\ldots, n\).

  • +
  • Variable cualitativa o factor: dos asignaturas \(j=1,2\)

  • +
+

El objetivo es ver la posible asociación entre la variable objetivo y el factor, es decir, determinar si existe un efecto del factor sobre el valor esperado de la variable continua.

+
+

A eso se le conoce como análisis de la varianza (ANOVA) o análisis factorial, desarrollada por R. Fisher en 1930, y empezaremos por el ejemplo más sencillo de un factor (una sola variable cualitativa).

+
+
+
+

ANOVA: un factor

+

¿Cómo conceptualizar matemáticamente un modelo que asuma que todas las asignaturas tienen medias similares?

+
+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \quad \text{perturbación aleatoria}\]

+

donde \(\mu_j\) representa la media de los estudiantes en la asignatura \(j\) y la perturbación \(\varepsilon_{ij}\) representa la desviación de la nota en la asignatura \(j\) del estudiante \(i\) (representan la variabilidad intrínseca del EXPERIMENTO).

+
+
+
+

ANOVA: un factor

+

Esas perturbaciones vamos a asumir que cumplen una serie de hipótesis

+
    +
  1. Promedio nulo: \(E[\varepsilon_{ij}] = 0\) para todo \(i,j\) (las desviaciones positivas se compensan con las negativas)
  2. +
+
+
    +
  1. Varianza constante (homocedasticidad): \(V[\varepsilon_{ij}] = cte = \sigma^2\) para todo \(i,j\) (las desviaciones respecto a la media de la asignatura son iguales)
  2. +
+
+
+
    +
  1. Normalidad: \(\varepsilon_{ij} \sim N\)
  2. +
+
+
+
    +
  1. Incorrelación: al ser normales esto automáticamente implica que son independientes (conocer la desviación de un estudiante no nos da información sobre otro: el orden de recolección no afecta a los resultados)
  2. +
+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2) \quad \Rightarrow \quad y_{ij} \sim N(\mu_j, \sigma^2)\]

+
+
+
+

ANOVA: un factor

+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2) \quad \Rightarrow \quad y_{ij} \sim N(\mu_j, \sigma^2)\]

+

Los esimadores insesgados de dichos parámetros poblacionales \(\left(\mu_j, \sigma^2 \right)\) son

+
    +
  • Media: \(\hat{\mu}_{j} = \overline{y}_j\), lo que implica que \(\hat{\varepsilon}_{ij} = y_{ij} - \overline{y}_j\).

  • +
  • Varianza:

  • +
+

\[\hat{\sigma}^2 = \frac{1}{n} \sum_{j=1}^{c}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \sum_{j=1}^{c} \frac{n_j}{n} s_{j}^2\]

+

es decir, el promedio de las desviaciones al cuadrado respecto a la media de cada grupo (también expresado como media ponderada de cada variabilidad), donde \(s_{j}^2 = \frac{1}{n_j}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2\) representa la varianza de cada grupo.

+
+
+

ANOVA: un factor

+

\[\hat{\sigma}^2 = \sum_{j=1}^{c} \frac{n_j}{n} s_{j}^2, \quad s_{j}^2 = \frac{1}{n_j}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2\]

+

Sin embargo, dado que cada \(\sum_{i=1}^{n_j} \left(\frac{y_{ij} - \overline{y}_j}{\sigma} \right)^2\) son independientes entre sí y siguen una \(\chi^{2}_{n_j - 1}\) (la suma de normales al cuadrado es una \(\chi^2\)), tenemos que

+

\[n\frac{\hat{\sigma}^2}{\sigma^2} \sim \chi^{2}_{n-c} \Rightarrow E[n\frac{\hat{\sigma}^2}{\sigma^2}] = n - c \Rightarrow E[\hat{\sigma}^2] = \frac{n-c}{n} \sigma^2\]

+
+

Es decir: \(\hat{\sigma}^2\) no es un estimador insesgado de \(\sigma^2\) así que usaremos la conocida como varianza residual (estimada)

+

\[\hat{s}_{r}^2 = \frac{n}{n-c}\hat{\sigma}^2 = \frac{1}{n-c} \sum_{j=1}^{c}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \frac{1}{n-c} \sum_{j=1}^{c}\sum_{i=1}^{n_j} \hat{\varepsilon}_{ij}^2\]

+
+
+
+

ANOVA: un factor

+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)\]

+

¿Qué contraste deberíamos plantear si queremos comprobar si existe un efecto del factor (asignatura) en la variable objetivo (nota)?

+
+

\[H_0:~\mu_1 = \mu_2 = cte = \mu \quad vs \quad H_1:~\text{no todas son iguales}\]

+

La hipótesis nula es que las diferencias (variabilidad) entre notas en las distintas asignaturas se debe únicamente a una variabilidad aleatoria (y no una diferencia sistemática)

+
+
+
+

ANOVA: un factor

+

Vamos a visualizar las dos distribuciones

+
+
+Código +
ggplot(datos) +
+    geom_density(aes(x = notas, color = asignatura, fill = asignatura),
+                 alpha = 0.5) +
+   geom_point(aes(x = notas, y = 0, color = asignatura),
+              size = 1.7, alpha = 0.85) +
+    MetBrewer::scale_color_met_d(palette_name = "Renoir") +
+    MetBrewer::scale_fill_met_d(palette_name = "Renoir") +
+    theme_minimal()
+
+ +
+

Aunque la distribución B está más desplazada a la izquierda, la nota más alta es de la asignatura B. ¿Es suficiente para decir que A distinto de B?

+
+
+

ANOVA: un factor

+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)\]

+

\[H_0:~\mu_1 = \mu_2 = cte = \mu \quad vs \quad H_1:~\text{no todas son iguales}\]

+

En el caso de que solo tengamos dos grupos la solución es fácil: basta con hacer un contraste de medias conocido como prueba t

+
+
t.test(datos |> filter(asignatura == "A") |> pull(notas),
+       datos |> filter(asignatura == "B") |> pull(notas))
+
+

+    Welch Two Sample t-test
+
+data:  pull(filter(datos, asignatura == "A"), notas) and pull(filter(datos, asignatura == "B"), notas)
+t = 46.326, df = 836.58, p-value < 2.2e-16
+alternative hypothesis: true difference in means is not equal to 0
+95 percent confidence interval:
+ 1.468714 1.598677
+sample estimates:
+mean of x mean of y 
+ 8.039705  6.506010 
+
+
+
+
+

ANOVA: un factor

+

¿Pero qué pasaría si en lugar de dos asignaturas tuviésemos 6 asignaturas?

+
+

El problema de hacer contrastes 2 a 2 es que tendríamos que hacer \({6 \choose 2} = 15\) comparaciones (1-1, 1-2, …, 1-6, 2-3, …, 5-6).

+
+
+

No solo son muchos contrastes sino que si cada contraste se hace con una probabilidad individual de error tipo I de \(\alpha = 0.05\), y suponiendo que todas las comparaciones fuesen independientes, la probabilidad de que se verifiquen las 15 igualdades de manera conjunta ya no es de 0.95 sino \(0.95^{15} = 0.463\): si hacemos muchos contrastes es muy probable que, por azar, alguno salga significativo (aunque realmente no haya diferencia en las medias)

+
+
+
+

Corrección de Bonferroni

+

Un paréntesis: para solventar el problema de las comparaciones múltiples un solución habitual (la más sencilla aunque no siempre la mejor) es lo que se conoce como corrección de Bonferroni

+
+

Sea \(A_i\) el suceso “se rechaza la igualdad de medias de la comparación i” (que sucede con probabilidad \(\alpha\) si la hipótesis nula es cierta). Y sea \(B = \bigcup_i A_i\) el suceso de rechazar alguna de las comparaciones (es decir, no todas son iguales). Entonces, si tenemos \(c\) comparaciones

+

\[P(B) = P(\bigcup_i A_i) \leq \sum_i P(A_i) = c \alpha := \alpha_T\]

+
+
+

Si queremos que ese \(\alpha_T\) conjunto sea (al menos) de 0.05, necesitamos que cada \(\alpha\) individual sea \(\alpha = \alpha_T/c\) (en nuestro ejemplo \(\alpha = 0.00333\), demasiado pequeño si \(c\) crece), o lo que es lo mismo $p-valor_{j}^{adj} = c*p-value_j $

+
+
+
+

ANOVA: un factor

+

No solo existe un problema de comparaciones múltiples sino que, además, ¡no lo necesitamos!

+
+

Nosotros (de momento) no queremos saber cuál de las asignaturas tiene más o menos nota media sino simplemente contestar a la pregunta: ¿todas tienen la misma nota media o existe un efecto entre la asignatura y la nota?

+
+
+

Y para responder a dicha pregunta no necesitamos chequear 2 a 2: basta con que encontremos una que no sea igual

+
+
+
+

ANOVA: un factor

+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)\]

+

La idea es que no necesitamos comparar 2 a 2. Si tenemos \(c\) grupos sabemos que las medias \(\mu_j\) (\(j=1,\ldots,c\)) nunca van a ser exactamente iguales aunque el grupo no afecte, debido a la variabilidad intrínseca del experimento \(\varepsilon_{ij}\)

+
+

¿Es esa variabilidad entre las estimaciones muestrales de las medias (varianza ENTRE grupos, debida a estar en un grupo u otro) significativamente superior a la variabilidad promedio (intrínseca) de los grupos (varianza DENTRO de los grupos, no explicada por los grupos sino intrínseca a los datos)?

+
+
+
+

ANOVA: un factor

+

Si la hipótesis nula fuese cierta (todas las observaciones vienen de la misma población con misma varianza y media), la varianza entre grupos (explicada por el grupo) sería la misma que la varianza promedio dentro de los grupos: según se alejen las medias de los grupos, la primera se incrementará pero la segunda permanecerá constante.

+
+
+

+
+

+
+
+
+
+

ANOVA: un factor

+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)\]

+

¿Cómo calcular la varianza explicada por la variable de grupo (la variabilidad de las medias de cada grupo) y la varianza no explicada por el grupo (el promedio de las varianzas dentro de cada grupo, intrínseca a los datos)?

+
+

La variabilidad total (SST o VT) de la variable \(y\) se define como

+

\[SST = \displaystyle \sum_{l=1}^{n} \left(y_l - \overline{y} \right)^2 = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2, \quad VT = \frac{1}{n} \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2\]

+
+
+
+

ANOVA: un factor

+

\[SST = \displaystyle \sum_{l=1}^{n} \left(y_l - \overline{y} \right)^2 = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2, \quad VT = \frac{1}{n} \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2\]

+

A continuación añadimos y restamos dentro del paréntesis la misma cantidad (la media muestral de cada grupo \(\overline{y}_j\), estimación insesgada de \(\mu_j\))

+

\[\begin{eqnarray}\color{green}{SST} &=& \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2 = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left( \left(y_{ij} - \overline{y}_j \right) - \left(\overline{y}_j - \overline{y} \right) \right)^2 \nonumber \\ &=& \color{purple}{\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2} + \color{red}{\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(\overline{y}_j - \overline{y} \right)^2} - 2\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right) \left(\overline{y}_j - \overline{y} \right) \nonumber \\ \color{green}{VT} &=& \color{purple}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2} + \color{red}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(\overline{y}_j - \overline{y} \right)^2} - \frac{2}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right) \left(\overline{y}_j - \overline{y} \right) +\end{eqnarray}\]

+
+
+

ANOVA: un factor

+

El segundo término es en realidad la variabilidad (ponderada) de las medias de los grupos (cómo fluctua la media entre los grupos)

+

\[\color{red}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(\overline{y}_j - \overline{y} \right)^2 = \frac{1}{n}\sum_{j=1}^{c} n_j \left(\overline{y}_j - \overline{y} \right)^2 = \sum_{j=1}^{c} \frac{n_j}{n} \left(\overline{y}_j - \overline{y} \right)^2 }\]

+

ya que

+

\[\overline{\overline{y}_j} = \frac{1}{c} \sum_{j=1}^{c} \overline{y}_j = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \frac{1}{c* n_{j}} y_{ij} = \frac{1}{n}\sum_{l}^{n} y_{l} = \overline{y}\]

+

Es la variabilidad explicada por los grupos (variabilidad - de la media - ENTRE grupos).

+
+
+

ANOVA: un factor

+

El primer término es en realidad la media de la variabilidad \(s_{j}^2\) DENTRO de cada grupo (el promedio de la variabilidad intragrupo)

+

\[\color{purple}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \frac{n_j}{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \sum_{j=1}^{c} \frac{n_j}{n} s_{j}^2} := \hat{\sigma}^2\]

+

lo que hemos denominado antes \(\hat{\sigma}^2 = \frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \hat{\varepsilon_{ij}}^2\) que se relaciona con la varianza residual (estimada) como \(\hat{\sigma}^2 = \frac{n-c}{n} \hat{s}_{r}^{2}\).

+

Es la variabilidad NO explicada (residual) por el factor (promedio - de manera ponderada - de la variabilidad DENTRO de cada grupo)

+
+
+

ANOVA: un factor

+

Por tanto, dado que el modelo es lineal, la variabilidad o información total se puede descomponer como varianza explicada (VE o suma cuadrados explicada - SSE) más varianza no explicada (VR o suma cuadrados residuales - SSR)

+

\[SST = SSE + SSR, \quad VT = VE + VR\]

+

\[VE = \sum_{j=1}^{c}\frac{ n_j}{n} \left(\overline{y}_j - \overline{y} \right)^2, \quad VR = \frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \hat{\varepsilon}_{ij}^2 = \hat{\sigma}^2 = \frac{n-c}{n} \hat{s}_{r}^{2}\]

+

Así el objetivo será construir un estadístico para cuantificar si \(VE\) se aleja mucho de \(VR\) o no.

+
+
+

ANOVA: un factor

+

Se puede demostrar como

+

\[\frac{SSE}{\sigma^2} \sim \chi^2_{c-1}, \quad \frac{SSR}{\sigma^2} \sim \chi^2_{n-c} \quad \Rightarrow \quad F = \frac{\frac{SSE}{(c-1)\sigma^2}}{\frac{SSR}{(n-c)\sigma^2}} = \frac{\frac{SSE}{c-1}}{\frac{SSR}{n-c}} = \frac{\hat{s}_{e}^2}{\frac{n*VR}{n-c}} = \frac{\hat{s}_{e}^2}{\hat{s}_{r}^2} \sim F_{c-1, n-c}\]

+

usando que el cociente (ponderado por sus grados de libertad) de dos \(\chi^2\) sigue una distribución conocida, calculando lo que se conoce como estadístico F.

+
+

Si te fijas

+
    +
  • \(\hat{s}_{e}^2 = \frac{SSE}{c-1} = \frac{n * VE}{c-1} = \frac{1}{c-1}\sum_{j=1}^{c}n_j \left(\overline{y}_j - \overline{y} \right)^2\) es la varianza explicada (estimada) calculada como una cuasivarianza ponderada.

  • +
  • \(\hat{s}_{r}^2 = \frac{SSR}{n-c} = \frac{n*VR}{n-c}\) es la varianza residual (estimada) mencionada anteriormente

  • +
+
+
+
+

ANOVA: un factor

+

Vamos a ver el ejemplo en R haciendo uso de la función aov()

+
    +
  • data = ...: la base de datos
  • +
  • formula = ...: indicado como var_objetivo ~ factor (donde ~ representa un “vs”)
  • +
  • |> summary(): para obtener un resumen
  • +
+
+
aov(data = datos, formula = notas ~ asignatura) |> summary()
+
+
             Df Sum Sq Mean Sq F value Pr(>F)    
+asignatura    1  564.5   564.5    2173 <2e-16 ***
+Residuals   998  259.2     0.3                   
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+
+
+

ANOVA: un factor

+
+
aov(data = datos, formula = notas ~ asignatura) |> summary()
+
+
             Df Sum Sq Mean Sq F value Pr(>F)    
+asignatura    1  564.5   564.5    2173 <2e-16 ***
+Residuals   998  259.2     0.3                   
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+

Si analizamos por filas tenemos

+
    +
  • asignatura: la parte correspondiente la variabilidad explicada o entre grupos

  • +
  • Residuals: la parte correspondiente la variabilidad no explicada o intra grupos

  • +
+
+
+

ANOVA: un factor

+
+
aov(data = datos, formula = notas ~ asignatura) |> summary()
+
+
             Df Sum Sq Mean Sq F value Pr(>F)    
+asignatura    1  564.5   564.5    2173 <2e-16 ***
+Residuals   998  259.2     0.3                   
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+
    +
  • Df: degrees of freedom (grados de libertad), definidos como \(c-1\) para \(SSE/VE\) (ya que \(\frac{SSE}{\sigma^2} \sim \chi^2_{c-1}\)) y \(n-c\) (ya que \(\frac{SSR}{\sigma^2} \sim \chi^2_{n-c}\)).

  • +
  • Sum Sq: sum of squares (suma de cuadrados), es decir, \(SSE\) y \(SSR\).

  • +
  • Mean Sq: mean of squares (media de la suma de cuadrados, ponderado por Df), es decir, \(\hat{s}_{e}^{2}\) y \(\hat{s}_{r}^{2}\).

  • +
  • F value y Pr(>F): valor del estadístico \(F = \frac{\hat{s}_{e}^{2}}{\hat{s}_{r}^{2}}\) y p-valor del contraste

  • +
+
+

En este caso: rechazamos la hipótesis nula de igualdad de medias, es decir, existen evidencias suficientes para concluir que el grupo tiene un efecto en las notas

+
+
+
+

Caso real: crecimiento bebés

+

Vamos a usar la tabla leche_materna.csv que recopila los resultados obtenidos de 2 tratamientos de leche en polvo distintos para el crecimiento de bebés prematuros (de los que se miden su peso tras el tratamiento, partiendo de unas características similares, incluyendo además un grupo control).

+

¿El objetivo? Comprobar si alguno de los tratamientos fue efectivo.

+
+
datos <-
+    read_csv(file = "./datos/leche_materna.csv") |> 
+    janitor::clean_names()
+datos
+
+
# A tibble: 30 × 2
+   weight group
+    <dbl> <chr>
+ 1   4.17 ctrl 
+ 2   5.58 ctrl 
+ 3   5.18 ctrl 
+ 4   6.11 ctrl 
+ 5   4.5  ctrl 
+ 6   4.61 ctrl 
+ 7   5.17 ctrl 
+ 8   4.53 ctrl 
+ 9   5.33 ctrl 
+10   5.14 ctrl 
+# ℹ 20 more rows
+
+
+
+
+

Caso real: crecimiento bebés

+
+
datos
+
+
# A tibble: 30 × 2
+   weight group
+    <dbl> <chr>
+ 1   4.17 ctrl 
+ 2   5.58 ctrl 
+ 3   5.18 ctrl 
+ 4   6.11 ctrl 
+ 5   4.5  ctrl 
+ 6   4.61 ctrl 
+ 7   5.17 ctrl 
+ 8   4.53 ctrl 
+ 9   5.33 ctrl 
+10   5.14 ctrl 
+# ℹ 20 more rows
+
+
+

¿Cómo formulamos el ANOVA?

+
+

\[y_{ij} = \mu_j + \varepsilon_{ij}, \quad y_{ij} = \text{peso del niño i del grupo j}, \quad j=1,2,3 \text{ (control, trt1, trt2)}\]

+

donde \(\mu_j\) representa la media de peso de cada grupo, cuyo estimador insesgado es \(\overline{y}_{j}\)

+
+
+
+

Caso real: crecimiento bebés

+

¿La hipótesis nula?

+
+

\[H_0:~\mu_1 = \mu_2 = \mu_3 \quad \text{(no diferencias entre tratamientos y control)}, \quad H_1:~existe\]

+

¿Existe una asociación entre el tratamiento/control y el peso?

+
+
+
+

Caso real: crecimiento bebés

+

Desde un punto de vista descriptivo, ¿cómo resumirlo numérica y gráficamente?

+
+
+
+
datos |> 
+  summarise("mean_peso" = mean(weight),
+            "sd_peso" = sd(weight),
+            .by = group)
+
+
# A tibble: 3 × 3
+  group mean_peso sd_peso
+  <chr>     <dbl>   <dbl>
+1 ctrl       5.03   0.583
+2 trt1       4.66   0.794
+3 trt2       5.53   0.443
+
+
+
+
+
+Código +
ggplot(datos) +
+  geom_boxplot(aes(x = group, y = weight, fill = group,
+                   color = group), alpha = 0.5) +
+  MetBrewer::scale_color_met_d(palette_name = "Renoir") +
+  MetBrewer::scale_fill_met_d(palette_name = "Renoir") +
+  theme_minimal()
+
+
+

+
+
+
+
+
+
+

Caso real: crecimiento bebés

+
+
+Código +
ggplot(datos |>
+         rowid_to_column(var = "id") |>
+         mutate("mean_weight" = mean(weight), .by = group)) +
+  geom_point(aes(x = id, y = weight, color = group),
+             alpha = 0.5, size = 4) +
+  geom_line(aes(x = id, y = mean_weight, color = group),
+            linewidth = 2) +
+  scale_y_continuous(limits = c(2.5, 7.5)) +
+  MetBrewer::scale_color_met_d(palette_name = "Renoir") +
+  theme_minimal()
+
+ +
+
+
+

Caso real: crecimiento bebés

+
+
aov(data = datos, formula = weight ~ group) |> summary()
+
+
            Df Sum Sq Mean Sq F value Pr(>F)  
+group        2  3.766  1.8832   4.846 0.0159 *
+Residuals   27 10.492  0.3886                 
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+

El resultado del ANOVA de un factor (one-way ANOVA) es el siguiente:

+

Si analizamos por filas tenemos

+
    +
  • group: la parte correspondiente la variabilidad explicada o entre grupos de tratamiento

  • +
  • Residuals: la parte correspondiente la variabilidad no explicada o intra grupos

  • +
+
+
+

Caso real: crecimiento bebés

+
+
aov(data = datos, formula = weight ~ group) |> summary()
+
+
            Df Sum Sq Mean Sq F value Pr(>F)  
+group        2  3.766  1.8832   4.846 0.0159 *
+Residuals   27 10.492  0.3886                 
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+

Si analizamos por columnas tenemos

+
    +
  • Df: tenemos 2 grados de libertad (3 grupos - 1) para la varianza explicada y 27 grados de libertad (30 - 3 grupos) para la varianza no explicada.

  • +
  • Sum Sq: \(SSE = 3.766\) y \(SSR = 10.492\),

  • +
  • Mean Sq: \(\hat{s}_{e}^{2} = 1.8832\) y \(\hat{s}_{r}^{2} = 0.3886\).

  • +
  • F value y Pr(>F): valor del estadístico \(F = \frac{\hat{s}_{e}^{2}}{\hat{s}_{r}^{2}} = \frac{1.8832}{0.3886} = 4.846\) y p-valor

  • +
+
+

Rechazamos la hipótesis nula: existen evidencias para concluir que el tratamiento tiene un efecto en el peso

+
+
+
+

Caso real: crecimiento bebés

+
+
aov(data = datos, formula = weight ~ group) |> summary()
+
+
            Df Sum Sq Mean Sq F value Pr(>F)  
+group        2  3.766  1.8832   4.846 0.0159 *
+Residuals   27 10.492  0.3886                 
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+

¿El problema?

+
+

Sabemos que el tratamiento (bien sea “real” bien sea el grupo control) tiene un efecto (al menos estadístico) y que se observan medias distintas.

+

 

+

¿Pero cuáles son distintas 2 a 2? ¿Son distintas entre los tratamientos? ¿Son distintas tratamientos vs control? ¿Solo uno de los tratamientos es distinto o ambos?

+

En este caso necesitamos 3 comparaciones.

+
+
+
+

Pruebas post-hoc

+

Tras obtener un resultado significativo en un ANOVA el siguiente objetivo sería determinar cuál de los grupos bajo estudio contribuye a esta significación estadística.

+
+

Pero como hemos explicado, la estrategia de aplicar repetidamente pruebas t-Student puede conllevar un aumento desmesurado de la probabilidad de cometer un error de Tipo I (detectar diferencias por pura aleatoriedad)

+
+
+

 

+

Alguno de los métodos post-hoc más comunes (ver más) son Bonferroni, Tukey y Dunnett.

+
+
+
+

post-hoc: bonferroni

+

El método de corrección Bonferroni ya lo hemos explicado anteriormente y para implementarlo basta con usar pairwise.t.test()

+
+
# `pool.sd = FALSE` implica que, para cada comparativa, se calcula una desv en cada grupo
+# `pool.sd = TRUE` --> la desviación estándar agrupada es un promedio ponderado de las sd de
+# dos o más grupos, tal que las sd individuales se promedian, con más "peso" dado a
+# tamaños de muestra más grandes. solo usar cuando los tamaños de cada grupo sean muy distintos
+pairwise.t.test(datos$weight, datos$group, p.adjust.method = "bonferroni", pool.sd = FALSE)
+
+

+    Pairwise comparisons using t tests with non-pooled SD 
+
+data:  datos$weight and datos$group 
+
+     ctrl  trt1 
+trt1 0.751 -    
+trt2 0.144 0.028
+
+P value adjustment method: bonferroni 
+
+
+
+
    +
  • ctrl vs trt 1: p-valor ajustado 0.751 –> sin diferencias significativas

  • +
  • ctrl vs trt 2: p-valor ajustado 0.144 –> sin diferencias significativas

  • +
  • trt 1 vs trt 2: p-valor ajustado 0.028 –> dif sig de los tratamientos

  • +
+
+
+
+

Pruebas post-hoc

+
    +
  • Bonferroni: +
      +
    • Ventajas: simplicidad y no paramétrico
    • +
    • Desventajas: al intentar controlar tanto error tipo I (rechazar \(H_0\) sin que existan diferencias) es un método muy conservador -> cuesta mucho que se rechace \(H_0\) -> alta tasa de errores tipo II según aumentan comparaciones
    • +
  • +
+
+

Para evitar los problemas de Bonferroni cuando hay un alto número de comparaciones existe una alternativa conocida como test de Tukey.

+
+
aov(data = datos, formula = weight ~ group) |> 
+  TukeyHSD()
+
+
  Tukey multiple comparisons of means
+    95% family-wise confidence level
+
+Fit: aov(formula = weight ~ group, data = datos)
+
+$group
+            diff        lwr       upr     p adj
+trt1-ctrl -0.371 -1.0622161 0.3202161 0.3908711
+trt2-ctrl  0.494 -0.1972161 1.1852161 0.1979960
+trt2-trt1  0.865  0.1737839 1.5562161 0.0120064
+
+
+
+
+
+

post-hoc: Tukey

+
+
aov(data = datos, formula = weight ~ group) |> 
+  TukeyHSD()
+
+
  Tukey multiple comparisons of means
+    95% family-wise confidence level
+
+Fit: aov(formula = weight ~ group, data = datos)
+
+$group
+            diff        lwr       upr     p adj
+trt1-ctrl -0.371 -1.0622161 0.3202161 0.3908711
+trt2-ctrl  0.494 -0.1972161 1.1852161 0.1979960
+trt2-trt1  0.865  0.1737839 1.5562161 0.0120064
+
+
+
    +
  • Tukey: +
      +
    • Ventajas: controla eficazmente la tasa de error tipo I, muy útil para muchas comparaciones y mayor poder estadístico* vs Bonferroni
    • +
    • Desventajas: sensible a valores atípicos y es paramétrico (requiere normalidad, grupos de tamaño similar e igualdad de varianzas)
    • +
  • +
+

Poder o potencia estadística: probabilidad de rechazar \(H_0\) cuando dicha hipótesis es falsa (probabilidad de no cometer un error del tipo II).

+
+
+

post-hoc: Dunnet

+

En muchas ocasiones no siempre queremos comparaciones 2 a 2 indistintamente sino que querremos confrontar el resto de grupos respecto a un grupo control (en nuestro caso: 2 tratamientos vs control, no los tratamientos entre sí).

+
+

Para ello disponemos del test de Dunnet

+

\[H_0:~\mu_{tr_{j}} = \mu_{ctrl}, \quad H_1:~\mu_{tr_{j}} \neq \mu_{ctrl}\]

+
    +
  • Dunnet: +
      +
    • Ventajas: el contraste con mayor potencia cuando se trata de comaprar contra un grupo contorl
    • +
    • Desventajas: paramétrico (requiere normalidad, igualdad de varianzas e independencia entre grupos)
    • +
  • +
+
+
+
+

Pruebas post-hoc

+

Para implementarlo primero chequeamos igualdad de varianzas entre los grupos (por ejemplo, con car::leveneTest())

+
+
car::leveneTest(datos$weight ~ datos$group)
+
+
Levene's Test for Homogeneity of Variance (center = median)
+      Df F value Pr(>F)
+group  2  1.1192 0.3412
+      27               
+
+
+
+

Y luego DunnettTest() del paquete {DescTools}

+
+
DescTools::DunnettTest(x = datos$weight, g = datos$group, control = "ctrl")
+
+

+  Dunnett's test for comparing several treatments with a control :  
+    95% family-wise confidence level
+
+$ctrl
+            diff     lwr.ci    upr.ci   pval    
+trt1-ctrl -0.371 -1.0215695 0.2795695 0.3227    
+trt2-ctrl  0.494 -0.1565695 1.1445695 0.1535    
+
+---
+Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+

Obtenemos que no hay dif. sig. entre ctrl y tratamientos

+

Clase 4: análisis de la varianza

Asociación cuali vs cuanti: análisis de la varianza (4 de febrero de 2025)

-
-

+
+

ANOVA: dos factores

diff --git a/supervisado-datascience/diapos/index.qmd b/supervisado-datascience/diapos/index.qmd index 762c261..49660ab 100644 --- a/supervisado-datascience/diapos/index.qmd +++ b/supervisado-datascience/diapos/index.qmd @@ -1,2005 +1,2801 @@ ---- -title: "Aprendizaje Supervisado I" -subtitle: "Métodos de predicción lineal" -title-slide-attributes: - data-background-image: img/data-science-2.jpeg - data-background-size: cover - data-background-opacity: "0.2" -author: "Grado en Ciencia de Datos Aplicada • curso 2024-2025" -affiliation: Facultad de Estudios Estadísticos (UCM) -lang: es -language: custom_lang.yml -format: - revealjs: - theme: [default, style.scss] - chalkboard: true - multiplex: true - menu: - side: left - width: normal - footer: "[Javier Álvarez Liébana](...) • Grado en Ciencia de Datos Aplicada (UCM) • curso 2024-2025" - slide-number: c/t -execute: - echo: true ---- - -# Empieza lo bueno...empieza la modelización - -[**Vamos a juntar las piezas del puzzle para hacer «magia»**]{style="color:#444442;"} - -```{r} -#| echo: false -#| message: false -#| warning: false -library(tidyverse) -``` - ---- - -## ¡Buenas! - -[**Correo**]{.hl-green}: ****. [**Despacho**]{.hl-green}: 722 (3ª planta). - -::: columns -::: {.column width="30%"} -![](img/me.jpeg) -::: - -::: {.column width="70%"} -::: incremental -- [**Javier Álvarez Liébana**]{.hl-yellow}, de Carabanchel (Bajo). - -- Licenciado en Matemáticas (UCM). [**Doctorado en estadística**]{.hl-yellow} (UGR). - -- Encargado de la [**visualización y análisis de datos covid**]{.hl-yellow} del Principado de Asturias (2021-2022). - -- Miembro de la [**Sociedad Española de Estadística e IO**]{.hl-yellow} y la [**Real Sociedad Matemática Española**]{.hl-yellow}. -::: -::: -::: - -. . . - -Actualmente, [**investigador y docente en la Facultad de Estadística de la UCM**]{.hl-yellow}. Divulgando por [**Twitter**](https://twitter.com/dadosdelaplace) e [**Instagram**](https://instagram.com/javieralvarezliebana) - - ---- - -## Objetivos - -::: columns -::: {.column width="37%"} -![](https://assets-global.website-files.com/6092cb6b4ac959f39728dd26/6188a97fa499b5fbfe410417_target%20(1).png) -::: - -::: {.column width="63%"} -::: incremental -- Empezar a [**relacionar asignaturas**]{.hl-yellow} como matemáticas, inferencia y R. - -- Aprender los fundamentos del [**aprendizaje estadístico**]{.hl-yellow} (ahora llamado Machine Learning o data science) - -- Pasar de los descriptivo a lo predictivo: [**construir nuestros primeros modelos**]{.hl-yellow} - -- Entender en profundidad el contexto de la [**predicción lineal**]{.hl-yellow}. - - -::: -::: -::: - ---- - -## Evaluación - -- [**Asistencia**]{.hl-yellow}. Se [**valorará muy positivamente**]{.hl-purple} la participación. - -. . . - -- [**Evaluación continua**]{.hl-yellow}: 1 **examen teórico a papel** (30%) y **3 entregas R en clase** (10%-25%-35%). - -. . . - -- [**Examen final**]{.hl-yellow}: - - [**Más de 7 de continua**]{.hl-purple} -> podrás decidir **peso del final entre 0% y 100%**. - - [**Entre 6 y 7 de continua**]{.hl-purple} -> decidir **peso del final entre un 30% y un 100%**. - - [**Entre 5 y 6 de continua**]{.hl-purple} ->**peso del final entre un 50% y un 100%**. - - [**Entre 3.5 y 5 de continua**]{.hl-purple} -> **peso del final entre un 70% y un 100%**. - - [**Por debajo de 3.5 de continua**]{.hl-purple} -> **peso del final del 100%**. - -Para que haga [**media el final**]{.hl-red} debes de sacar más de un 3 sobre 10. - ---- - -## Planificación - - -* [**Entrega I (10%)**]{.hl-yellow}: 6 de febrero. - -* [**Entrega II (25%)**]{.hl-yellow}: 15 o 22 de abril. - -* [**Teórico con papel y boli (30%)**]{.hl-yellow}: 8 de mayo. - -* [**Entrega III (35%)**]{.hl-yellow}: 13 de mayo. - - ---- - -## Materiales - -* [**Diapositivas**]{.hl-yellow}: las diapositivas que usaremos en el aula a lo largo del curso, estructuradas por clases, estarán disponibles y actualizadas en **** - -En el menú de las diapositivas (abajo a la izquierda) tienes una [**opción para descargarlas en pdf**]{.hl-yellow} en `Tools` (consejo: no lo hagas hasta el final del curso ya que irán modificándose) - -  - -* [**Material**]{.hl-yellow}: [**scripts de cada tema**](https://github.com/dadosdelaplace/docencia-R-supervisado-2324/tree/main/material) y materiales extras - -* [**Resúmenes de paquetes**]{.hl-yellow}: [**chuletas de los paquetes**](https://github.com/dadosdelaplace/docencia-R-supervisado-2324/tree/main/fichas%20paquetes) en formato .pdf - ---- - - -## Requisitos - -Para el curso los únicos requisitos serán: - -1. [**Conexión a internet**]{.hl-yellow} (para la descarga de algunos datos y paquetes). - -2. [**Instalar R y RStudio**]{.hl-yellow}: la descarga la haremos (gratuitamente) desde y - -3. Se darán por asumido conocimientos aprendidos de [**R base, tidyverse y ggplot**]{.hl-yellow} - -4. Se darán por asumido conocimientos aprendidos de [**Quarto, diapositivas en Quarto y Github**]{.hl-yellow}. Para las entregas [**SOLO SE VALORARÁ**]{.hl-purple} la salida html correspondiente. - -5. [**Recomendable**]{.hl-yellow}: saber usar la calculadora en modo estadístico. - - ---- - -## Planificación {#planificacion} - -::: column-screen-inset-right -::: {style="font-size:20px"} -| CLASE | SEMANA | FECHAS | TOPIC | EJ. | WORKBOOK | ENTREGA | -|:------:|:--------:|:--------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:| -| [1](#clase-1) | S1 | 23 ene | Repaso descriptiva | [💻](#tu-turno-1-1) [💻](#tu-turno-1-2) [💻](#tu-turno-1-3) | [🐣](#caso-practico-1-1) [🐣](#caso-practico-1-2) [🐣](#caso-practico-1-3) [🐣](#caso-practico-1-4) | | -| [2](#clase-2) | S2 | 28 ene | Medidas de asociación | ... | | | -| [3](#clase-3) | S2 | 30 ene | Análisis de la varianza | ... | | | -| [4](#clase-4) | S3 | 4 feb | Análisis de la varianza | ... | | | -| [5](#clase-5) | S3 | 6 feb | Entrega I | ... | | [🎯 10%](#clase-5) | -::: -::: - - - -# Clase 1: repaso {#clase-1} - -[**Objetivo de la predicción lineal. Concepto de linealidad. Repaso de estadística descriptiva (23 de enero de 2025)**]{style="color:#444442;"} - - - ---- - -## ¿Qué es predecir? - -En esta asignatura vamos a tratar principalmente lo que se conoce en el aprendizaje estadístico como [**predicción (continua)**]{.hl-yellow} - -. . . - -Dada una [**variable objetivo (variable dependiente)**]{.hl-yellow}, y con la información aportada por un conjunto de [**variables predictoras (covariables)**]{.hl-yellow}, el objetivo será obtener una estimación/predicción lo «mejor posible» haciendo uso de un - -  - - -[**modelo supervisado**]{.hl-yellow} de [**predicción**]{.hl-purple} [**lineal**]{.hl-green} (conocido como regresión lineal) - - ---- - - -## Ciencia de Datos - - -La [**ciencia de datos**]{.hl-yellow} es precisamente la rama que integra las matemáticas, la estadística, la probabilidad, el Machine Learning e incluso el Big Data - -![](img/stats-ml.jpg) - ---- - - -## ¿Modelo supervisado? - - -[**modelo supervisado**]{.hl-yellow} de predicción lineal - -  - -En esta asignatura veremos el modelo más simple de lo que se conoce como [**aprendizaje estadístico (Machine Learning)**]{.hl-yellow}, en concreto del conocido como [**aprendizaje supervisado**]{.hl-yellow} - -![](img/ml.jpg) - - ---- - - -## Aprendizaje ¿supervisado? - -![](img/unsupervised-learning.jpg) - ---- - -## Aprendizaje ¿supervisado? - -En el campo del Machine Learning hay principalmente dos tipos de modelos: - -:::: columns -::: {.column width="50%"} - -* [**Aprendizaje supervisado**]{.hl-yellow}: tendremos dos tipos de variables, la [**variable dependiente (output/target)**]{.hl-yellow} que se quiere predecir/clasificar, normalmente denotada como $Y$, y las [**variables independientes (inputs) o explicativas o predictoras**]{.hl-yellow}, que contienen la información disponible. Ejemplos: regresión, knn, árboles, etc. - - -::: - -::: {.column width="50%"} - -![](img/supervised.jpg) -::: -:::: - ---- - -## Aprendizaje ¿supervisado? - -En el campo del Machine Learning hay principalmente dos tipos de modelos: - -:::: columns -::: {.column width="50%"} - -* [**Aprendizaje no supervisado**]{.hl-yellow}: no existe la distinción entre target y variables explicativas ya que [**no tenemos etiquetados los datos**]{.hl-yellow}, no sabemos a priori la respuesta correcta. El aprendizaje no supervisado [**buscará patrones**]{.hl-yellow} basados en similitudes/diferencias. Ejemplos: PCA, clustering, redes neuronales, etc. - -::: - - -::: {.column width="50%"} - -![](img/unsupervised.jpg) - -::: -:::: - ---- - -## Modelo predictivo - -Dentro del marco de un [**modelo de predicción supervisada**]{.hl-yellow} tendrá siempre la siguiente forma: - -$$Y = f(\mathbf{X}) + \varepsilon = f\left(X_1, \ldots, X_p \right) + \varepsilon, \quad E \left[Y | \boldsymbol{X} = x \right] =f\left(X_1, \ldots, X_p \right) $$ - -* $\mathbf{X}$ serán los [**datos**]{.hl-yellow} - -* $f(\cdot)$ será nuestro [**modelo**]{.hl-yellow}, es decir, el [**valor esperado de $Y$**]{.hl-yellow} (con la información que tenemos $\mathbf{X}$). - -* $\mathbf{X} = \left(X_1, \ldots, X_p \right)$ serán nuestras [**predictoras o variables independientes**]{.hl-yellow} - -* $\varepsilon$ será el [**error o ruido**]{.hl-yellow}, una [**variable aleatoria de media 0**]{.hl-yellow} $E \left[\varepsilon | \boldsymbol{X} = x \right] = 0$ (el error debería ser reducido a **algo aleatorio (irreducible)**, aunque en estadística SIEMPRE nos vamos a equivocar). - - - ---- - - -## Clasificación vs predicción - -modelo supervisado de [**predicción**]{.hl-purple} lineal - -  - -La **regresión lineal** se enmarca dentro del [**predicción**]{.hl-purple} supervisada - -* [**Predicción**]{.hl-purple}: la [**variable objetivo es una variable cuantitativa continua**]{.hl-purple} (por ejemplo, precio, glucosa, peso, etc). - -* [**Clasificación**]{.hl-purple}: la [**variable objetivo es una variable cualitativa**]{.hl-purple} (por ejemplo, especie de flor, ausencia/presencia de enfermedad, si/no, etc) o **cuantitativa discreta** (por ejemplo, número de accidentes). La etiqueta tomará un valor dentro del conjunto de modalidades permitidas, pudiendo ser **binaria** (si/no) o **multiclase** (A, B, C, D). - -  - -📚 Ver «The elements of Statistical Learning» (Hastie et al., 2008) - ---- - -## ¿Qué es predecir? - - -modelo de [**predicción**]{.hl-purple} lineal - - -  - -Es importante que - de momento - distingamos dos conceptos: - -* [**Estimación**]{.hl-purple}: el modelo aprende de unos datos e intenta estimar dichos valores que ha usado. -* [**Predicción**]{.hl-purple}: el modelo aprende de unos datos e intenta estimar valores que el **modelo no conoce**. - -Más adelante los llamaremos «predicción en train» y «predicción en test» - ---- - -## ¿Qué es la linealidad? - - -modelo de predicción [**lineal**]{.hl-green} - -  - -En matemáticas decimos que una función $f(x)$ es [**lineal**]{.hl-green} cuando se cumple: - -* [**Propiedad aditiva**]{.hl-green}: $f(x + y) = f(x) + f(y)$ - -* [**Propiedad homogénea**]{.hl-green}: $f(k*x) = k*f(x)$ (donde $k$ es una constante en $\mathbb{R}$). - -Ambas se pueden resumir en $f(a*x + b*y) = a*f(x) + b*f(y)$ - -. . . - -En estadística llamamos [**modelo de predicción lineal**]{.hl-yellow} a un modelo que usa la información de covariables $X_1, X_2, \ldots, X_p$, de manera que su información siempre [**se relacionen entre sí con sumas y restas**]{.hl-yellow}. - -- [**Ejemplos lineales**]{.hl-green}: $y = 2*x_1 - 3$ o $y = 4 - \frac{x_1}{2} + 3*x_2$ - -- [**Ejemplos no lineales**]{.hl-red}: $y = 2*\frac{1}{x_1}$ o $y = 4 - x_{1}^{2} - x_2$ o $y = ln(x_1) + cos(x_2)$ - - - ---- - - -## Repaso descriptiva - - -La estadística descriptiva es una rama de la estadística que se dedica a [**recolectar, organizar, presentar y analizar un conjunto de datos**]{.hl-yellow} para describir las características y comportamientos de dicho conjunto. - -  - -Además de para conocer y entender los datos es la fase en la que [**detectaremos errores e incongruencias**]{.hl-yellow}, teniendo muchas veces que hacer una [**depuración de datos**]{.hl-yellow} - ---- - -## Recolección - -La podemos hacer a través de **encuestas, experimentos, observaciones, registros**, etc. Lo más importante en esta etapa es que los datos sean representativos del fenómeno o población que se estudia. La rama de la estadística que se dedica a estudiar esta parte del análisis se conoce como [**muestreo**]{.hl-yellow}, y es fundamental para evitar sesgos en la muestra. - - -![](https://sketchplanations.com/_next/image?url=https%3A%2F%2Fimages.prismic.io%2Fsketchplanations%2Ff2fdb7cb-f126-4897-ad78-4fd11c743172_SP%2B723%2B-%2BSampling%2Bbias.png%3Fauto%3Dcompress%2Cformat&w=828&q=75) - ---- - -## Conceptos básicos - -En estadística es fundamental entender los conceptos de [**población, muestra y variable**]{.hl-yellow}, ya que son la base para cualquier análisis estadístico. - -. . . - -- [**Población**]{.hl-yellow} - -La población es el **conjunto completo de elementos o individuos** sobre los cuales se desea obtener información. En la mayoría de casos el acceso a la **totalidad de la población es inviable** por motivos económicos, legales o éticos, así que en la mayoría de situaciones las conclusiones deberemos sacarlas haciendo uso de una **muestra**. - -. . . - -**Ejemplo**: la diferencia entre censo y encuesta es que el primero recopila datos de todos los individuos de una población, mientras que el segundo trata de estimarlos o inferirlos a partir de una muestra representativa de la misma. - ---- - -## Conceptos básicos - -[**Muestra**]{.hl-yellow}: subconjunto de la población que se selecciona para su análisis con el fin de hacer inferencias o generalizaciones sobre la población completa. La muestra debe ser **representativa de la población**. - -- **Muestreo aleatorio simple**: cada miembro de la población tiene la misma probabilidad de ser seleccionado. - -- **Muestreo estratificado**: la población se divide en subgrupos (estratos) y se toma una muestra de cada uno. - -- **Muestreo (no aleatorio) sistemático**: se selecciona cada n-ésimo miembro de la población. - -- **Muestreo (no aleatorio) por cuotas**: se seleccionan aquellos individuos que cumplan ciertas condiciones. - -- **Muestreo por conveniencia**: se elige a los miembros que son más fáciles de acceder, aunque este método puede introducir sesgos. - ---- - -## Sesgos en el muestreo - -![](img/sampling-bias.jpg) - -. . . - -[**Sesgo de selección**]{.hl-yellow}: aparece cuando no se tiene en cuenta la forma en la que se han recogido los datos. - ---- - - -## Sesgos en el muestreo - - -![](img/dewey.jpg) - -El ejemplo más famoso es el caso [**«Dewey defeats Truman» (Dewer derrota a Truman)**]{.hl-yellow}, el titular con el que abrió el Chicago Tribune en 1948, el mismo día en el que Truman ganó al repúblicano Dewer en las elecciones de 1948: sin esperar a los resultados, se basaron en una encuesta telefónica (sin contar con el sesgo que, en aquella época, solo la clase alta tenía teléfono). - ---- - - - -## Sesgos en el muestreo - -![](img/superviviente.jpg) - -¿Dónde reforzarías los aviones? - ---- - -## Sesgos en el muestreo - -![](img/superviviente.jpg) - - - -El [**sesgo del superviviente**]{.hl-yellow} (un tipo de sesgo de selección) aparece cuando se toma una muestra de un fenómeno ignorando si los individuos elegidos tienen las mismas opciones respecto al mismo. - - ---- - - -## Conceptos básicos - -[**Variable**]{.hl-yellow}: **cualquier característica o atributo** que puede tomar diferentes valores entre los individuos de la población o muestra. Las variables pueden ser de varios tipos según su naturaleza: - -- [**Cualitativas (o categóricas)**]{.hl-purple}: describen cualidades o categorías. Ejemplos: - - - Nominales: no tienen un orden intrínseco (e.g., género, estado civil, religión, etc). - - Ordinales: tienen un orden intrínseco (e.g., niveles de satisfacción, grado académico, sano-leve-grave, tramo etario, tramo de ingresos, etc). - ---- - -## Conceptos básicos - -[**Variable**]{.hl-yellow}: **cualquier característica o atributo** que puede tomar diferentes valores entre los individuos de la población o muestra. Las variables pueden ser de varios tipos según su naturaleza: - -- [**Cuantitativas**]{.hl-purple}: describen cantidades y pueden ser medidas numéricamente. Ejemplos: - - - Discretas finitas: toman valores finitos (e.g., número de hijos, número de visitas al médico, escala de dolor). - - Discretas infinitas: toman valores infinitos (o que se podrían considerar como tal) pero podemos enumerarlas y sabemos siempre el siguiente elemento (e.g., número de pelos de nuestra cabellera, número de personas que pueden entrar en una tienda en un periodo dado). - - Continuas: pueden tomar cualquier valor dentro de un rango (e.g., altura, peso, tiempo de espera). - ---- - -## Conceptos básicos - -[**Modalidades**]{.hl-yellow}: uno de los **posibles valores** que toma una **variable dentro de una muestra**. El **conjunto de modalidades posibles** que podría haber tomado (en tu población) se suele conocer también como soporte. Algunos ejemplos en función del tipo de variables son: - -- **Cualitativa nominal (color de ojos)**: negro, azul y marrón (3 modalidades en esa muestra de un espectro de colores más amplio que podríamos tener como soporte). - -- **Cualitativa ordinal (estado del paciente)**: sano, leve y grave (3 modalidades en esa muestra de un conjunto de opciones - por ejemplo, sano, leve, grave, UCI, fallecido - que podríamos tener). - - ---- - -## Repaso: continua vs discreta - -![](img/vitro-fuego-discretas.jpg) - - - ---- - -## Repaso: medidas de centralización - -* [**Media**]{.hl-yellow}: dada una muestra $\boldsymbol{x} =\left(x_1, \ldots, x_n \right)$, la media muestral $\overline{x}$ se define como la **suma de todos los valores dividida por el tamaño muestral** - -$$\overline{x} = \frac{1}{n} \sum_{i=1}^{n} x_i$$ - -. . . - -[**Geométricamente**]{.hl-purple}: es el **valor «más cercano» de todos los datos a la vez** (minimiza las distancias al cuadrado) - ---- - -## Media muestral - - -[**VENTAJAS**]{.hl-green} - -* Fácil de calcular y entender -* Fácil y eficiente de programar -* Siempre existe (para cuantitativas) - -. . . - -[**DESVENTAJAS**]{.hl-red} - -* No es un valor de los datos (la media de {1, 2, 3, 4} es 2.5) -* **Poco robusta** (valores atípicos le afectan mucho) -* Solo se puede definir para variables cuantitativas - - ---- - -## Repaso: medidas de centralización - -* [**Mediana**]{.hl-yellow}: dada una muestra $\boldsymbol{x} =\left(x_1, \ldots, x_n \right)$, la mediana muestral se define como el **valor que es mayor o igual que al menos el 50%**, y menor igual que al menos el 50% de los datos - -$$Me_{x} = \arg \min_{x_i} \left\lbrace F_i > 0.5 \right\rbrace, \quad Me_x = e_{i-1} + \frac{0.5 - F_{i-1}}{F_i - F_{i-1} }a_i$$ - -La mediana es el [**valor de en medio**]{.hl-purple} si ordenamos los datos (y si se pueden ordenar...) - ---- - -## Mediana muestral - - -[**VENTAJAS**]{.hl-green} - -* Suele ser un valor de la muestra -* Un poco más robusta que la media - - -. . . - -[**DESVENTAJAS**]{.hl-red} - -* Muy ineficiente (requiere un algoritmo de ordenación) -* Solo definida para cuantitativas o cualitativas ordinales - ---- - - -## Repaso: medidas de centralización - -* [**Moda**]{.hl-yellow}: dada una muestra $\boldsymbol{x} =\left(x_1, \ldots, x_n \right)$, la moda muestral se define como el **valor o valores más repetidos** (en caso de que existan). - -$$Mo_x = \arg \max_{x_i} f_i, \quad Mo_x = e_{i-1} + \frac{d_i - d_{i-1}}{\left(d_i - d_{i-1} \right) + \left(d_i - d_{i+1} \right)}a_i$$ - - -. . . - -[**Gráficamente**]{.hl-purple}: representa el «pico» de un diagrama de barras o un histograma - ---- - -## Moda muestral - - -[**VENTAJAS**]{.hl-green} - -* Es un valor de la muestra -* Muy robusta -* **Se puede calcular para cualquier** cuanti o cuali - - - -. . . - -[**DESVENTAJAS**]{.hl-red} - -* No siempre existe (amodal) y pueden existir varias (bimodal, trimodal, etc) -* Poco usada en inferencia - - ---- - -## Repaso: medidas de centralización - -![](img/ine-salarios-oculto.jpg) - -**¿Cuál es la mediana, la media y la moda?** - ---- - -## Repaso: medidas de centralización - -![](img/ine-salarios.jpg) - ---- - -## Repaso: medidas de dispersión - -![](img/iker-jimenez.jpg) - -¿Qué tiene que ver la imagen con la dispersión? - - ---- - -## Repaso: medidas de dispersión - -![](img/extremos.jpg) - -El cambio climático no solo es porque aumente la [**temperatura media (centralización)**]{.hl-yellow} sino por la aparición cada vez más frecuente de fenómenos extremos - - -Aumento de la [**variabilidad**]{.hl-yellow} → aumento de la [**DISPERSIÓN**]{.hl-yellow} - ---- - -## Repaso: medidas de dispersión - -[**¿Cómo medir lo que se alejan los datos de la media?**]{.hl-yellow} - -. . . - -![](img/primera-idea-varianza.jpg) - -Una **primera idea** podría ser [**medir la distancia de cada dato al centro**]{.hl-yellow}, es decir, restar cada dato de la media, y después realizar su promedio. - ---- - -![](img/wait-for-it.jpg) - ---- - -## Repaso: medidas de dispersión - -Imagina que tenemos la siguiente muestra $X = \left\lbrace -5, -3, -1, 0, 1, 3, 5 \right\rbrace$. - -**¿Cuánto vale la media?** - -. . . - -La media vale 0 y la distancia a ella es...la propia muestra $\left\lbrace -5, -3, -1, 0, 1, 3, 5 \right\rbrace$. **¿Cuál es el promedio de dichas distancias?** - -. . . - -Pues...de nuevo vale 0. - -. . . - -Si la dispersión es 0...[**¿no hay dispersión?**]{.hl-red} ¿No debería de dar 0 solo cuando los datos sean constantes? - ---- - -## Repaso: medidas de dispersión - -Para **evitar que se cancelen** los signos lo que haremos será calcular el [**promedio PERO de las distancias al cuadrado**]{.hl-yellow}, la conocida como [**varianza**]{.hl-yellow} - -$$s_{x}^{2} = \frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)^2 = \overline{x^2} - \overline{x}^2 $$ - -. . . - - -::: callout-warning -# Cuidado - -Tomar el valor absoluto (para evitar que se cancelen los signos) suele ser una mala idea en matemáticas (no es derivable como función). -::: - ---- - -## Repaso: medidas de dispersión - - -[**Problema**]{.hl-red}: si los datos están en metros, la varianza estará en...metros cuadrados - - -. . . - -:::: columns -::: {.column width="50%"} - -¿Tiene sentido medir la dispersión de nuestra estatura en baldosas? - -::: - -::: {.column width="50%"} - -![](img/albert-rivera.jpg) -::: - -:::: - ---- - -## Repaso: medidas de dispersión - -Para tener una [**medida de dispersión en las unidades de los datos**]{.hl-yellow} calcularemos la [**desviación típica**]{.hl-yellow}, como la raíz cuadrada de la varianza - -$$s_{x} = \sqrt{s_{x}^{2}} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)^2} = \sqrt{\overline{x^2} - \overline{x}^2}$$ - - ---- - -## Repaso: medidas de dispersión - -Todavía tenemos un pequeño problema. - -Imagina que queremos **comparar la dispersión de dos conjuntos** de datos, estaturas de personas y diámetros de núcleos de células. Y Supongamos que las medias son 170 cm y 5 micrómetros, y la desviación típica de 1 cm y 1.5 micrómetros. - -[**¿Qué conjunto de datos es más disperso?**]{.hl-yellow} - -. . . - -Para tener una **medida de dispersión adimensional** definiremos el [**coeficiente de variación**]{.hl-yellow} - -$$CV_{x} = \frac{s_{x}}{\left| \overline{x} \right|}$$ - ---- - -## Repaso: medidas de localización - -Las [**medidas de posición o localización**]{.hl-yellow} nos localizan los datos, siendo valores que **nos dividen un conjunto ordenado** en subconjuntos del mismo tamaño (ejemplo: mediana es percentil 50). - -* **Percentil**: valores $P_{\alpha}$ del conjunto ordenado que dejan por debajo, al menos, el $\alpha$% de datos y $\alpha$% por encima. -* **Decil**: valores $D_{\alpha}$ que dividen los datos en 10 partes iguales. - -* **Cuartil**: valores $C_{\alpha}$ o $q_{\alpha}$ que dividen los datos en 4 partes iguales. - ---- - -## Repaso: covarianza y correlación - -[**¿Qué es en realidad la varianza?**]{.hl-yellow} - -. . . - -La [**varianza es el promedio de las desviaciones al cuadrado**]{.hl-yellow} (respecto a la media), apareciendo dos veces dicha desviación: puede ser entendida como una [**medida que cuantifica la relación de una variable CONSIGO MISMA**]{.hl-yellow} - -. . . - -¿Y si quiésemos medir la [**RELACIÓN/ASOCIACIÓN de una variable X respecto a otra variable Y (en lugar de consigo misma)**]{.hl-yellow}? - - ---- - -## Repaso: covarianza y correlación - -$$s_{x}^{2} = \frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)^2 = \overline{x^2} - \overline{x}^2 \quad \text{(varianza)}$$ - - -La idea detrás de la [**covarianza**]{.hl-yellow} es justo esa: sustituir una de esas desviaciones de la X por la desviación de la Y. - - -$$s_{xy} = \frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)\left(y_i - \overline{y} \right) = \overline{x*y} - \overline{x}*\overline{y}$$ - ---- - -## Repaso: covarianza y correlación - -Es importante entender algunas [**propiedades de la covarianza**]{.hl-yellow} - -. . . - -* [**Signo**]{.hl-purple}: la covarianza puede ser tanto positiva como negativa como 0: al eliminar el cuadrado de la varianza, ya no es necesario que sea positiva - - -. . . - -* [**¿Qué cuantifica?**]{.hl-purple} La covarianza mide la [**asociación LINEAL**]{.hl-red} (en torno a una recta) entre dos variables [**CONTINUAS**]{.hl-red} - -. . . - -* [**¿Qué dice su signo?**]{.hl-purple} El signo de la covarianza nos indicará la [**dirección de la dependencia lineal**]{.hl-yellow}: si es positiva, la relación será creciente (cuando X crece, Y crece); si es negativa, la relación será decreciente (cuando X crece, Y decrece) - - ---- - -## Repaso: covarianza y correlación - -Al igual que pasaba con la varianza, la [**covarianza depende de las unidades y magnitudes**]{.hl-yellow} de los datos, así que lo que haremos será [**estandarizar la covarianza**]{.hl-yellow}. Definiremos la [**coeficiente correlación lineal (de Pearson)**]{.hl-yellow} como la covarianza dividida entre el producto de las desviaciones típicas (adimensional) - - -$$r_{xy} = \rho_{xy} = \frac{s_{xy}}{s_x s_y}$$ - -. . . - -Tiene el [**mismo signo que la covarianza**]{.hl-yellow} (el denominador es siempre positivo) y sus [**valores siempre están entre -1 y 1**]{.hl-yellow} - -* más cerca de -1 o 1 → relación lineal más fuerte -* más cerca de 0 → ausencia de relación **LINEAL** - ---- - -## Repaso: covarianza y correlación - -![](img/correlaciones.jpg) - - ---- - -## 🐣 Caso práctico I: anscombe {#caso-practico-1-1} - -En el paquete `{datasets}` se encuentra el dataset conocido como [**cuarteto de Anscombe**]{.hl-yellow}, un dataset que cuenta con 4 conjuntos de datos. - -```{r} -anscombe_tb <- as_tibble(datasets::anscombe) -anscombe_tb -``` - -  - -Intenta responder a las preguntas planteadas en el [**workbook**](https://javieralvarezliebana.quarto.pub/aprendizaje-supervisado/#caso-pr%C3%A1ctico-i-anscombe) - - -# Clase 2: asociación entre variables {#clase-2} - -[**Causalidad vs dependencia. Asociación continua vs continua, cualitativa vs cualitativa (28 de enero de 2025)**]{style="color:#444442;"} - - ---- - - -## Estadística bivariante - -Todo lo que hemos hecho con una variable podemos hacerlo también de manera [**bivariante**]{.hl-yellow} considerando dos variables. - -. . . - -Uno de los principales objetivos de la estadística bivariante es [**determinar si existe relación o dependencia entre dos variables**]{.hl-yellow}, es decir, cuando un cambio en el valor de una de ellas se asocia a un cambio en el de la otra (una [**dependencia estadística no implica un efecto causal**]{.hl-red}). - -. . . - -La situación contraria, es decir, la ausencia de relación, se denomina [**independencia**]{.hl-yellow}. - - ---- - -## Tipos de análisis posibles - -Una primera aproximación al estudio de dos variables será [**clasificar el tipo de análisis**]{.hl-yellow} - -- [**Cuali vs cuali**]{.hl-yellow}: - - **Resumen**: tablas de contigencia (frecuencia cruzada). - - **Inferencia**: prueba $\chi^2$ de independencia o test de Fisher. - - **Gráficos**: barras apiladas, gofres, gráficos de «flujo». - ---- - -## Tipos de análisis posibles - -Una primera aproximación al estudio de dos variables será [**clasificar el tipo de análisis**]{.hl-yellow} - - -- [**Cuani vs cuanti**]{.hl-yellow}: - - **Resumen**: covarianza y correlación. - - **Inferencia**: test de correlación (relación lineal) y test de Kolmogorov-Smirnov (¿ambas distribuciones son iguales?). Test de igualdad de medias o igualdad de varianzas - - **Gráficos**: diagrama de dispersión, correlogramas, heatmaps. - ---- - -## Tipos de análisis posibles - -Una primera aproximación al estudio de dos variables será [**clasificar el tipo de análisis**]{.hl-yellow} - - -- [**Cuanti vs cuali**]{.hl-yellow}: - - **Resumen**: medidas de centralización/dispersión/posición de la cuanti desagregado por los grupos de la cuali. - - **Inferencia**: ANOVA (una vía, dos vías, ...). Test de igualdad de medias o igualdad de varianzas (desagregada por grupos) - - **Gráficos**: boxplots, gráficos de violín (desagregados por grupos) - - ---- - -## Repaso: inferencia - -¿Pero que era eso de la [**inferencia estadística**]{.hl-yellow}? Es un conjunto de métodos y técnicas que permite [**inferir conclusiones sobre una población a partir de una muestra**]{.hl-yellow} de datos. - -. . . - -Su propósito es utilizar la información muestral para estimar características de la población, probar hipótesis y realizar predicciones, basado en el cálculo de [**estadísticos**]{.hl-yellow} - -- [**Parámetro**]{.hl-yellow}: medida que describe una característica de la **población** (ejemplo: la media poblacional $\mu$ de la estatura de las mujeres en España). - -- [**Estadístico**]{.hl-yellow}: medida que describe una característica de la **muestra** (ejemplo: la media muestral $\overline{x}$ de un conjunto de 100 mujeres). - ---- - -## Repaso: inferencia - -Haciendo uso de **estadísticos que aproximen una correcta estimación de los parámetros**, los [**contraste de hipótesis**]{.hl-yellow} son procedimientos estadísticos para [**tomar decisiones sobre la validez de una afirmación acerca de una población**]{.hl-yellow} en función de los datos muestrales. - -. . . - -La idea es muy parecido a un **juicio**: con las pruebas (muestra) el jurado (estadístico) deben decidir sobre tu culpabilidad real (población), pudiendo ser declarado **culpable** o **no culpable**. - -. . . - -Este proceso implica formula - -- [**Hipótesis nula** $H_0$]{.hl-yellow}: es una afirmación generalmente representa una **posición de no efecto o no diferencia** (ejemplo: entras siendo no culpable a un juicio) - -- [**Hipótesis alternativa** $H_0$]{.hl-yellow}: es una afirmación que [**se acepta si se rechaza la hipótesis nula**]{.hl-yellow}. Representa un efecto o diferencia (ejemplo: culpable) - ---- - -## Repaso: inferencia - -- [**Hipótesis nula** $H_0$]{.hl-yellow}: es una afirmación generalmente representa una **posición de no efecto o no diferencia** (ejemplo: entras siendo no culpable a un juicio) - -- [**Hipótesis alternativa** $H_1$]{.hl-yellow}: es una afirmación que [**se acepta si se rechaza la hipótesis nula**]{.hl-yellow}. Representa un efecto o diferencia (ejemplo: culpable) - -La idea es similar a la del juicio: solo vamos a [**rechazar $H_0$ (es decir, aceptar $H_1$) si hay MUCHAS EVIDENCIAS en la muestra**]{.hl-yellow} (solo se condena culpable a una persona si hay muchas evidencias que demuestran su culpabilidad, pero el acusado no tiene que demostrar su inocencia). - -. . . - -Llamaremos [**nivel de significancia** $\alpha$]{.hl-yellow} a la probabilidad de [**rechazar la hipótesis nula cuando es verdadera**]{.hl-red} (condenar a un inocente, conocido como **error tipo I**. Normalmente $\alpha = 0.05$ aunque se pueden usar otros valores como 0.01 o 0.10 (a decidir ANTES de realizar el contraste.) - - - ---- - -## p valor - -El conocido como [**p-valor**]{.hl-yellow} es uno de los conceptos más importantes en estadística pero también peor usados. Puedes ver toda una revisión de qué significa y qué no en - -. . . - -Podemos definir el [**p-valor**]{.hl-yellow} como un valor continuo que nos mide la [**compatibilidad de los datos observados con el modelo e hipótesis asumidas**]{.hl-yellow}: 1 indica compatibilidad perfecta y 0 incompatibilidad completa. - -* [**No repesenta la probabilidad de que la hipótesis nula sea cierta**]{.hl-red}: el propio p-valor se calcula ASUMIENDO que lo es. - -* [**No representa la probabilidad de que, por azar, se produzca nada**]{.hl-red} - ---- - -## Asociación cuali vs cuali - -Una vez visto conceptos básicos de inferencia vamos a empezar por un [**análisis bivariante de dos variables cualitativas**]{.hl-yellow} - -. . . - -El primer paso siempre será intentar resumir la información mediante el uso de [**tablas de contigencia**]{.hl-yellow}, en este caso bidimensionales. - -. . . - -¿Cómo lo harías con **tidyverse**? ¿Y con **R base**? - ---- - -## Tablas de contigencia - -Vamos a tomar la base de datos `SatisfaccionPacientes.csv` que captura datos de una encuesta de satisfacción de pacientes en un hospital - -```{r} -library(readr) -datos <- - read_csv(file = "./datos/SatisfaccionPacientes.csv") |> - janitor::clean_names() -datos -``` - ---- - -## Tablas de contigencia - -Para calcular una [**tabla bidimensional de frecuencias**]{.hl-yellow} en tidyverse basta con **indicar dos variables en `count()`** - -```{r} -datos |> - count(genero, estado_civil) -``` - ---- - -## Tablas de contigencia - -Lo habitual es mostrar esta tabla como una [**tabla con m filas y n columnas**]{.hl-yellow}, siendo $m$ el número de modalidades distintas de la primera variable (en este caso $m=2$, femenino y masculino) y $n$ el número de modalidades distintas de la segunda variable (en este caso $n = 4$). - -¿Cómo hacer que la variable `estado_civil` pivote para pasar de estar en vertical a estar «en horizontal»? (echa un repaso a la parte de tidy data) - -. . . - -```{r} -datos |> - count(genero, estado_civil) |> - pivot_wider(names_from = estado_civil, values_from = n) -``` - ---- - -## Tablas de contigencia - - -Esto se puede hacer **mucho más sencillo de nuevo en `R base`** con `table()` - - -```{r} -table(datos$genero, datos$estado_civil) -``` - ---- - -## Tablas de contigencia - - -Fíjate que ahora podemos [**normalizar las frecuencias de 3 formas**]{.hl-yellow}: respecto al total de los datos, por filas (`margin = 1`) o por columnas (`margin = 2`). - -```{r} -prop.table(table(datos$genero, datos$estado_civil)) -prop.table(table(datos$genero, datos$estado_civil), margin = 1) -prop.table(table(datos$genero, datos$estado_civil), margin = 2) - -``` - ---- - -## Tablas de contigencia - -Haciendo uso de las tablas anteriores intenta responder a las siguientes preguntas: - -a) ¿Qué cantidad de pacientes mujeres están solteras? - -b) ¿Qué porcentaje, de entre los pacientes hombres, están viudos? - -c) ¿Qué porcentaje, de entre los que están divorciados, son mujeres? - -d) ¿Qué porcentaje (del total de pacientes) son hombres solteros? - - -```{r} -#| code-fold: true -# a) 22 mujeres -# b) 8.51% -# c) 57.89% -# d) 20% -``` - - ---- - -## Tablas de contigencia - -Puedes incluso visualizar dichas cantidades con `geom_tile()` indicándole que el relleno dependa del conteo `n` - -```{r} -datos |> - count(genero, estado_civil) |> - ggplot() + - geom_tile(aes(x = genero, y = estado_civil, fill = n)) + - theme_minimal() -``` - ---- - -## 💻 Tu turno {#tu-turno-2-1} - -[**Intenta realizar los siguientes ejercicios sin mirar las soluciones**]{style="color:#444442;"} - -::: panel-tabset -### [**Ejercicio 1**]{.hl-yellow} - -Para repasar lo aprendido vamos a poner todo en práctica con el dataset `SatisfaccionPacientes.csv`. - -```{r} -library(readr) -datos <- - read_csv(file = "./datos/SatisfaccionPacientes.csv") |> - janitor::clean_names() -``` - - -📝 Aplica el código que sea necesario para responder a estas preguntas. ¿Cuál es el tamaño muestral? ¿Cuántas variables tenemos? ¿Cuántas modalidades tenemos en la variable `estado_civil` (y cuantas observaciones en cada una)? - -```{r} -#| code-fold: true -#| eval: false -# Tamaño muestral / número de observaciones -n <- nrow(datos) - -# Número de variables -p <- ncol(datos) - -# ¿Qué modalidades tenemos? -datos |> count(estado_civil) -``` - - -### [**Ejercicio 2**]{.hl-yellow} - -📝 Determina el tipo de variable (cuantitativa vs. cualitativa). - -```{r} -#| code-fold: true -#| eval: false -# Variables cuantitativas: tiempo, grado satisfacción, número de visitas -# Variables cualitativas: género, estado civil, estado salud -glimpse(datos) -``` - -### [**Ejercicio 3**]{.hl-yellow} - -📝 Obten tablas de frecuencias (absoluta y relativa) en el caso de las cualitativas NOMINALES. Con ella intenta responder a las preguntas: a) ¿cuántas mujeres hay? b) ¿qué % de individuos están casados? - -```{r} -#| code-fold: true -#| eval: false -# no podemos calcular acumulados ya que genero es nominal -datos |> count(genero) |> - rename(frecuencia_abs = n) |> - mutate(frecuencia_rel = frecuencia_abs/sum(frecuencia_abs)) -# Hay 53 mujeres - -datos |> count(estado_civil) |> - rename(frecuencia_abs = n) |> - mutate(frecuencia_rel = frecuencia_abs/sum(frecuencia_abs)) -# Hay 26% personas casadas -``` - - -### [**Ejercicio 4**]{.hl-yellow} - -📝 Convierte de manera adecuada la variable `genero` y `estado_civil` a cualitativa nominal - -```{r} -#| code-fold: true -datos <- - datos |> - mutate(estado_civil = factor(estado_civil), - genero = factor(genero)) -``` - -### [**Ejercicio 5**]{.hl-yellow} - -📝 Calcula la media, mediana, rango intercuartílico y desviación típica de edad y tiempo de espera. - -```{r} -#| code-fold: true -resumen <- - datos |> - summarise(media_edad = mean(edad), sd_edad = sd(edad), mediana_edad = median(edad), - IQR_edad = quantile(edad, probs = 0.75) - quantile(edad, probs = 0.25), - # tiempo espera - media_tiempo_espera = mean(tiempo_espera), sd_tiempo_espera = sd(tiempo_espera), - mediana_tiempo_espera = median(tiempo_espera), - IQR_tiempo_espera = quantile(tiempo_espera, probs = 0.75) - quantile(tiempo_espera, probs = 0.25)) -``` - -### [**Ejercicio 6**]{.hl-yellow} - -📝 Repite el anterior ejercicio pero obteniendo las métricas desagregadas por sexo. - -```{r} -#| code-fold: true -resumen <- - datos |> - summarise(media_edad = mean(edad), sd_edad = sd(edad), mediana_edad = median(edad), - IQR_edad = quantile(edad, probs = 0.75) - quantile(edad, probs = 0.25), - # tiempo espera - media_tiempo_espera = mean(tiempo_espera), sd_tiempo_espera = sd(tiempo_espera), - mediana_tiempo_espera = median(tiempo_espera), - IQR_tiempo_espera = quantile(tiempo_espera, probs = 0.75) - quantile(tiempo_espera, probs = 0.25), - .by = genero) -``` - -### [**Ejercicio 7**]{.hl-yellow} - -📝 Realiza un gráfico de violín para la variable `tiempo_espera` para cada género - -```{r} -#| code-fold: true -#| eval: false -ggplot(datos) + - geom_violin(aes(x = genero, y = tiempo_espera, fill = genero, color = genero), - alpha = 0.7) + - ggthemes::scale_color_colorblind() + - ggthemes::scale_fill_colorblind() + - theme_minimal() -``` - -::: - ---- - -## 🐣 Caso práctico I: encuesta de satisfacción {#caso-practico-2-1} - -Vamos a seguir poniendo en práctica lo aprendido el dataset `SatisfaccionPacientes.csv` - -  - -Intenta responder a las preguntas planteadas en el [**workbook**](https://javieralvarezliebana.quarto.pub/aprendizaje-supervisado/#caso-pr%C3%A1ctico-i-encuesta-de-satisfacci%C3%B3n) - - ---- - -## Asociación cuali vs cuali - -Esas tablas de frecuencia serán las que usen los [**diferentes contrastes de asociación cuali vs cuali**]{.hl-yellow} para decidir si hay o no dependencia. - -  - -El contraste más conocido es la conocida como [**prueba de $\chi^2$ (chi-cuadrado)**]{.hl-yellow}: dada una tabla de contigencia entre dos cualitativas, el contraste [**compara dicha tabla con la que deberíamos obtener bajo la hipótesis nula de independencia**]{.hl-yellow} - -Vamos a hacerlo con nuestras variables `genero` y `estado_civil` - ---- - -## Prueba chi-cuadrado - -$$H_0:~\text{genero y estado civil son independientes}$$ - -$$H_1:~\text{genero y estado civil son dependientes}$$ - -```{r} -table(datos$genero, datos$estado_civil) -``` - -. . . - -[**Si la hipótesis nula fuese cierta**]{.hl-yellow}, ¿qué esperaríamos? - ---- - -## Prueba chi-cuadrado - -1. Elegimos uno de los factores y calculamos su **proporción en la tabla general** (53% vs 47% en este caso) - -```{r} -prop.table(table(datos$genero)) -``` - -. . . - -2. Calculamos la **tabla de contigencia** de ambas variables obteniendo lo que denotaremos como [**frecuencias observadas $O_{ij}$**]{.hl-yellow} - -```{r} -table(datos$genero, datos$estado_civil) -``` - ---- - -## Prueba chi-cuadrado - - -3. **Si ambas variables fuesen independientes**, en cada columna tendríamos que tener **porcentajes parecidos a cuando lo hacemos sin desagregar** (53% mujeres y 47% hombres). Es decir, del total de casados (26) deberíamos tener $8.48$ mujeres y $7.52$ hombres; del total de divorciados (19) deberíamos tener $10.07$ mujeres y $8.93$ hombres; y así sucesivamente. Estas frecuencias las denotaremos como [**frecuencias esperadas $E_{ij}$**]{.hl-yellow} - -$$E_{ij} = \frac{\text{suma fila i * suma fila j}}{\text{total}}$$ - - ---- - -## Prueba chi-cuadrado - - -4. [**Resumimos lo que se desvía una de otra**]{.hl-yellow} mediante el [**estadístico chi-cuadrado**]{.hl-yellow}: - -$$\begin{eqnarray}\chi^2 &=& \sum_{i,j} \frac{\left(O_{ij} - E_{ij} \right)^2}{E_{ij}} = \frac{(13.78 - 11)^2}{13.78} + \frac{(12.22 - 15)^2}{12.22} \nonumber \\ -&+& \frac{(10.07 - 11)^2}{10.07} + \ldots + \frac{(6.11 - 4)^2}{6.11} = 2.75731\end{eqnarray}$$ - -. . . - - -5. Calculamos [**cómo de extremo es el valor del estadístico si la hipótesis nula fuese cierta**]{.hl-yellow}, proporcionándonos un **p-valor**. - ---- - -## Prueba chi-cuadrado - -Este proceso podemos hacerlo directamente aplicando `chisq.test()`, indicándole las variables (o su tabla de frecuencias) - -```{r} -contraste <- chisq.test(datos$genero, datos$estado_civil) -``` - -* `...$statistic`: tenemos guardado el valor del estadístico - -```{r} -contraste$statistic -``` - -* `...$observed`: tenemos guardada la tabla de frecuencias observada - -```{r} -contraste$observed -``` - ---- - -## Prueba chi-cuadrado - - -* `...$expected`: tenemos guardada la tabla de frecuencias esperada - -```{r} -contraste$expected -``` - -* `...$p.value`: tenemos guardado el p-valor. - -```{r} -contraste$p.value -``` - ---- - -## Prueba chi-cuadrado - - -¿Cómo [**interpretar el contraste**]{.hl-yellow}? - -```{r} -contraste -``` - -Como $p.value = 0.4306 > \alpha = 0.05$, no podemos rechazar la hipótesis nula: [**no hay evidencias suficientes en la muestra para concluir que haya dependencia**]{.hl-yellow}. - ---- - -## Prueba de Fisher - -Otra alternativa es el [**test exacto de Fisher**]{.hl-yellow}, una prueba estadística utilizada para [**determinar si hay una asociación significativa entre dos variables cualitativas**]{.hl-yellow} especialmente útil cuando las frecuencias esperadas son bajas y tenemos dos grupos en cada cualitativa (la tabla de frecuencias es $2 \times 2$). - -  - -Como **curiosidad** dicha prueba nació cuando Fisher trataba de comprobar si una compañera, Muriel Birstol, era capaz de detectar en un té con leche si se había añadido primero el té o la leche en su taza (y del experiemnto del que nació la regla del $\alpha = 5%$). - -. . . - -Para aplicarlo nos basta con usar `fisher.test()`. - -```{r} -fisher.test(datos$genero, datos$estado_civil) -``` - ---- - -## Prueba de Fisher - -Como hemos dicho es especialmente útil cuando tenemos solo 2 modalidades en cada cualitativa ya que nos proporciona [**métricas de asociación**]{.hl-yellow} - -Veamos un ejemplo con la tabla `placebo_medicamento.csv` - -```{r} -datos_placebo <- read_csv(file = "./datos/placebo_medicamento.csv") -datos_placebo -``` - ---- - -## Prueba de Fisher - - -```{r} -fisher.test(datos_placebo$observado, datos_placebo$grupo_tratamiento) -``` - -Si te fijas ahora nos devuelve además un [**contraste de lo que se conoce como odds ratio (OR: razón de probabilidades)**]{.hl-yellow} - -`alternative hypothesis: true odds ratio is not equal to 1` - - ---- - -## Métricas de asociación - -```{r} -table(datos_placebo$observado, datos_placebo$grupo_tratamiento) -``` - -La interpretación de [**Odds ratio (OR)**]{.hl-yellow} es cuantificar la [**asociación entre dos variables respecto a una asociación espúrea**]{.hl-yellow} ¿Cuánto [**mejoran los que tomaron medicamento respecto a una posible mejora basal**]{.hl-yellow} (aleatoria) del placebo? - -* [**Ratio de mejora en tratados**]{.hl-purple}: $13/3 = 4.33333$ -* [**Ratio de mejora en placebo**]{.hl-purple}: $6/11 = 0.54545$ - -$$OR = \frac{13/3}{6/11} = \frac{13*11}{6*3} = 7.94$$ - -Los pacientes sometidos a tratamiento mejoran 7.9 veces más si el placebo mejorase por azar. - ---- - -## Métricas de asociación - -```{r} -table(datos_placebo$observado, datos_placebo$grupo_tratamiento) -``` - -Otra de las métricas habituales es la conocida como [**razón de prevalencias (Risk Ratio, RR)**]{.hl-yellow} que nos proporciona un [**ratio entre la probabilidad de prevalencia**]{.hl-yellow} de un evento en dos grupos. - - -* [**Prevalencia de mejora en tratados**]{.hl-purple}: $13/(3+13) = 0.8125$ -* [**Prevalencia de mejora en placebo**]{.hl-purple}: $6/(11+6) = 0.35294$ - -$$RR = \frac{13/(3+13)}{6/(11+6)} = \frac{13*11}{6*3} = 2.30208$$ -Los pacientes sometidos a tratamiento tienen más del doble de «riesgo» de mejorar que los pacientes con placebo. - ---- - -## Métricas de asociación - -Ambas métricas podemos estimarlas también con el paquete `{epitools}` - -```{r} -library(epitools) -OR <- oddsratio(datos_placebo$observado, datos_placebo$grupo_tratamiento) -OR$measure -``` - -* Si $OR = 1$ no hay asociación entre las variables. -* Si $OR > 1$ hay una asociación positiva, es decir, la exposición está asociada con un mayor riesgo. -* Si $OR < 1$ hay una asociación negativa, es decir, la exposición está asociada con un menor riesgo. - - ---- - -## Métricas de asociación - - -```{r} -RR <- riskratio(datos_placebo$observado, datos_placebo$grupo_tratamiento) -RR$measure -``` - - -* Si $RR = 1$ no hay diferencias en el riesgo entre los grupos. -* Si $RR > 1$ el grupo expuesto (en este caso medicado) tiene mayor riesgo (en este caso de mejorar) -* Si $RR < 1$ el grupo expuesto tiene menor riesgo. - ---- - -## Gráficos de barras - -Volvamos al ejemplo de encuesta de satisfacción: vamos a intentar relacionar las dos variables cualitativas `genero` y `estado_civil` para **complementar el análisis numérico realizado** (amén del `geom_tile()` que hemos hecho para visualizar la tabla de frecuencias) - -. . . - -Sabemos realizar un diagrama de barras de cada una por separado, [**¿cómo incluir la información de ambas con `geom_bar()`**]{.hl-yellow} - -. . . - -Piensa cómo hacerlo recordando que `geom_bar()` solo admite una coordenada `x = ...` o `y = ...`. ¿Cómo incluir la info de otra variable que no sea en `x` o `y`? - ---- - -## Gráficos de barras - -```{r} -#| code-fold: true -ggplot(datos) + - geom_bar(aes(x = estado_civil, fill = genero), alpha = 0.6) + - ggthemes::scale_fill_colorblind() + - labs(x = "Estado civil", y = "Frec. absolutas", - fill = "Género") + - theme_minimal() -``` - ---- - -## Gráficos de barras - -La función `geom_bar()` nos permite jugar un poco con el tipo de barras, que por defecto las muestra `stacked` (apiladas). Dicho ajuste podemos **cambiarlo con el argumento `position`**: si `position = "dodge"` las muestra de [**manera agrupada una detrás de otra**]{.hl-yellow}. - -```{r} -#| code-fold: true -ggplot(datos) + - geom_bar(aes(x = estado_civil, fill = genero), - position = "dodge", alpha = 0.6) + - ggthemes::scale_fill_colorblind() + - labs(x = "Estado civil", y = "Frec. absolutas", - fill = "Género") + - theme_minimal() -``` - ---- - -## Gráficos de barras - -La mejor opción para visualizar si hay asociación es que **cada barra de estado civil representa el total y nos muestre el % de cada sexo** en cada una: si fuesen independientes, el reparto por sexo en cada barra debería ser similar. Lo haremos con `position = "fill"` - -```{r} -#| code-fold: true -ggplot(datos) + - geom_bar(aes(x = estado_civil, fill = genero), - position = "fill", alpha = 0.6) + - ggthemes::scale_fill_colorblind() + - labs(x = "Estado civil", y = "Frec. relativas", - fill = "Género") + - theme_minimal() -``` - - ---- - -## Gráficos de barras - -```{r} -#| code-fold: true -ggplot(datos) + - geom_bar(aes(y = estado_civil, fill = genero), - position = "fill", alpha = 0.6) + - ggthemes::scale_fill_colorblind() + - labs(x = "Estado civil", y = "Frec. relativas", - fill = "Género") + - theme_minimal() -``` - - ---- - -## 💻 Tu turno {#tu-turno-2-2} - -[**Intenta realizar los siguientes ejercicios sin mirar las soluciones**]{style="color:#444442;"} - -::: panel-tabset -### [**Ejercicio 1**]{.hl-yellow} - -📝 Carga el fichero `placebo_medicamento_completo.csv` donde tenemos guardado los niveles de colesterol antes y después de un tratamiento: a 76 personas se les dio un medicamento para bajarlo y a 24 personas placebo. - -```{r} -#| code-fold: true -datos <- read_csv(file = "./datos/placebo_medicamento_completo.csv") -``` - - -### [**Ejercicio 2**]{.hl-yellow} - -📝 Añade una nueva variable dicotómica a los datos que nos guarde `mejora` si el paciente mejoró tras el tratamiento y `no mejora` en caso negativo - -```{r} -#| code-fold: true -datos <- - datos |> - mutate("mejora" = if_else(colesterol_post <= colesterol_pre, "mejora", - "no mejora")) -``` - -### [**Ejercicio 3**]{.hl-yellow} - -📝 Visualiza ambas variables (`mejora` y `tratamiento`) a la vez con un diagrama de barras de manera que podamos observar indicios de una posible independencia o dependencia entre ambas. Hazlo antes a papel y boli si lo necesitas - -```{r} -#| code-fold: true -#| eval: false - -# así pintaríamos en cada barra de tratamiento los mejora o no mejora -ggplot(datos) + - geom_bar(aes(x = tratamiento, fill = mejora), alpha = 0.6) + - ggthemes::scale_fill_colorblind() + - theme_minimal() - -# pero dado que tienes más tratados que del grupo control -# no permite comparar bien así que igualamos las barras -# para que cada barra sea el 100% de su categoría -ggplot(datos) + - geom_bar(aes(x = tratamiento, fill = mejora), alpha = 0.6, - position = "fill") + - ggthemes::scale_fill_colorblind() + - theme_minimal() - -# Parece evidente visualmente que hay una diferencia entre mejora y no mejora -# en cada barra -``` - -### [**Ejercicio 4**]{.hl-yellow} - -📝 Calcula la tabla de frecuencias absoluta y relativa que consideres necesarias para responder a las siguientes preguntas: - -a) ¿Cuántas personas de las tratadas con medicamento no mejoraron? - -b) ¿Qué de personas del total del estudio acabaron mejorando habiendo tomando placebo? - -c) ¿Qué % de personas tomó medicamentos entre los que no mejoraron? - -d) ¿Qué % de personas de los que tomaron medicamento mejoraron? - -```{r} -#| code-fold: true -#| eval: false -table(datos$tratamiento, datos$mejora) -prop.table(table(datos$tratamiento, datos$mejora)) -prop.table(table(datos$tratamiento, datos$mejora), margin = 1) -prop.table(table(datos$tratamiento, datos$mejora), margin = 2) -# 9 personas de las tratadas con medicamento no mejoraron -# 9% del total de personas mejoraron y tomaron placebo -# 37% de los que no mejoraron habían tomado la medicación -# 88.1% de los que tomaron medicamento mejoraron -``` - -### [**Ejercicio 5**]{.hl-yellow} - -📝 Para confirmar y cuantificar las evidencias que ya tenemos, vamos a realizar un contraste de hipótesis. Realiza la prueba de chi-cuadrado e interpreta el resultado con $\alpha = 0.05$. - -```{r} -#| code-fold: true -#| eval: false -chisq.test(datos$tratamiento, datos$mejora) -# Dado que p-value = 1.654e-06 << alpha --> debemos rechazar la hipótesis nula --> -# hay evidencias suficientes para afirmar que hay relación de dependencia -``` - -### [**Ejercicio 6**]{.hl-yellow} - - -> Realiza la prueba de chi-cuadrado y Fisher e incluye los p-valores en una tabla resumen haciendo uso de tidyverse. Exporta a un `.csv` dicha tabla resumen - -```{r} -#| code-fold: true -resumen_pvalores <- - datos |> - summarise("sig_chisq" = chisq.test(datos$tratamiento, datos$mejora)$p.value, - "sig_fisher" = fisher.test(datos$tratamiento, datos$mejora)$p.value) -write_csv(resumen_pvalores, file = "./datos/resumen_pvalores.csv") -``` - -### [**Ejercicio 7**]{.hl-yellow} - -📝 Realiza la prueba de Fisher y mira la salida completa. Interpreta la salida, no solo del contraste sino de los odd ratio. - -```{r} -#| code-fold: true -fisher.test(datos$tratamiento, datos$mejora) - -# OR estimado es de 11.95 --> al ser mayor que 1 implica que -# hay una asociación positiva entre las variables -# hay 12 veces más opciones de que te baje el colesterol si tomas el -# medicamento respecto a una posible mejora aleatoria (porque sí). -``` - -::: - ---- - - -## 🐣 Caso práctico II: bronquitis y tabaco {#caso-practico-2-2} - -Vamos a cargar el archivo de datos `fumadores.csv` donde tenemos datos de 96 pacientes sobre sí o fuman y quienes han desarrollado o no bronquitis. - -```{r} -datos <- read_csv(file = "./datos/fumadores.csv") -datos -``` - -  - -Intenta responder a las preguntas planteadas en el [**workbook**](https://javieralvarezliebana.quarto.pub/aprendizaje-supervisado/#caso-pr%C3%A1ctico-ii-bronquitis-y-tabaco) - - ---- - - -## 🐣 Caso práctico III: salud mental {#caso-practico-2-3} - -Esta la base de datos `datos_salud_mental.csv` tenemos información recopilada de 100 pacientes que acuden a un centro de salud mental. Se quiere realizar un estudio para ver el **impacto que tienen distintas características sobre la ansiedad y depresión** en estos 100 pacientes. Los datos incluyen una variedad de variables relacionadas con la salud mental, así como características demográficas y de estilo de vida. - -```{r} -datos <- - read_csv(file = "./datos/datos_salud_mental.csv") |> - janitor::clean_names() -``` - -  - -Intenta responder a las preguntas planteadas en el [**workbook**](https://javieralvarezliebana.quarto.pub/aprendizaje-supervisado/#caso-pr%C3%A1ctico-iii-salud-mental) - - ---- - -## Asociación cuanti vs cuanti - - -Como decíamos, la idea detrás de la [**covarianza**]{.hl-yellow} es una "varianza" entre dos variales (la varianza es una covarianza de una variable consigo misma), midiendo el **promedio de lo que se desvía cada una respecto a su media** - -$$s_{xy} = \frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)\left(y_i - \overline{y} \right) = \overline{x*y} - \overline{x}*\overline{y}$$ - -. . . - -Para calcularla en `R` basta con usar la función `cov()` - -```{r} -starwars |> - drop_na(mass, height) |> - summarise(cov(mass, height)) -``` - ---- - -## Correlación lineal - -Vamos a practicar una vez más como [**hacerlo a mano con el siguiente ejercicio**]{.hl-yellow}. - ---- - -## Correlación lineal - -En la tabla inferior se han recopilado (del 2013 al 2022) la **temperatura media en el mes de abril en Madrid (variable X, en ºC)** y el **número de días (variable Y) en el que el nivel de ozono superó las 0.20 ppm (partes por millón)** - -* ¿Cuál fue media de días en los que se superó umbral de ozono de 0.20 ppm? -* ¿Cuál fue media de días en los que se superó umbral de ozono en los años que la temperatura media en marzo superó los 17.4ºC? -* ¿Cuál es su covarianza? - -![](img/tabla-ej-covarianza-sin-agrupar.png) - ---- - - -## Correlación lineal - -Repite el ejercicio con pocas líneas de código `R` - -* ¿Cuál fue la media de días en los que se superó el umbral de ozono de 0.20 ppm? -* ¿Cuál fue la media de días en los que se superó el umbral de ozono en los años que la temperatura media en marzo superó los 17.4ºC? -* ¿Cuál es su covarianza? - -![](img/tabla-ej-covarianza-sin-agrupar.png) - - ---- - - -## Correlación lineal -Realiza lo que consideres tanto a mano como en `R` - -* ¿Existe alguna **relación de dependencia entre las variables**? ¿De qué tipo? ¿Cómo de fuerte o débil es dicha relación? ¿En qué dirección es dicha relación? - - -$$s_{xy} = \frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)\left(y_i - \overline{y} \right) = \overline{x*y} - \overline{x}*\overline{y}$$ - -$$r_{xy} = \rho_{xy} = \frac{s_{xy}}{s_x s_y}$$ - ---- - -## Correlación lineal - -No sé si te has fijado qué sucede cuando intentamos [**calcular la covarianza/correlación de varias variables**]{.hl-yellow}, por ejemplo vamos a calcular la (cuasi)covarianza de todas las variables numéricas de starwars. - -. . . - -```{r} -starwars |> - select(where(is.numeric)) |> - drop_na() |> - cov() -``` - -. . . - -Podemos usar la función `cov()` sin más, fuera de un resumen, obteniendo lo que se conoce como [**matriz de (cuasi)covarianzas**]{.hl-yellow} y que tendrá un papel fundamental en estadística ya que contiene la información (= varianza) del dataset. - ---- - -## Matriz de covarianzas - - -```{r} -starwars |> - select(where(is.numeric)) |> - drop_na() |> - cov() -``` - -Además de ser [**simétrica**]{.hl-yellow}...¿qué tenemos en la [**diagonal**]{.hl-yellow}? - -. . . - -La [**matriz de (cuasi)covarianzas**]{.hl-yellow} se denota como $\Sigma$ y sus elementos se define como $\Sigma_{ii} = s_{x_i}^{2}$ para la diagonal y $\Sigma_{ij} = \Sigma_{ji} = s_{x_i x_j}$ fuera de ella. - -. . . - -::: callout-important -## Importante - -Recuerda que los softwares estadísticos nos devuelven siempre la [**cuasi covarianza**]{.hl-purple}, dividido entre $n-1$ y no entre $n$. La cuasivarianza y la cuasicovarianza son los [**mejores estimadores muestrales (insesgados)**]{.hl-yellow} de los respectivos parámetros poblaciones - -::: - ---- - -## Matriz de correlaciones - -De la misma manera con `cor()` podemos [**calcular la matriz de correlaciones**]{.hl-yellow} (en este caso sin el `cuasi` ya que se cancelan denominadores) - -. . . - -```{r} -starwars |> - select(where(is.numeric)) |> - drop_na() |> - cor() -``` - -. . . - -La [**matriz de correlaciones**]{.hl-yellow} se denota como $R$ y sus elementos se define como $r_{ii} = 1$ para la diagonal y $r_{ij} = r_{x_ix_j}$ fuera de ella, y nos proporciona la dependencia lineal entre variables ya de manera **estandarizada**. - ---- - -## Matriz de correlaciones - -[**¿Se te ocurre alguna manera de calcular la matriz de correlaciones a partir de la de covarianzas?**]{.hl-yellow} - - - ---- - -## Correlación vs dependencia - - -Podemos tener [**variables incorreladas**]{.hl-red}, con correlación nula, pero que [**exista dependencia entre ellas**]{.hl-green}: la covarianza/correlación [**SOLO CAPTURA relaciones lineales**]{.hl-yellow}, nada más. - -. . . - -Veamos un ejemplo sencillo con $X = \left\lbrace -1, 0, 1 \right\rbrace$ y $Y = X^2 = \left\lbrace 1, 0, 1 \right\rbrace$. - -* La media de ambas es nula -* La media del producto es la media de $XY = \left\lbrace -1, 0, 1 \right\rbrace$, que es de nuevo nula -* Así la covarianza $\overline{x*y} - \overline{x}*\overline{y}$ es nula a pesar de tener la mayor dependencia posible (dependencia funcional) - ---- - -## Correlación vs dependencia - -![](img/covarianza-no-lineal.png) - -En relaciones no lineales como la de la imagen, la **correlación estará cercana a cero** (ya que no hay relación lineal) pero existe una [**dependencia**]{.hl-yellow}. Diremos que [**dos variables son dependientes entre sí**]{.hl-yellow} cuando existe un **patrón numérico que las relaciona** - -. . . - -* [**Independencia implica incorrelación**]{.hl-green} -* [**Incorrelación NO implica independencia**]{.hl-red} - ---- - -## Correlación vs dependencia - -![](img/escenarios-covarianza.png) - ---- - - -## Test de correlaciones - -¿Pero cómo saber que la correlación observada es suficientemente pequeña para considerarse incorreladas? - -. . . - -Con un [**contraste de correlaciones**]{.hl-yellow} haciendo uso de `cor.test()` - - -```{r} -cor.test(starwars$mass, starwars$height) -``` - - ---- - -## Otras correlaciones - -La [**correlación de Pearson**]{.hl-yellow} asume que las [**variables están distribuidas normalmente**]{.hl-green}, en caso de existir asociación tienen una relación lineal y no tienen valores atípicos. - -. . . - -Por ello existen dos alternativas: [**correlación de Spearman**]{.hl-yellow} y [**correlación de Kendall**]{.hl-yellow} - ---- - -## Correlación de Spearman - -El [**coeficiente de correlación de Spearman**]{hl-yellow} cuantifica de manera no paramétrica la interdependencia entre dos variables aleatorias (tanto continuas como discretas). Cuantifica el [**grado de asociación monótona entre dos variables ordinales o continuas**]{.hl-yellow} - -$$\rho =1-\frac{6\sum D^{2}}{n (n^{2}-1)}$$ - -donde $D$ es la diferencia entre los correspondientes estadísticos de orden de $x - y$. - -```{r} -starwars |> - select(where(is.numeric)) |> - drop_na() |> - cor(method = "spearman") -``` - - ---- - -## Tau de Kendall - - -El [**coeficiente de correlación de rango de Kendall**]{.hl-yellow} ($\tau$ de Kendall) cuantifica la [**asociación ordinal de variables cualitativas**]{.hl-yellow} de manera no paramétrica. - -. . . - -Dados $\left(x_1, y_1\right), \ldots, \left(x_n, y_n\right)$ un conjunto de observaciones, se dice que $\left(x_{i},y_{i}\right)$ y $\left(x_{j},y_{j}\right)$ (con $i < j$) son un [**par concordante**]{.hl-yellow} si el orden de clasificación coincide ($x_i < x_j,~y_i < y_j$ o bien $x_j < x_i,~y_j < y_i$) - -$$\tau =\frac{\text{n pares concordantes} - \text{n pares discordantes}}{n \choose 2}$$ - - ---- - -## 💻 Tu turno {#tu-turno-2-3} - -[**Intenta realizar los siguientes ejercicios sin mirar las soluciones**]{style="color:#444442;"} - -::: panel-tabset -### [**Ejercicio 1**]{.hl-yellow} - -Vamos a tomar de nuevo nuestros datos de satisfacción de pacientes - -```{r} -library(readr) -datos <- - read_csv(file = "./datos/SatisfaccionPacientes.csv") |> - janitor::clean_names() -datos -``` - -📝 Obtén la matriz de correlaciones haciendo uso de `cor()`. Luego haz uso de `correlate()` del paquete `{corrr}` - -```{r} -#| code-fold: true -#| eval: false -datos |> - select(where(is.numeric)) |> - cor() - -datos |> - select(where(is.numeric)) |> - corrr::correlate() -``` - - - -### [**Ejercicio 2**]{.hl-yellow} - -📝 Analiza y argumenta, en función de los resultados anteriores, la asociación entre `edad` y `grado_satisfaccion`, y entre `tiempo_espera` y `grado_satisfaccion` - -```{r} -#| code-fold: true -# Vemos que por ejemplo `edad` no correla con `grado_satisfaccion` ($-0.0339$) pero `tiempo_espera` tiene una correlación negativa ($-0.586$) con `grado_satisfaccion`. -``` - -### [**Ejercicio 3**]{.hl-yellow} - -📝 Con el paquete `{corrplot}` visualiza la matriz de correlaciones - -```{r} -#| code-fold: true -datos |> - select(where(is.numeric)) |> - cor() |> - corrplot::corrplot(method = "square") -``` - -### [**Ejercicio 4**]{.hl-yellow} - -📝 Investiga el paquete `{GGally}` y a función `ggpairs()` para visualizar las correlaciones de todas las variables (salvo `id`) - -```{r} -#| code-fold: true -library(GGally) -ggpairs(datos |> select(-id)) + - theme_minimal() - -# cuali vs cuali: pictogramas (con rectángulos) -# cuanti vs cuanti: scatter plot -# cuanti vs cuali: boxplot desagregados -# variable vs sí misma: densidad -``` - -### [**Ejercicio 5**]{.hl-yellow} - -📝 ¿Cómo saber que la correlación observada entre `edad` y `grado_satisfaccion` ($-0.0339$) es suficientemente pequeña para considerarse incorreladas? ¿Cómo saber si la correlación entre `tiempo_espera` y `grado_satisfaccion` ($-0.586$) es suficientemente grande para considerar que es **significativa**? - - -```{r} -#| code-fold: true -#| eval: false -cor.test(datos$edad, datos$grado_satisfaccion) -cor.test(datos$tiempo_espera, datos$grado_satisfaccion) - -# En uno el p-valor es bastante alto (**no rechazamos la hipótesis nula de incorrelación**) y en otro el p-valor es prácticamente 0 (rechazamos la hipótesis nula -> **hay evidencias de correlación significativa**). -``` - - -::: - - - -# Clase 3: análisis de la varianza {#clase-3} - -[**Asociación cuali vs cuanti: análisis de la varianza (30 de enero de 2025)**]{style="color:#444442;"} - ---- - -## ... - -# Clase 4: análisis de la varianza {#clase-4} - -[**Asociación cuali vs cuanti: análisis de la varianza (4 de febrero de 2025)**]{style="color:#444442;"} - ---- - -## ... - - - - - +--- +title: "Aprendizaje Supervisado I" +subtitle: "Métodos de predicción lineal" +title-slide-attributes: + data-background-image: img/data-science-2.jpeg + data-background-size: cover + data-background-opacity: "0.2" +author: "Grado en Ciencia de Datos Aplicada • curso 2024-2025" +affiliation: Facultad de Estudios Estadísticos (UCM) +lang: es +language: custom_lang.yml +format: + revealjs: + theme: [default, style.scss] + chalkboard: true + multiplex: true + menu: + side: left + width: normal + footer: "[Javier Álvarez Liébana](...) • Grado en Ciencia de Datos Aplicada (UCM) • curso 2024-2025" + slide-number: c/t +execute: + echo: true +--- + +# Empieza lo bueno...empieza la modelización + +[**Vamos a juntar las piezas del puzzle para hacer «magia»**]{style="color:#444442;"} + +```{r} +#| echo: false +#| message: false +#| warning: false +library(tidyverse) +``` + +--- + +## ¡Buenas! + +[**Correo**]{.hl-green}: ****. [**Despacho**]{.hl-green}: 722 (3ª planta). + +::: columns +::: {.column width="30%"} +![](img/me.jpeg) +::: + +::: {.column width="70%"} +::: incremental +- [**Javier Álvarez Liébana**]{.hl-yellow}, de Carabanchel (Bajo). + +- Licenciado en Matemáticas (UCM). [**Doctorado en estadística**]{.hl-yellow} (UGR). + +- Encargado de la [**visualización y análisis de datos covid**]{.hl-yellow} del Principado de Asturias (2021-2022). + +- Miembro de la [**Sociedad Española de Estadística e IO**]{.hl-yellow} y la [**Real Sociedad Matemática Española**]{.hl-yellow}. +::: +::: +::: + +. . . + +Actualmente, [**investigador y docente en la Facultad de Estadística de la UCM**]{.hl-yellow}. Divulgando por [**Twitter**](https://twitter.com/dadosdelaplace) e [**Instagram**](https://instagram.com/javieralvarezliebana) + + +--- + +## Objetivos + +::: columns +::: {.column width="37%"} +![](https://assets-global.website-files.com/6092cb6b4ac959f39728dd26/6188a97fa499b5fbfe410417_target%20(1).png) +::: + +::: {.column width="63%"} +::: incremental +- Empezar a [**relacionar asignaturas**]{.hl-yellow} como matemáticas, inferencia y R. + +- Aprender los fundamentos del [**aprendizaje estadístico**]{.hl-yellow} (ahora llamado Machine Learning o data science) + +- Pasar de los descriptivo a lo predictivo: [**construir nuestros primeros modelos**]{.hl-yellow} + +- Entender en profundidad el contexto de la [**predicción lineal**]{.hl-yellow}. + + +::: +::: +::: + +--- + +## Evaluación + +- [**Asistencia**]{.hl-yellow}. Se [**valorará muy positivamente**]{.hl-purple} la participación. + +. . . + +- [**Evaluación continua**]{.hl-yellow}: 1 **examen teórico a papel** (30%) y **3 entregas R en clase** (10%-25%-35%). + +. . . + +- [**Examen final**]{.hl-yellow}: + - [**Más de 7 de continua**]{.hl-purple} -> podrás decidir **peso del final entre 0% y 100%**. + - [**Entre 6 y 7 de continua**]{.hl-purple} -> decidir **peso del final entre un 30% y un 100%**. + - [**Entre 5 y 6 de continua**]{.hl-purple} ->**peso del final entre un 50% y un 100%**. + - [**Entre 3.5 y 5 de continua**]{.hl-purple} -> **peso del final entre un 70% y un 100%**. + - [**Por debajo de 3.5 de continua**]{.hl-purple} -> **peso del final del 100%**. + +Para que haga [**media el final**]{.hl-red} debes de sacar más de un 3 sobre 10. + +--- + +## Planificación + + +* [**Entrega I (10%)**]{.hl-yellow}: 6 de febrero. + +* [**Entrega II (25%)**]{.hl-yellow}: 15 o 22 de abril. + +* [**Teórico con papel y boli (30%)**]{.hl-yellow}: 8 de mayo. + +* [**Entrega III (35%)**]{.hl-yellow}: 13 de mayo. + + +--- + +## Materiales + +* [**Diapositivas**]{.hl-yellow}: las diapositivas que usaremos en el aula a lo largo del curso, estructuradas por clases, estarán disponibles y actualizadas en **** + +En el menú de las diapositivas (abajo a la izquierda) tienes una [**opción para descargarlas en pdf**]{.hl-yellow} en `Tools` (consejo: no lo hagas hasta el final del curso ya que irán modificándose) + +  + +* [**Material**]{.hl-yellow}: [**scripts de cada tema**](https://github.com/dadosdelaplace/docencia-R-supervisado-2324/tree/main/material) y materiales extras + +* [**Resúmenes de paquetes**]{.hl-yellow}: [**chuletas de los paquetes**](https://github.com/dadosdelaplace/docencia-R-supervisado-2324/tree/main/fichas%20paquetes) en formato .pdf + +--- + + +## Requisitos + +Para el curso los únicos requisitos serán: + +1. [**Conexión a internet**]{.hl-yellow} (para la descarga de algunos datos y paquetes). + +2. [**Instalar R y RStudio**]{.hl-yellow}: la descarga la haremos (gratuitamente) desde y + +3. Se darán por asumido conocimientos aprendidos de [**R base, tidyverse y ggplot**]{.hl-yellow} + +4. Se darán por asumido conocimientos aprendidos de [**Quarto, diapositivas en Quarto y Github**]{.hl-yellow}. Para las entregas [**SOLO SE VALORARÁ**]{.hl-purple} la salida html correspondiente. + +5. [**Recomendable**]{.hl-yellow}: saber usar la calculadora en modo estadístico. + + +--- + +## Planificación {#planificacion} + +::: column-screen-inset-right +::: {style="font-size:20px"} +| CLASE | SEMANA | FECHAS | TOPIC | EJ. | WORKBOOK | ENTREGA | +|:------:|:--------:|:--------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:| +| [1](#clase-1) | S1 | 23 ene | Repaso descriptiva | [💻](#tu-turno-1-1) [💻](#tu-turno-1-2) [💻](#tu-turno-1-3) | [🐣](#caso-practico-1-1) [🐣](#caso-practico-1-2) [🐣](#caso-practico-1-3) [🐣](#caso-practico-1-4) | | +| [2](#clase-2) | S2 | 28 ene | Medidas de asociación | ... | | | +| [3](#clase-3) | S2 | 30 ene | Análisis de la varianza | ... | | | +| [4](#clase-4) | S3 | 4 feb | Análisis de la varianza | ... | | | +| [5](#clase-5) | S3 | 6 feb | Entrega I | ... | | [🎯 10%](#clase-5) | +::: +::: + + + +# Clase 1: repaso {#clase-1} + +[**Objetivo de la predicción lineal. Concepto de linealidad. Repaso de estadística descriptiva (23 de enero de 2025)**]{style="color:#444442;"} + + + +--- + +## ¿Qué es predecir? + +En esta asignatura vamos a tratar principalmente lo que se conoce en el aprendizaje estadístico como [**predicción (continua)**]{.hl-yellow} + +. . . + +Dada una [**variable objetivo (variable dependiente)**]{.hl-yellow}, y con la información aportada por un conjunto de [**variables predictoras (covariables)**]{.hl-yellow}, el objetivo será obtener una estimación/predicción lo «mejor posible» haciendo uso de un + +  + + +[**modelo supervisado**]{.hl-yellow} de [**predicción**]{.hl-purple} [**lineal**]{.hl-green} (conocido como regresión lineal) + + +--- + + +## Ciencia de Datos + + +La [**ciencia de datos**]{.hl-yellow} es precisamente la rama que integra las matemáticas, la estadística, la probabilidad, el Machine Learning e incluso el Big Data + +![](img/stats-ml.jpg) + +--- + + +## ¿Modelo supervisado? + + +[**modelo supervisado**]{.hl-yellow} de predicción lineal + +  + +En esta asignatura veremos el modelo más simple de lo que se conoce como [**aprendizaje estadístico (Machine Learning)**]{.hl-yellow}, en concreto del conocido como [**aprendizaje supervisado**]{.hl-yellow} + +![](img/ml.jpg) + + +--- + + +## Aprendizaje ¿supervisado? + +![](img/unsupervised-learning.jpg) + +--- + +## Aprendizaje ¿supervisado? + +En el campo del Machine Learning hay principalmente dos tipos de modelos: + +:::: columns +::: {.column width="50%"} + +* [**Aprendizaje supervisado**]{.hl-yellow}: tendremos dos tipos de variables, la [**variable dependiente (output/target)**]{.hl-yellow} que se quiere predecir/clasificar, normalmente denotada como $Y$, y las [**variables independientes (inputs) o explicativas o predictoras**]{.hl-yellow}, que contienen la información disponible. Ejemplos: regresión, knn, árboles, etc. + + +::: + +::: {.column width="50%"} + +![](img/supervised.jpg) +::: +:::: + +--- + +## Aprendizaje ¿supervisado? + +En el campo del Machine Learning hay principalmente dos tipos de modelos: + +:::: columns +::: {.column width="50%"} + +* [**Aprendizaje no supervisado**]{.hl-yellow}: no existe la distinción entre target y variables explicativas ya que [**no tenemos etiquetados los datos**]{.hl-yellow}, no sabemos a priori la respuesta correcta. El aprendizaje no supervisado [**buscará patrones**]{.hl-yellow} basados en similitudes/diferencias. Ejemplos: PCA, clustering, redes neuronales, etc. + +::: + + +::: {.column width="50%"} + +![](img/unsupervised.jpg) + +::: +:::: + +--- + +## Modelo predictivo + +Dentro del marco de un [**modelo de predicción supervisada**]{.hl-yellow} tendrá siempre la siguiente forma: + +$$Y = f(\mathbf{X}) + \varepsilon = f\left(X_1, \ldots, X_p \right) + \varepsilon, \quad E \left[Y | \boldsymbol{X} = x \right] =f\left(X_1, \ldots, X_p \right) $$ + +* $\mathbf{X}$ serán los [**datos**]{.hl-yellow} + +* $f(\cdot)$ será nuestro [**modelo**]{.hl-yellow}, es decir, el [**valor esperado de $Y$**]{.hl-yellow} (con la información que tenemos $\mathbf{X}$). + +* $\mathbf{X} = \left(X_1, \ldots, X_p \right)$ serán nuestras [**predictoras o variables independientes**]{.hl-yellow} + +* $\varepsilon$ será el [**error o ruido**]{.hl-yellow}, una [**variable aleatoria de media 0**]{.hl-yellow} $E \left[\varepsilon | \boldsymbol{X} = x \right] = 0$ (el error debería ser reducido a **algo aleatorio (irreducible)**, aunque en estadística SIEMPRE nos vamos a equivocar). + + + +--- + + +## Clasificación vs predicción + +modelo supervisado de [**predicción**]{.hl-purple} lineal + +  + +La **regresión lineal** se enmarca dentro del [**predicción**]{.hl-purple} supervisada + +* [**Predicción**]{.hl-purple}: la [**variable objetivo es una variable cuantitativa continua**]{.hl-purple} (por ejemplo, precio, glucosa, peso, etc). + +* [**Clasificación**]{.hl-purple}: la [**variable objetivo es una variable cualitativa**]{.hl-purple} (por ejemplo, especie de flor, ausencia/presencia de enfermedad, si/no, etc) o **cuantitativa discreta** (por ejemplo, número de accidentes). La etiqueta tomará un valor dentro del conjunto de modalidades permitidas, pudiendo ser **binaria** (si/no) o **multiclase** (A, B, C, D). + +  + +📚 Ver «The elements of Statistical Learning» (Hastie et al., 2008) + +--- + +## ¿Qué es predecir? + + +modelo de [**predicción**]{.hl-purple} lineal + + +  + +Es importante que - de momento - distingamos dos conceptos: + +* [**Estimación**]{.hl-purple}: el modelo aprende de unos datos e intenta estimar dichos valores que ha usado. +* [**Predicción**]{.hl-purple}: el modelo aprende de unos datos e intenta estimar valores que el **modelo no conoce**. + +Más adelante los llamaremos «predicción en train» y «predicción en test» + +--- + +## ¿Qué es la linealidad? + + +modelo de predicción [**lineal**]{.hl-green} + +  + +En matemáticas decimos que una función $f(x)$ es [**lineal**]{.hl-green} cuando se cumple: + +* [**Propiedad aditiva**]{.hl-green}: $f(x + y) = f(x) + f(y)$ + +* [**Propiedad homogénea**]{.hl-green}: $f(k*x) = k*f(x)$ (donde $k$ es una constante en $\mathbb{R}$). + +Ambas se pueden resumir en $f(a*x + b*y) = a*f(x) + b*f(y)$ + +. . . + +En estadística llamamos [**modelo de predicción lineal**]{.hl-yellow} a un modelo que usa la información de covariables $X_1, X_2, \ldots, X_p$, de manera que su información siempre [**se relacionen entre sí con sumas y restas**]{.hl-yellow}. + +- [**Ejemplos lineales**]{.hl-green}: $y = 2*x_1 - 3$ o $y = 4 - \frac{x_1}{2} + 3*x_2$ + +- [**Ejemplos no lineales**]{.hl-red}: $y = 2*\frac{1}{x_1}$ o $y = 4 - x_{1}^{2} - x_2$ o $y = ln(x_1) + cos(x_2)$ + + + +--- + + +## Repaso descriptiva + + +La estadística descriptiva es una rama de la estadística que se dedica a [**recolectar, organizar, presentar y analizar un conjunto de datos**]{.hl-yellow} para describir las características y comportamientos de dicho conjunto. + +  + +Además de para conocer y entender los datos es la fase en la que [**detectaremos errores e incongruencias**]{.hl-yellow}, teniendo muchas veces que hacer una [**depuración de datos**]{.hl-yellow} + +--- + +## Recolección + +La podemos hacer a través de **encuestas, experimentos, observaciones, registros**, etc. Lo más importante en esta etapa es que los datos sean representativos del fenómeno o población que se estudia. La rama de la estadística que se dedica a estudiar esta parte del análisis se conoce como [**muestreo**]{.hl-yellow}, y es fundamental para evitar sesgos en la muestra. + + +![](https://sketchplanations.com/_next/image?url=https%3A%2F%2Fimages.prismic.io%2Fsketchplanations%2Ff2fdb7cb-f126-4897-ad78-4fd11c743172_SP%2B723%2B-%2BSampling%2Bbias.png%3Fauto%3Dcompress%2Cformat&w=828&q=75) + +--- + +## Conceptos básicos + +En estadística es fundamental entender los conceptos de [**población, muestra y variable**]{.hl-yellow}, ya que son la base para cualquier análisis estadístico. + +. . . + +- [**Población**]{.hl-yellow} + +La población es el **conjunto completo de elementos o individuos** sobre los cuales se desea obtener información. En la mayoría de casos el acceso a la **totalidad de la población es inviable** por motivos económicos, legales o éticos, así que en la mayoría de situaciones las conclusiones deberemos sacarlas haciendo uso de una **muestra**. + +. . . + +**Ejemplo**: la diferencia entre censo y encuesta es que el primero recopila datos de todos los individuos de una población, mientras que el segundo trata de estimarlos o inferirlos a partir de una muestra representativa de la misma. + +--- + +## Conceptos básicos + +[**Muestra**]{.hl-yellow}: subconjunto de la población que se selecciona para su análisis con el fin de hacer inferencias o generalizaciones sobre la población completa. La muestra debe ser **representativa de la población**. + +- **Muestreo aleatorio simple**: cada miembro de la población tiene la misma probabilidad de ser seleccionado. + +- **Muestreo estratificado**: la población se divide en subgrupos (estratos) y se toma una muestra de cada uno. + +- **Muestreo (no aleatorio) sistemático**: se selecciona cada n-ésimo miembro de la población. + +- **Muestreo (no aleatorio) por cuotas**: se seleccionan aquellos individuos que cumplan ciertas condiciones. + +- **Muestreo por conveniencia**: se elige a los miembros que son más fáciles de acceder, aunque este método puede introducir sesgos. + +--- + +## Sesgos en el muestreo + +![](img/sampling-bias.jpg) + +. . . + +[**Sesgo de selección**]{.hl-yellow}: aparece cuando no se tiene en cuenta la forma en la que se han recogido los datos. + +--- + + +## Sesgos en el muestreo + + +![](img/dewey.jpg) + +El ejemplo más famoso es el caso [**«Dewey defeats Truman» (Dewer derrota a Truman)**]{.hl-yellow}, el titular con el que abrió el Chicago Tribune en 1948, el mismo día en el que Truman ganó al repúblicano Dewer en las elecciones de 1948: sin esperar a los resultados, se basaron en una encuesta telefónica (sin contar con el sesgo que, en aquella época, solo la clase alta tenía teléfono). + +--- + + + +## Sesgos en el muestreo + +![](img/superviviente.jpg) + +¿Dónde reforzarías los aviones? + +--- + +## Sesgos en el muestreo + +![](img/superviviente.jpg) + + + +El [**sesgo del superviviente**]{.hl-yellow} (un tipo de sesgo de selección) aparece cuando se toma una muestra de un fenómeno ignorando si los individuos elegidos tienen las mismas opciones respecto al mismo. + + +--- + + +## Conceptos básicos + +[**Variable**]{.hl-yellow}: **cualquier característica o atributo** que puede tomar diferentes valores entre los individuos de la población o muestra. Las variables pueden ser de varios tipos según su naturaleza: + +- [**Cualitativas (o categóricas)**]{.hl-purple}: describen cualidades o categorías. Ejemplos: + + - Nominales: no tienen un orden intrínseco (e.g., género, estado civil, religión, etc). + - Ordinales: tienen un orden intrínseco (e.g., niveles de satisfacción, grado académico, sano-leve-grave, tramo etario, tramo de ingresos, etc). + +--- + +## Conceptos básicos + +[**Variable**]{.hl-yellow}: **cualquier característica o atributo** que puede tomar diferentes valores entre los individuos de la población o muestra. Las variables pueden ser de varios tipos según su naturaleza: + +- [**Cuantitativas**]{.hl-purple}: describen cantidades y pueden ser medidas numéricamente. Ejemplos: + + - Discretas finitas: toman valores finitos (e.g., número de hijos, número de visitas al médico, escala de dolor). + - Discretas infinitas: toman valores infinitos (o que se podrían considerar como tal) pero podemos enumerarlas y sabemos siempre el siguiente elemento (e.g., número de pelos de nuestra cabellera, número de personas que pueden entrar en una tienda en un periodo dado). + - Continuas: pueden tomar cualquier valor dentro de un rango (e.g., altura, peso, tiempo de espera). + +--- + +## Conceptos básicos + +[**Modalidades**]{.hl-yellow}: uno de los **posibles valores** que toma una **variable dentro de una muestra**. El **conjunto de modalidades posibles** que podría haber tomado (en tu población) se suele conocer también como soporte. Algunos ejemplos en función del tipo de variables son: + +- **Cualitativa nominal (color de ojos)**: negro, azul y marrón (3 modalidades en esa muestra de un espectro de colores más amplio que podríamos tener como soporte). + +- **Cualitativa ordinal (estado del paciente)**: sano, leve y grave (3 modalidades en esa muestra de un conjunto de opciones - por ejemplo, sano, leve, grave, UCI, fallecido - que podríamos tener). + + +--- + +## Repaso: continua vs discreta + +![](img/vitro-fuego-discretas.jpg) + + + +--- + +## Repaso: medidas de centralización + +* [**Media**]{.hl-yellow}: dada una muestra $\boldsymbol{x} =\left(x_1, \ldots, x_n \right)$, la media muestral $\overline{x}$ se define como la **suma de todos los valores dividida por el tamaño muestral** + +$$\overline{x} = \frac{1}{n} \sum_{i=1}^{n} x_i$$ + +. . . + +[**Geométricamente**]{.hl-purple}: es el **valor «más cercano» de todos los datos a la vez** (minimiza las distancias al cuadrado) + +--- + +## Media muestral + + +[**VENTAJAS**]{.hl-green} + +* Fácil de calcular y entender +* Fácil y eficiente de programar +* Siempre existe (para cuantitativas) + +. . . + +[**DESVENTAJAS**]{.hl-red} + +* No es un valor de los datos (la media de {1, 2, 3, 4} es 2.5) +* **Poco robusta** (valores atípicos le afectan mucho) +* Solo se puede definir para variables cuantitativas + + +--- + +## Repaso: medidas de centralización + +* [**Mediana**]{.hl-yellow}: dada una muestra $\boldsymbol{x} =\left(x_1, \ldots, x_n \right)$, la mediana muestral se define como el **valor que es mayor o igual que al menos el 50%**, y menor igual que al menos el 50% de los datos + +$$Me_{x} = \arg \min_{x_i} \left\lbrace F_i > 0.5 \right\rbrace, \quad Me_x = e_{i-1} + \frac{0.5 - F_{i-1}}{F_i - F_{i-1} }a_i$$ + +La mediana es el [**valor de en medio**]{.hl-purple} si ordenamos los datos (y si se pueden ordenar...) + +--- + +## Mediana muestral + + +[**VENTAJAS**]{.hl-green} + +* Suele ser un valor de la muestra +* Un poco más robusta que la media + + +. . . + +[**DESVENTAJAS**]{.hl-red} + +* Muy ineficiente (requiere un algoritmo de ordenación) +* Solo definida para cuantitativas o cualitativas ordinales + +--- + + +## Repaso: medidas de centralización + +* [**Moda**]{.hl-yellow}: dada una muestra $\boldsymbol{x} =\left(x_1, \ldots, x_n \right)$, la moda muestral se define como el **valor o valores más repetidos** (en caso de que existan). + +$$Mo_x = \arg \max_{x_i} f_i, \quad Mo_x = e_{i-1} + \frac{d_i - d_{i-1}}{\left(d_i - d_{i-1} \right) + \left(d_i - d_{i+1} \right)}a_i$$ + + +. . . + +[**Gráficamente**]{.hl-purple}: representa el «pico» de un diagrama de barras o un histograma + +--- + +## Moda muestral + + +[**VENTAJAS**]{.hl-green} + +* Es un valor de la muestra +* Muy robusta +* **Se puede calcular para cualquier** cuanti o cuali + + + +. . . + +[**DESVENTAJAS**]{.hl-red} + +* No siempre existe (amodal) y pueden existir varias (bimodal, trimodal, etc) +* Poco usada en inferencia + + +--- + + +## Repaso: medidas de centralización + +![](img/ine-salarios-oculto.jpg) + +**¿Cuál es la mediana, la media y la moda?** + +--- + +## Repaso: medidas de centralización + +![](img/ine-salarios.jpg) + +--- + +## Repaso: medidas de dispersión + +![](img/iker-jimenez.jpg) + +¿Qué tiene que ver la imagen con la dispersión? + + +--- + +## Repaso: medidas de dispersión + +![](img/extremos.jpg) + +El cambio climático no solo es porque aumente la [**temperatura media (centralización)**]{.hl-yellow} sino por la aparición cada vez más frecuente de fenómenos extremos + + +Aumento de la [**variabilidad**]{.hl-yellow} → aumento de la [**DISPERSIÓN**]{.hl-yellow} + +--- + +## Repaso: medidas de dispersión + +[**¿Cómo medir lo que se alejan los datos de la media?**]{.hl-yellow} + +. . . + +![](img/primera-idea-varianza.jpg) + +Una **primera idea** podría ser [**medir la distancia de cada dato al centro**]{.hl-yellow}, es decir, restar cada dato de la media, y después realizar su promedio. + +--- + + +## Wait for it + +![](img/wait-for-it.jpg) + +--- + +## Repaso: medidas de dispersión + +Imagina que tenemos la siguiente muestra $X = \left\lbrace -5, -3, -1, 0, 1, 3, 5 \right\rbrace$. + +**¿Cuánto vale la media?** + +. . . + +La media vale 0 y la distancia a ella es...la propia muestra $\left\lbrace -5, -3, -1, 0, 1, 3, 5 \right\rbrace$. **¿Cuál es el promedio de dichas distancias?** + +. . . + +Pues...de nuevo vale 0. + +. . . + +Si la dispersión es 0...[**¿no hay dispersión?**]{.hl-red} ¿No debería de dar 0 solo cuando los datos sean constantes? + +--- + +## Repaso: medidas de dispersión + +Para **evitar que se cancelen** los signos lo que haremos será calcular el [**promedio PERO de las distancias al cuadrado**]{.hl-yellow}, la conocida como [**varianza**]{.hl-yellow} + +$$s_{x}^{2} = \frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)^2 = \overline{x^2} - \overline{x}^2 $$ + +. . . + + +::: callout-warning +# Cuidado + +Tomar el valor absoluto (para evitar que se cancelen los signos) suele ser una mala idea en matemáticas (no es derivable como función). +::: + +--- + +## Repaso: medidas de dispersión + + +[**Problema**]{.hl-red}: si los datos están en metros, la varianza estará en...metros cuadrados + + +. . . + +:::: columns +::: {.column width="50%"} + +¿Tiene sentido medir la dispersión de nuestra estatura en baldosas? + +::: + +::: {.column width="50%"} + +![](img/albert-rivera.jpg) +::: + +:::: + +--- + +## Repaso: medidas de dispersión + +Para tener una [**medida de dispersión en las unidades de los datos**]{.hl-yellow} calcularemos la [**desviación típica**]{.hl-yellow}, como la raíz cuadrada de la varianza + +$$s_{x} = \sqrt{s_{x}^{2}} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)^2} = \sqrt{\overline{x^2} - \overline{x}^2}$$ + + +--- + +## Repaso: medidas de dispersión + +Todavía tenemos un pequeño problema. + +Imagina que queremos **comparar la dispersión de dos conjuntos** de datos, estaturas de personas y diámetros de núcleos de células. Y Supongamos que las medias son 170 cm y 5 micrómetros, y la desviación típica de 1 cm y 1.5 micrómetros. + +[**¿Qué conjunto de datos es más disperso?**]{.hl-yellow} + +. . . + +Para tener una **medida de dispersión adimensional** definiremos el [**coeficiente de variación**]{.hl-yellow} + +$$CV_{x} = \frac{s_{x}}{\left| \overline{x} \right|}$$ + +--- + +## Repaso: medidas de localización + +Las [**medidas de posición o localización**]{.hl-yellow} nos localizan los datos, siendo valores que **nos dividen un conjunto ordenado** en subconjuntos del mismo tamaño (ejemplo: mediana es percentil 50). + +* **Percentil**: valores $P_{\alpha}$ del conjunto ordenado que dejan por debajo, al menos, el $\alpha$% de datos y $\alpha$% por encima. +* **Decil**: valores $D_{\alpha}$ que dividen los datos en 10 partes iguales. + +* **Cuartil**: valores $C_{\alpha}$ o $q_{\alpha}$ que dividen los datos en 4 partes iguales. + +--- + +## Repaso: covarianza y correlación + +[**¿Qué es en realidad la varianza?**]{.hl-yellow} + +. . . + +La [**varianza es el promedio de las desviaciones al cuadrado**]{.hl-yellow} (respecto a la media), apareciendo dos veces dicha desviación: puede ser entendida como una [**medida que cuantifica la relación de una variable CONSIGO MISMA**]{.hl-yellow} + +. . . + +¿Y si quiésemos medir la [**RELACIÓN/ASOCIACIÓN de una variable X respecto a otra variable Y (en lugar de consigo misma)**]{.hl-yellow}? + + +--- + +## Repaso: covarianza y correlación + +$$s_{x}^{2} = \frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)^2 = \overline{x^2} - \overline{x}^2 \quad \text{(varianza)}$$ + + +La idea detrás de la [**covarianza**]{.hl-yellow} es justo esa: sustituir una de esas desviaciones de la X por la desviación de la Y. + + +$$s_{xy} = \frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)\left(y_i - \overline{y} \right) = \overline{x*y} - \overline{x}*\overline{y}$$ + +--- + +## Repaso: covarianza y correlación + +Es importante entender algunas [**propiedades de la covarianza**]{.hl-yellow} + +. . . + +* [**Signo**]{.hl-purple}: la covarianza puede ser tanto positiva como negativa como 0: al eliminar el cuadrado de la varianza, ya no es necesario que sea positiva + + +. . . + +* [**¿Qué cuantifica?**]{.hl-purple} La covarianza mide la [**asociación LINEAL**]{.hl-red} (en torno a una recta) entre dos variables [**CONTINUAS**]{.hl-red} + +. . . + +* [**¿Qué dice su signo?**]{.hl-purple} El signo de la covarianza nos indicará la [**dirección de la dependencia lineal**]{.hl-yellow}: si es positiva, la relación será creciente (cuando X crece, Y crece); si es negativa, la relación será decreciente (cuando X crece, Y decrece) + + +--- + +## Repaso: covarianza y correlación + +Al igual que pasaba con la varianza, la [**covarianza depende de las unidades y magnitudes**]{.hl-yellow} de los datos, así que lo que haremos será [**estandarizar la covarianza**]{.hl-yellow}. Definiremos la [**coeficiente correlación lineal (de Pearson)**]{.hl-yellow} como la covarianza dividida entre el producto de las desviaciones típicas (adimensional) + + +$$r_{xy} = \rho_{xy} = \frac{s_{xy}}{s_x s_y}$$ + +. . . + +Tiene el [**mismo signo que la covarianza**]{.hl-yellow} (el denominador es siempre positivo) y sus [**valores siempre están entre -1 y 1**]{.hl-yellow} + +* más cerca de -1 o 1 → relación lineal más fuerte +* más cerca de 0 → ausencia de relación **LINEAL** + +--- + +## Repaso: covarianza y correlación + +![](img/correlaciones.jpg) + + +--- + +## 🐣 Caso práctico I: anscombe {#caso-practico-1-1} + +En el paquete `{datasets}` se encuentra el dataset conocido como [**cuarteto de Anscombe**]{.hl-yellow}, un dataset que cuenta con 4 conjuntos de datos. + +```{r} +anscombe_tb <- as_tibble(datasets::anscombe) +anscombe_tb +``` + +  + +Intenta responder a las preguntas planteadas en el [**workbook**](https://javieralvarezliebana.quarto.pub/aprendizaje-supervisado/#caso-pr%C3%A1ctico-i-anscombe) + + +# Clase 2: asociación entre variables {#clase-2} + +[**Causalidad vs dependencia. Asociación continua vs continua, cualitativa vs cualitativa (28 de enero de 2025)**]{style="color:#444442;"} + + +--- + + +## Estadística bivariante + +Todo lo que hemos hecho con una variable podemos hacerlo también de manera [**bivariante**]{.hl-yellow} considerando dos variables. + +. . . + +Uno de los principales objetivos de la estadística bivariante es [**determinar si existe relación o dependencia entre dos variables**]{.hl-yellow}, es decir, cuando un cambio en el valor de una de ellas se asocia a un cambio en el de la otra (una [**dependencia estadística no implica un efecto causal**]{.hl-red}). + +. . . + +La situación contraria, es decir, la ausencia de relación, se denomina [**independencia**]{.hl-yellow}. + + +--- + +## Tipos de análisis posibles + +Una primera aproximación al estudio de dos variables será [**clasificar el tipo de análisis**]{.hl-yellow} + +- [**Cuali vs cuali**]{.hl-yellow}: + - **Resumen**: tablas de contigencia (frecuencia cruzada). + - **Inferencia**: prueba $\chi^2$ de independencia o test de Fisher. + - **Gráficos**: barras apiladas, gofres, gráficos de «flujo». + +--- + +## Tipos de análisis posibles + +Una primera aproximación al estudio de dos variables será [**clasificar el tipo de análisis**]{.hl-yellow} + + +- [**Cuani vs cuanti**]{.hl-yellow}: + - **Resumen**: covarianza y correlación. + - **Inferencia**: test de correlación (relación lineal) y test de Kolmogorov-Smirnov (¿ambas distribuciones son iguales?). Test de igualdad de medias o igualdad de varianzas + - **Gráficos**: diagrama de dispersión, correlogramas, heatmaps. + +--- + +## Tipos de análisis posibles + +Una primera aproximación al estudio de dos variables será [**clasificar el tipo de análisis**]{.hl-yellow} + + +- [**Cuanti vs cuali**]{.hl-yellow}: + - **Resumen**: medidas de centralización/dispersión/posición de la cuanti desagregado por los grupos de la cuali. + - **Inferencia**: ANOVA (una vía, dos vías, ...). Test de igualdad de medias o igualdad de varianzas (desagregada por grupos) + - **Gráficos**: boxplots, gráficos de violín (desagregados por grupos) + + +--- + +## Repaso: inferencia + +¿Pero que era eso de la [**inferencia estadística**]{.hl-yellow}? Es un conjunto de métodos y técnicas que permite [**inferir conclusiones sobre una población a partir de una muestra**]{.hl-yellow} de datos. + +. . . + +Su propósito es utilizar la información muestral para estimar características de la población, probar hipótesis y realizar predicciones, basado en el cálculo de [**estadísticos**]{.hl-yellow} + +- [**Parámetro**]{.hl-yellow}: medida que describe una característica de la **población** (ejemplo: la media poblacional $\mu$ de la estatura de las mujeres en España). + +- [**Estadístico**]{.hl-yellow}: medida que describe una característica de la **muestra** (ejemplo: la media muestral $\overline{x}$ de un conjunto de 100 mujeres). + +--- + +## Repaso: inferencia + +Haciendo uso de **estadísticos que aproximen una correcta estimación de los parámetros**, los [**contraste de hipótesis**]{.hl-yellow} son procedimientos estadísticos para [**tomar decisiones sobre la validez de una afirmación acerca de una población**]{.hl-yellow} en función de los datos muestrales. + +. . . + +La idea es muy parecido a un **juicio**: con las pruebas (muestra) el jurado (estadístico) deben decidir sobre tu culpabilidad real (población), pudiendo ser declarado **culpable** o **no culpable**. + +. . . + +Este proceso implica formula + +- [**Hipótesis nula** $H_0$]{.hl-yellow}: es una afirmación generalmente representa una **posición de no efecto o no diferencia** (ejemplo: entras siendo no culpable a un juicio) + +- [**Hipótesis alternativa** $H_0$]{.hl-yellow}: es una afirmación que [**se acepta si se rechaza la hipótesis nula**]{.hl-yellow}. Representa un efecto o diferencia (ejemplo: culpable) + +--- + +## Repaso: inferencia + +- [**Hipótesis nula** $H_0$]{.hl-yellow}: es una afirmación generalmente representa una **posición de no efecto o no diferencia** (ejemplo: entras siendo no culpable a un juicio) + +- [**Hipótesis alternativa** $H_1$]{.hl-yellow}: es una afirmación que [**se acepta si se rechaza la hipótesis nula**]{.hl-yellow}. Representa un efecto o diferencia (ejemplo: culpable) + +La idea es similar a la del juicio: solo vamos a [**rechazar $H_0$ (es decir, aceptar $H_1$) si hay MUCHAS EVIDENCIAS en la muestra**]{.hl-yellow} (solo se condena culpable a una persona si hay muchas evidencias que demuestran su culpabilidad, pero el acusado no tiene que demostrar su inocencia). + +. . . + +Llamaremos [**nivel de significancia** $\alpha$]{.hl-yellow} a la probabilidad de [**rechazar la hipótesis nula cuando es verdadera**]{.hl-red} (condenar a un inocente, conocido como **error tipo I**. Normalmente $\alpha = 0.05$ aunque se pueden usar otros valores como 0.01 o 0.10 (a decidir ANTES de realizar el contraste.) + + + +--- + +## p valor + +El conocido como [**p-valor**]{.hl-yellow} es uno de los conceptos más importantes en estadística pero también peor usados. Puedes ver toda una revisión de qué significa y qué no en + +. . . + +Podemos definir el [**p-valor**]{.hl-yellow} como un valor continuo que nos mide la [**compatibilidad de los datos observados con el modelo e hipótesis asumidas**]{.hl-yellow}: 1 indica compatibilidad perfecta y 0 incompatibilidad completa. + +* [**No repesenta la probabilidad de que la hipótesis nula sea cierta**]{.hl-red}: el propio p-valor se calcula ASUMIENDO que lo es. + +* [**No representa la probabilidad de que, por azar, se produzca nada**]{.hl-red} + +--- + +## Asociación cuali vs cuali + +Una vez visto conceptos básicos de inferencia vamos a empezar por un [**análisis bivariante de dos variables cualitativas**]{.hl-yellow} + +. . . + +El primer paso siempre será intentar resumir la información mediante el uso de [**tablas de contigencia**]{.hl-yellow}, en este caso bidimensionales. + +. . . + +¿Cómo lo harías con **tidyverse**? ¿Y con **R base**? + +--- + +## Tablas de contigencia + +Vamos a tomar la base de datos `SatisfaccionPacientes.csv` que captura datos de una encuesta de satisfacción de pacientes en un hospital + +```{r} +library(readr) +datos <- + read_csv(file = "./datos/SatisfaccionPacientes.csv") |> + janitor::clean_names() +datos +``` + +--- + +## Tablas de contigencia + +Para calcular una [**tabla bidimensional de frecuencias**]{.hl-yellow} en tidyverse basta con **indicar dos variables en `count()`** + +```{r} +datos |> + count(genero, estado_civil) +``` + +--- + +## Tablas de contigencia + +Lo habitual es mostrar esta tabla como una [**tabla con m filas y n columnas**]{.hl-yellow}, siendo $m$ el número de modalidades distintas de la primera variable (en este caso $m=2$, femenino y masculino) y $n$ el número de modalidades distintas de la segunda variable (en este caso $n = 4$). + +¿Cómo hacer que la variable `estado_civil` pivote para pasar de estar en vertical a estar «en horizontal»? (echa un repaso a la parte de tidy data) + +. . . + +```{r} +datos |> + count(genero, estado_civil) |> + pivot_wider(names_from = estado_civil, values_from = n) +``` + +--- + +## Tablas de contigencia + + +Esto se puede hacer **mucho más sencillo de nuevo en `R base`** con `table()` + + +```{r} +table(datos$genero, datos$estado_civil) +``` + +--- + +## Tablas de contigencia + + +Fíjate que ahora podemos [**normalizar las frecuencias de 3 formas**]{.hl-yellow}: respecto al total de los datos, por filas (`margin = 1`) o por columnas (`margin = 2`). + +```{r} +prop.table(table(datos$genero, datos$estado_civil)) +prop.table(table(datos$genero, datos$estado_civil), margin = 1) +prop.table(table(datos$genero, datos$estado_civil), margin = 2) + +``` + +--- + +## Tablas de contigencia + +Haciendo uso de las tablas anteriores intenta responder a las siguientes preguntas: + +a) ¿Qué cantidad de pacientes mujeres están solteras? + +b) ¿Qué porcentaje, de entre los pacientes hombres, están viudos? + +c) ¿Qué porcentaje, de entre los que están divorciados, son mujeres? + +d) ¿Qué porcentaje (del total de pacientes) son hombres solteros? + + +```{r} +#| code-fold: true +# a) 22 mujeres +# b) 8.51% +# c) 57.89% +# d) 20% +``` + + +--- + +## Tablas de contigencia + +Puedes incluso visualizar dichas cantidades con `geom_tile()` indicándole que el relleno dependa del conteo `n` + +```{r} +datos |> + count(genero, estado_civil) |> + ggplot() + + geom_tile(aes(x = genero, y = estado_civil, fill = n)) + + theme_minimal() +``` + +--- + +## 💻 Tu turno {#tu-turno-2-1} + +[**Intenta realizar los siguientes ejercicios sin mirar las soluciones**]{style="color:#444442;"} + +::: panel-tabset +### [**Ejercicio 1**]{.hl-yellow} + +Para repasar lo aprendido vamos a poner todo en práctica con el dataset `SatisfaccionPacientes.csv`. + +```{r} +library(readr) +datos <- + read_csv(file = "./datos/SatisfaccionPacientes.csv") |> + janitor::clean_names() +``` + + +📝 Aplica el código que sea necesario para responder a estas preguntas. ¿Cuál es el tamaño muestral? ¿Cuántas variables tenemos? ¿Cuántas modalidades tenemos en la variable `estado_civil` (y cuantas observaciones en cada una)? + +```{r} +#| code-fold: true +#| eval: false +# Tamaño muestral / número de observaciones +n <- nrow(datos) + +# Número de variables +p <- ncol(datos) + +# ¿Qué modalidades tenemos? +datos |> count(estado_civil) +``` + + +### [**Ejercicio 2**]{.hl-yellow} + +📝 Determina el tipo de variable (cuantitativa vs. cualitativa). + +```{r} +#| code-fold: true +#| eval: false +# Variables cuantitativas: tiempo, grado satisfacción, número de visitas +# Variables cualitativas: género, estado civil, estado salud +glimpse(datos) +``` + +### [**Ejercicio 3**]{.hl-yellow} + +📝 Obten tablas de frecuencias (absoluta y relativa) en el caso de las cualitativas NOMINALES. Con ella intenta responder a las preguntas: a) ¿cuántas mujeres hay? b) ¿qué % de individuos están casados? + +```{r} +#| code-fold: true +#| eval: false +# no podemos calcular acumulados ya que genero es nominal +datos |> count(genero) |> + rename(frecuencia_abs = n) |> + mutate(frecuencia_rel = frecuencia_abs/sum(frecuencia_abs)) +# Hay 53 mujeres + +datos |> count(estado_civil) |> + rename(frecuencia_abs = n) |> + mutate(frecuencia_rel = frecuencia_abs/sum(frecuencia_abs)) +# Hay 26% personas casadas +``` + + +### [**Ejercicio 4**]{.hl-yellow} + +📝 Convierte de manera adecuada la variable `genero` y `estado_civil` a cualitativa nominal + +```{r} +#| code-fold: true +datos <- + datos |> + mutate(estado_civil = factor(estado_civil), + genero = factor(genero)) +``` + +### [**Ejercicio 5**]{.hl-yellow} + +📝 Calcula la media, mediana, rango intercuartílico y desviación típica de edad y tiempo de espera. + +```{r} +#| code-fold: true +resumen <- + datos |> + summarise(media_edad = mean(edad), sd_edad = sd(edad), mediana_edad = median(edad), + IQR_edad = quantile(edad, probs = 0.75) - quantile(edad, probs = 0.25), + # tiempo espera + media_tiempo_espera = mean(tiempo_espera), sd_tiempo_espera = sd(tiempo_espera), + mediana_tiempo_espera = median(tiempo_espera), + IQR_tiempo_espera = quantile(tiempo_espera, probs = 0.75) - quantile(tiempo_espera, probs = 0.25)) +``` + +### [**Ejercicio 6**]{.hl-yellow} + +📝 Repite el anterior ejercicio pero obteniendo las métricas desagregadas por sexo. + +```{r} +#| code-fold: true +resumen <- + datos |> + summarise(media_edad = mean(edad), sd_edad = sd(edad), mediana_edad = median(edad), + IQR_edad = quantile(edad, probs = 0.75) - quantile(edad, probs = 0.25), + # tiempo espera + media_tiempo_espera = mean(tiempo_espera), sd_tiempo_espera = sd(tiempo_espera), + mediana_tiempo_espera = median(tiempo_espera), + IQR_tiempo_espera = quantile(tiempo_espera, probs = 0.75) - quantile(tiempo_espera, probs = 0.25), + .by = genero) +``` + +### [**Ejercicio 7**]{.hl-yellow} + +📝 Realiza un gráfico de violín para la variable `tiempo_espera` para cada género + +```{r} +#| code-fold: true +#| eval: false +ggplot(datos) + + geom_violin(aes(x = genero, y = tiempo_espera, fill = genero, color = genero), + alpha = 0.7) + + ggthemes::scale_color_colorblind() + + ggthemes::scale_fill_colorblind() + + theme_minimal() +``` + +::: + +--- + +## 🐣 Caso práctico I: encuesta de satisfacción {#caso-practico-2-1} + +Vamos a seguir poniendo en práctica lo aprendido el dataset `SatisfaccionPacientes.csv` + +  + +Intenta responder a las preguntas planteadas en el [**workbook**](https://javieralvarezliebana.quarto.pub/aprendizaje-supervisado/#caso-pr%C3%A1ctico-i-encuesta-de-satisfacci%C3%B3n) + + +--- + +## Asociación cuali vs cuali + +Esas tablas de frecuencia serán las que usen los [**diferentes contrastes de asociación cuali vs cuali**]{.hl-yellow} para decidir si hay o no dependencia. + +  + +El contraste más conocido es la conocida como [**prueba de $\chi^2$ (chi-cuadrado)**]{.hl-yellow}: dada una tabla de contigencia entre dos cualitativas, el contraste [**compara dicha tabla con la que deberíamos obtener bajo la hipótesis nula de independencia**]{.hl-yellow} + +Vamos a hacerlo con nuestras variables `genero` y `estado_civil` + +--- + +## Prueba chi-cuadrado + +$$H_0:~\text{genero y estado civil son independientes}$$ + +$$H_1:~\text{genero y estado civil son dependientes}$$ + +```{r} +table(datos$genero, datos$estado_civil) +``` + +. . . + +[**Si la hipótesis nula fuese cierta**]{.hl-yellow}, ¿qué esperaríamos? + +--- + +## Prueba chi-cuadrado + +1. Elegimos uno de los factores y calculamos su **proporción en la tabla general** (53% vs 47% en este caso) + +```{r} +prop.table(table(datos$genero)) +``` + +. . . + +2. Calculamos la **tabla de contigencia** de ambas variables obteniendo lo que denotaremos como [**frecuencias observadas $O_{ij}$**]{.hl-yellow} + +```{r} +table(datos$genero, datos$estado_civil) +``` + +--- + +## Prueba chi-cuadrado + + +3. **Si ambas variables fuesen independientes**, en cada columna tendríamos que tener **porcentajes parecidos a cuando lo hacemos sin desagregar** (53% mujeres y 47% hombres). Es decir, del total de casados (26) deberíamos tener $8.48$ mujeres y $7.52$ hombres; del total de divorciados (19) deberíamos tener $10.07$ mujeres y $8.93$ hombres; y así sucesivamente. Estas frecuencias las denotaremos como [**frecuencias esperadas $E_{ij}$**]{.hl-yellow} + +$$E_{ij} = \frac{\text{suma fila i * suma fila j}}{\text{total}}$$ + + +--- + +## Prueba chi-cuadrado + + +4. [**Resumimos lo que se desvía una de otra**]{.hl-yellow} mediante el [**estadístico chi-cuadrado**]{.hl-yellow}: + +$$\begin{eqnarray}\chi^2 &=& \sum_{i,j} \frac{\left(O_{ij} - E_{ij} \right)^2}{E_{ij}} = \frac{(13.78 - 11)^2}{13.78} + \frac{(12.22 - 15)^2}{12.22} \nonumber \\ +&+& \frac{(10.07 - 11)^2}{10.07} + \ldots + \frac{(6.11 - 4)^2}{6.11} = 2.75731\end{eqnarray}$$ + +. . . + + +5. Calculamos [**cómo de extremo es el valor del estadístico si la hipótesis nula fuese cierta**]{.hl-yellow}, proporcionándonos un **p-valor**. + +--- + +## Prueba chi-cuadrado + +Este proceso podemos hacerlo directamente aplicando `chisq.test()`, indicándole las variables (o su tabla de frecuencias) + +```{r} +contraste <- chisq.test(datos$genero, datos$estado_civil) +``` + +* `...$statistic`: tenemos guardado el valor del estadístico + +```{r} +contraste$statistic +``` + +* `...$observed`: tenemos guardada la tabla de frecuencias observada + +```{r} +contraste$observed +``` + +--- + +## Prueba chi-cuadrado + + +* `...$expected`: tenemos guardada la tabla de frecuencias esperada + +```{r} +contraste$expected +``` + +* `...$p.value`: tenemos guardado el p-valor. + +```{r} +contraste$p.value +``` + +--- + +## Prueba chi-cuadrado + + +¿Cómo [**interpretar el contraste**]{.hl-yellow}? + +```{r} +contraste +``` + +Como $p.value = 0.4306 > \alpha = 0.05$, no podemos rechazar la hipótesis nula: [**no hay evidencias suficientes en la muestra para concluir que haya dependencia**]{.hl-yellow}. + +--- + +## Prueba de Fisher + +Otra alternativa es el [**test exacto de Fisher**]{.hl-yellow}, una prueba estadística utilizada para [**determinar si hay una asociación significativa entre dos variables cualitativas**]{.hl-yellow} especialmente útil cuando las frecuencias esperadas son bajas y tenemos dos grupos en cada cualitativa (la tabla de frecuencias es $2 \times 2$). + +  + +Como **curiosidad** dicha prueba nació cuando Fisher trataba de comprobar si una compañera, Muriel Birstol, era capaz de detectar en un té con leche si se había añadido primero el té o la leche en su taza (y del experiemnto del que nació la regla del $\alpha = 5%$). + +. . . + +Para aplicarlo nos basta con usar `fisher.test()`. + +```{r} +fisher.test(datos$genero, datos$estado_civil) +``` + +--- + +## Prueba de Fisher + +Como hemos dicho es especialmente útil cuando tenemos solo 2 modalidades en cada cualitativa ya que nos proporciona [**métricas de asociación**]{.hl-yellow} + +Veamos un ejemplo con la tabla `placebo_medicamento.csv` + +```{r} +datos_placebo <- read_csv(file = "./datos/placebo_medicamento.csv") +datos_placebo +``` + +--- + +## Prueba de Fisher + + +```{r} +fisher.test(datos_placebo$observado, datos_placebo$grupo_tratamiento) +``` + +Si te fijas ahora nos devuelve además un [**contraste de lo que se conoce como odds ratio (OR: razón de probabilidades)**]{.hl-yellow} + +`alternative hypothesis: true odds ratio is not equal to 1` + + +--- + +## Métricas de asociación + +```{r} +table(datos_placebo$observado, datos_placebo$grupo_tratamiento) +``` + +La interpretación de [**Odds ratio (OR)**]{.hl-yellow} es cuantificar la [**asociación entre dos variables respecto a una asociación espúrea**]{.hl-yellow} ¿Cuánto [**mejoran los que tomaron medicamento respecto a una posible mejora basal**]{.hl-yellow} (aleatoria) del placebo? + +* [**Ratio de mejora en tratados**]{.hl-purple}: $13/3 = 4.33333$ +* [**Ratio de mejora en placebo**]{.hl-purple}: $6/11 = 0.54545$ + +$$OR = \frac{13/3}{6/11} = \frac{13*11}{6*3} = 7.94$$ + +Los pacientes sometidos a tratamiento mejoran 7.9 veces más si el placebo mejorase por azar. + +--- + +## Métricas de asociación + +```{r} +table(datos_placebo$observado, datos_placebo$grupo_tratamiento) +``` + +Otra de las métricas habituales es la conocida como [**razón de prevalencias (Risk Ratio, RR)**]{.hl-yellow} que nos proporciona un [**ratio entre la probabilidad de prevalencia**]{.hl-yellow} de un evento en dos grupos. + + +* [**Prevalencia de mejora en tratados**]{.hl-purple}: $13/(3+13) = 0.8125$ +* [**Prevalencia de mejora en placebo**]{.hl-purple}: $6/(11+6) = 0.35294$ + +$$RR = \frac{13/(3+13)}{6/(11+6)} = \frac{13*11}{6*3} = 2.30208$$ +Los pacientes sometidos a tratamiento tienen más del doble de «riesgo» de mejorar que los pacientes con placebo. + +--- + +## Métricas de asociación + +Ambas métricas podemos estimarlas también con el paquete `{epitools}` + +```{r} +library(epitools) +OR <- oddsratio(datos_placebo$observado, datos_placebo$grupo_tratamiento) +OR$measure +``` + +* Si $OR = 1$ no hay asociación entre las variables. +* Si $OR > 1$ hay una asociación positiva, es decir, la exposición está asociada con un mayor riesgo. +* Si $OR < 1$ hay una asociación negativa, es decir, la exposición está asociada con un menor riesgo. + + +--- + +## Métricas de asociación + + +```{r} +RR <- riskratio(datos_placebo$observado, datos_placebo$grupo_tratamiento) +RR$measure +``` + + +* Si $RR = 1$ no hay diferencias en el riesgo entre los grupos. +* Si $RR > 1$ el grupo expuesto (en este caso medicado) tiene mayor riesgo (en este caso de mejorar) +* Si $RR < 1$ el grupo expuesto tiene menor riesgo. + +--- + +## Gráficos de barras + +Volvamos al ejemplo de encuesta de satisfacción: vamos a intentar relacionar las dos variables cualitativas `genero` y `estado_civil` para **complementar el análisis numérico realizado** (amén del `geom_tile()` que hemos hecho para visualizar la tabla de frecuencias) + +. . . + +Sabemos realizar un diagrama de barras de cada una por separado, [**¿cómo incluir la información de ambas con `geom_bar()`**]{.hl-yellow} + +. . . + +Piensa cómo hacerlo recordando que `geom_bar()` solo admite una coordenada `x = ...` o `y = ...`. ¿Cómo incluir la info de otra variable que no sea en `x` o `y`? + +--- + +## Gráficos de barras + +```{r} +#| code-fold: true +ggplot(datos) + + geom_bar(aes(x = estado_civil, fill = genero), alpha = 0.6) + + ggthemes::scale_fill_colorblind() + + labs(x = "Estado civil", y = "Frec. absolutas", + fill = "Género") + + theme_minimal() +``` + +--- + +## Gráficos de barras + +La función `geom_bar()` nos permite jugar un poco con el tipo de barras, que por defecto las muestra `stacked` (apiladas). Dicho ajuste podemos **cambiarlo con el argumento `position`**: si `position = "dodge"` las muestra de [**manera agrupada una detrás de otra**]{.hl-yellow}. + +```{r} +#| code-fold: true +ggplot(datos) + + geom_bar(aes(x = estado_civil, fill = genero), + position = "dodge", alpha = 0.6) + + ggthemes::scale_fill_colorblind() + + labs(x = "Estado civil", y = "Frec. absolutas", + fill = "Género") + + theme_minimal() +``` + +--- + +## Gráficos de barras + +La mejor opción para visualizar si hay asociación es que **cada barra de estado civil representa el total y nos muestre el % de cada sexo** en cada una: si fuesen independientes, el reparto por sexo en cada barra debería ser similar. Lo haremos con `position = "fill"` + +```{r} +#| code-fold: true +ggplot(datos) + + geom_bar(aes(x = estado_civil, fill = genero), + position = "fill", alpha = 0.6) + + ggthemes::scale_fill_colorblind() + + labs(x = "Estado civil", y = "Frec. relativas", + fill = "Género") + + theme_minimal() +``` + + +--- + +## Gráficos de barras + +```{r} +#| code-fold: true +ggplot(datos) + + geom_bar(aes(y = estado_civil, fill = genero), + position = "fill", alpha = 0.6) + + ggthemes::scale_fill_colorblind() + + labs(x = "Estado civil", y = "Frec. relativas", + fill = "Género") + + theme_minimal() +``` + + +--- + +## 💻 Tu turno {#tu-turno-2-2} + +[**Intenta realizar los siguientes ejercicios sin mirar las soluciones**]{style="color:#444442;"} + +::: panel-tabset +### [**Ejercicio 1**]{.hl-yellow} + +📝 Carga el fichero `placebo_medicamento_completo.csv` donde tenemos guardado los niveles de colesterol antes y después de un tratamiento: a 76 personas se les dio un medicamento para bajarlo y a 24 personas placebo. + +```{r} +#| code-fold: true +datos <- read_csv(file = "./datos/placebo_medicamento_completo.csv") +``` + + +### [**Ejercicio 2**]{.hl-yellow} + +📝 Añade una nueva variable dicotómica a los datos que nos guarde `mejora` si el paciente mejoró tras el tratamiento y `no mejora` en caso negativo + +```{r} +#| code-fold: true +datos <- + datos |> + mutate("mejora" = if_else(colesterol_post <= colesterol_pre, "mejora", + "no mejora")) +``` + +### [**Ejercicio 3**]{.hl-yellow} + +📝 Visualiza ambas variables (`mejora` y `tratamiento`) a la vez con un diagrama de barras de manera que podamos observar indicios de una posible independencia o dependencia entre ambas. Hazlo antes a papel y boli si lo necesitas + +```{r} +#| code-fold: true +#| eval: false + +# así pintaríamos en cada barra de tratamiento los mejora o no mejora +ggplot(datos) + + geom_bar(aes(x = tratamiento, fill = mejora), alpha = 0.6) + + ggthemes::scale_fill_colorblind() + + theme_minimal() + +# pero dado que tienes más tratados que del grupo control +# no permite comparar bien así que igualamos las barras +# para que cada barra sea el 100% de su categoría +ggplot(datos) + + geom_bar(aes(x = tratamiento, fill = mejora), alpha = 0.6, + position = "fill") + + ggthemes::scale_fill_colorblind() + + theme_minimal() + +# Parece evidente visualmente que hay una diferencia entre mejora y no mejora +# en cada barra +``` + +### [**Ejercicio 4**]{.hl-yellow} + +📝 Calcula la tabla de frecuencias absoluta y relativa que consideres necesarias para responder a las siguientes preguntas: + +a) ¿Cuántas personas de las tratadas con medicamento no mejoraron? + +b) ¿Qué de personas del total del estudio acabaron mejorando habiendo tomando placebo? + +c) ¿Qué % de personas tomó medicamentos entre los que no mejoraron? + +d) ¿Qué % de personas de los que tomaron medicamento mejoraron? + +```{r} +#| code-fold: true +#| eval: false +table(datos$tratamiento, datos$mejora) +prop.table(table(datos$tratamiento, datos$mejora)) +prop.table(table(datos$tratamiento, datos$mejora), margin = 1) +prop.table(table(datos$tratamiento, datos$mejora), margin = 2) +# 9 personas de las tratadas con medicamento no mejoraron +# 9% del total de personas mejoraron y tomaron placebo +# 37% de los que no mejoraron habían tomado la medicación +# 88.1% de los que tomaron medicamento mejoraron +``` + +### [**Ejercicio 5**]{.hl-yellow} + +📝 Para confirmar y cuantificar las evidencias que ya tenemos, vamos a realizar un contraste de hipótesis. Realiza la prueba de chi-cuadrado e interpreta el resultado con $\alpha = 0.05$. + +```{r} +#| code-fold: true +#| eval: false +chisq.test(datos$tratamiento, datos$mejora) +# Dado que p-value = 1.654e-06 << alpha --> debemos rechazar la hipótesis nula --> +# hay evidencias suficientes para afirmar que hay relación de dependencia +``` + +### [**Ejercicio 6**]{.hl-yellow} + + +> Realiza la prueba de chi-cuadrado y Fisher e incluye los p-valores en una tabla resumen haciendo uso de tidyverse. Exporta a un `.csv` dicha tabla resumen + +```{r} +#| code-fold: true +resumen_pvalores <- + datos |> + summarise("sig_chisq" = chisq.test(datos$tratamiento, datos$mejora)$p.value, + "sig_fisher" = fisher.test(datos$tratamiento, datos$mejora)$p.value) +write_csv(resumen_pvalores, file = "./datos/resumen_pvalores.csv") +``` + +### [**Ejercicio 7**]{.hl-yellow} + +📝 Realiza la prueba de Fisher y mira la salida completa. Interpreta la salida, no solo del contraste sino de los odd ratio. + +```{r} +#| code-fold: true +fisher.test(datos$tratamiento, datos$mejora) + +# OR estimado es de 11.95 --> al ser mayor que 1 implica que +# hay una asociación positiva entre las variables +# hay 12 veces más opciones de que te baje el colesterol si tomas el +# medicamento respecto a una posible mejora aleatoria (porque sí). +``` + +::: + +--- + + +## 🐣 Caso práctico II: bronquitis y tabaco {#caso-practico-2-2} + +Vamos a cargar el archivo de datos `fumadores.csv` donde tenemos datos de 96 pacientes sobre sí o fuman y quienes han desarrollado o no bronquitis. + +```{r} +datos <- read_csv(file = "./datos/fumadores.csv") +datos +``` + +  + +Intenta responder a las preguntas planteadas en el [**workbook**](https://javieralvarezliebana.quarto.pub/aprendizaje-supervisado/#caso-pr%C3%A1ctico-ii-bronquitis-y-tabaco) + + +--- + + +## 🐣 Caso práctico III: salud mental {#caso-practico-2-3} + +Esta la base de datos `datos_salud_mental.csv` tenemos información recopilada de 100 pacientes que acuden a un centro de salud mental. Se quiere realizar un estudio para ver el **impacto que tienen distintas características sobre la ansiedad y depresión** en estos 100 pacientes. Los datos incluyen una variedad de variables relacionadas con la salud mental, así como características demográficas y de estilo de vida. + +```{r} +datos <- + read_csv(file = "./datos/datos_salud_mental.csv") |> + janitor::clean_names() +``` + +  + +Intenta responder a las preguntas planteadas en el [**workbook**](https://javieralvarezliebana.quarto.pub/aprendizaje-supervisado/#caso-pr%C3%A1ctico-iii-salud-mental) + + +--- + +## Asociación cuanti vs cuanti + + +Como decíamos, la idea detrás de la [**covarianza**]{.hl-yellow} es una "varianza" entre dos variales (la varianza es una covarianza de una variable consigo misma), midiendo el **promedio de lo que se desvía cada una respecto a su media** + +$$s_{xy} = \frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)\left(y_i - \overline{y} \right) = \overline{x*y} - \overline{x}*\overline{y}$$ + +. . . + +Para calcularla en `R` basta con usar la función `cov()` + +```{r} +starwars |> + drop_na(mass, height) |> + summarise(cov(mass, height)) +``` + +--- + +## Correlación lineal + +Vamos a practicar una vez más como [**hacerlo a mano con el siguiente ejercicio**]{.hl-yellow}. + +--- + +## Correlación lineal + +En la tabla inferior se han recopilado (del 2013 al 2022) la **temperatura media en el mes de abril en Madrid (variable X, en ºC)** y el **número de días (variable Y) en el que el nivel de ozono superó las 0.20 ppm (partes por millón)** + +* ¿Cuál fue media de días en los que se superó umbral de ozono de 0.20 ppm? +* ¿Cuál fue media de días en los que se superó umbral de ozono en los años que la temperatura media en marzo superó los 17.4ºC? +* ¿Cuál es su covarianza? + +![](img/tabla-ej-covarianza-sin-agrupar.png) + +--- + + +## Correlación lineal + +Repite el ejercicio con pocas líneas de código `R` + +* ¿Cuál fue la media de días en los que se superó el umbral de ozono de 0.20 ppm? +* ¿Cuál fue la media de días en los que se superó el umbral de ozono en los años que la temperatura media en marzo superó los 17.4ºC? +* ¿Cuál es su covarianza? + +![](img/tabla-ej-covarianza-sin-agrupar.png) + + +--- + + +## Correlación lineal +Realiza lo que consideres tanto a mano como en `R` + +* ¿Existe alguna **relación de dependencia entre las variables**? ¿De qué tipo? ¿Cómo de fuerte o débil es dicha relación? ¿En qué dirección es dicha relación? + + +$$s_{xy} = \frac{1}{n} \sum_{i=1}^{n} \left(x_i - \overline{x} \right)\left(y_i - \overline{y} \right) = \overline{x*y} - \overline{x}*\overline{y}$$ + +$$r_{xy} = \rho_{xy} = \frac{s_{xy}}{s_x s_y}$$ + +--- + +## Correlación lineal + +No sé si te has fijado qué sucede cuando intentamos [**calcular la covarianza/correlación de varias variables**]{.hl-yellow}, por ejemplo vamos a calcular la (cuasi)covarianza de todas las variables numéricas de starwars. + +. . . + +```{r} +starwars |> + select(where(is.numeric)) |> + drop_na() |> + cov() +``` + +. . . + +Podemos usar la función `cov()` sin más, fuera de un resumen, obteniendo lo que se conoce como [**matriz de (cuasi)covarianzas**]{.hl-yellow} y que tendrá un papel fundamental en estadística ya que contiene la información (= varianza) del dataset. + +--- + +## Matriz de covarianzas + + +```{r} +starwars |> + select(where(is.numeric)) |> + drop_na() |> + cov() +``` + +Además de ser [**simétrica**]{.hl-yellow}...¿qué tenemos en la [**diagonal**]{.hl-yellow}? + +. . . + +La [**matriz de (cuasi)covarianzas**]{.hl-yellow} se denota como $\Sigma$ y sus elementos se define como $\Sigma_{ii} = s_{x_i}^{2}$ para la diagonal y $\Sigma_{ij} = \Sigma_{ji} = s_{x_i x_j}$ fuera de ella. + +. . . + +::: callout-important +## Importante + +Recuerda que los softwares estadísticos nos devuelven siempre la [**cuasi covarianza**]{.hl-purple}, dividido entre $n-1$ y no entre $n$. La cuasivarianza y la cuasicovarianza son los [**mejores estimadores muestrales (insesgados)**]{.hl-yellow} de los respectivos parámetros poblaciones + +::: + +--- + +## Matriz de correlaciones + +De la misma manera con `cor()` podemos [**calcular la matriz de correlaciones**]{.hl-yellow} (en este caso sin el `cuasi` ya que se cancelan denominadores) + +. . . + +```{r} +starwars |> + select(where(is.numeric)) |> + drop_na() |> + cor() +``` + +. . . + +La [**matriz de correlaciones**]{.hl-yellow} se denota como $R$ y sus elementos se define como $r_{ii} = 1$ para la diagonal y $r_{ij} = r_{x_ix_j}$ fuera de ella, y nos proporciona la dependencia lineal entre variables ya de manera **estandarizada**. + +--- + +## Matriz de correlaciones + +[**¿Se te ocurre alguna manera de calcular la matriz de correlaciones a partir de la de covarianzas?**]{.hl-yellow} + + + +--- + +## Correlación vs dependencia + + +Podemos tener [**variables incorreladas**]{.hl-red}, con correlación nula, pero que [**exista dependencia entre ellas**]{.hl-green}: la covarianza/correlación [**SOLO CAPTURA relaciones lineales**]{.hl-yellow}, nada más. + +. . . + +Veamos un ejemplo sencillo con $X = \left\lbrace -1, 0, 1 \right\rbrace$ y $Y = X^2 = \left\lbrace 1, 0, 1 \right\rbrace$. + +* La media de ambas es nula +* La media del producto es la media de $XY = \left\lbrace -1, 0, 1 \right\rbrace$, que es de nuevo nula +* Así la covarianza $\overline{x*y} - \overline{x}*\overline{y}$ es nula a pesar de tener la mayor dependencia posible (dependencia funcional) + +--- + +## Correlación vs dependencia + +![](img/covarianza-no-lineal.png) + +En relaciones no lineales como la de la imagen, la **correlación estará cercana a cero** (ya que no hay relación lineal) pero existe una [**dependencia**]{.hl-yellow}. Diremos que [**dos variables son dependientes entre sí**]{.hl-yellow} cuando existe un **patrón numérico que las relaciona** + +. . . + +* [**Independencia implica incorrelación**]{.hl-green} +* [**Incorrelación NO implica independencia**]{.hl-red} + +--- + +## Correlación vs dependencia + +![](img/escenarios-covarianza.png) + +--- + + +## Test de correlaciones + +¿Pero cómo saber que la correlación observada es suficientemente pequeña para considerarse incorreladas? + +. . . + +Con un [**contraste de correlaciones**]{.hl-yellow} haciendo uso de `cor.test()` + + +```{r} +cor.test(starwars$mass, starwars$height) +``` + + +--- + +## Correlación de rango + +La [**correlación (lineal) de Pearson**]{.hl-yellow} asume que las [**variables están distribuidas normalmente**]{.hl-green}, en caso de existir asociación tienen una relación lineal y no tienen valores atípicos. + +. . . + + +Esto significa que [**ANTES de aplicar un test de correlación**]{.hl-yellow} deberíamos de **comprobar que ambas están distribuidas normalmente** + +--- + +## Contraste de normalidad + +1. Antes de nada debemos de eliminar los pares con datos ausentres + +```{r} +starwars_sin_NA <- starwars |> drop_na(mass, height) +``` + +. . . + +2. Tras ello podemos chequearlo de manera visual + +:::: columns +::: {.column width="50%"} + +```{r} +ggplot(starwars) + + geom_density(aes(x = height)) + + theme_minimal() +``` + +::: + +::: {.column width="50%"} + +```{r} +ggplot(starwars) + + geom_density(aes(x = mass)) + + theme_minimal() +``` + +::: + +:::: + +Obviamente ninguna de las dos aparenta ser Gaussiana (por asimetría y por outliers) + +--- + +## Contraste de normalidad + + +3. También podemos cotejarlo mediante una [**prueba de inferencia no parámetrica contastando la normalidad**]{.hl-yellow} + +```{r} +library(performance) + +# check_normality realiza el Shapiro test +check_normality(starwars_sin_NA$height) +check_normality(starwars_sin_NA$mass) +``` + +. . . + +No deberíamos aplicar (al menos no interpretar) el test de correlaciones + +--- + +## Correlación de rango + + +Por ello existen dos alternativas: [**correlación de Spearman**]{.hl-yellow} y [**correlación de Kendall**]{.hl-yellow} + +  + +Ambos coeficientes cuantifican no una mera **correlación lineal** sino una [**correlación de rango**]{.hl-yellow}: cuantifica la **relación entre los distintos rankings** de dos variables cuando se ordenan. + +--- + + +## Correlación de Spearman + +El [**coeficiente de correlación de Spearman**]{hl-yellow} cuantifica de manera **no paramétrica** la interdependencia entre dos variables aleatorias (tanto continuas como discretas). Cuantifica el [**grado de asociación monótona entre dos variables ordinales o continuas**]{.hl-yellow} + +$$\rho =1-\frac{6\sum D^{2}}{n (n^{2}-1)}$$ + +donde $D$ es la diferencia entre los correspondientes estadísticos de orden de $x - y$. + +```{r} +starwars |> + select(mass, height) |> + drop_na() |> + cor(method = "spearman") +cor.test(starwars$mass, starwars$height, method = "spearman") +``` + +--- + +## Correlación de Spearman + +![](https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Spearman_fig1.svg/600px-Spearman_fig1.svg.png) + +--- + +## Tau de Kendall + + +El [**coeficiente de correlación de Kendall**]{.hl-yellow} ($\tau$ de Kendall) cuantifica la [**asociación ordinal de variables cualitativas ordinales (o cuantis)**]{.hl-yellow} de manera no paramétrica. + +Dados $\left(x_1, y_1\right), \ldots, \left(x_n, y_n\right)$ un conjunto de observaciones, se dice que $\left(x_{i},y_{i}\right)$ y $\left(x_{j},y_{j}\right)$ (con $i < j$) son un [**par concordante**]{.hl-yellow} si el orden de clasificación coincide ($x_i < x_j,~y_i < y_j$ o bien $x_j < x_i,~y_j < y_i$) + +$$\tau =\frac{\text{n pares concordantes} - \text{n pares discordantes}}{n \choose 2}$$ + +El coeficiente de Kendall suele usarse solo cuando $n$ es pequeño y hay muchos empates (ver [usos](https://pubmed.ncbi.nlm.nih.gov/10221741/)) + +```{r} +starwars |> + select(mass, height) |> + drop_na() |> + cor(method = "kendall") +cor.test(starwars$mass, starwars$height, method = "kendall") +``` + +--- + +## Correlación general + +Kendall demostró en 1970 que tanto $\tau$ de Kendall como $\rho$ de Spearman son casos particulares de un [**coeficiente de correlación general**]{.hl-yellow}. + +Si tenemos $n$ observaciones, para cada par $\left(x_i, y_j \right)$ podemos definir $a_{ij}$ como un ranking en la variable $x$ de ambas observaciones ($a_{ij} > 0$ si $x_i > y_j$) y $b_{ij}$ como un ranking en la variable $y$ ($b_{ij} > 0$ si $x_i > y_j$), entonces + +$$\Gamma = \frac{\sum_{i=1}^{n}\sum_{j=1}^{n}a_{ij}b_{ij}}{\sqrt {\left( \sum_{i=1}^{n}\sum_{j=1}^{n}a_{ij}^{2} \right) \left( \sum_{i=1}^{n}\sum_{j=1}^{n}b_{ij}^{2} \right)}}$$ + + + +--- + +## 💻 Tu turno {#tu-turno-2-3} + +[**Intenta realizar los siguientes ejercicios sin mirar las soluciones**]{style="color:#444442;"} + +::: panel-tabset +### [**Ejercicio 1**]{.hl-yellow} + +Vamos a tomar de nuevo nuestros datos de satisfacción de pacientes + +```{r} +library(readr) +datos <- + read_csv(file = "./datos/SatisfaccionPacientes.csv") |> + janitor::clean_names() +datos +``` + +📝 Obtén la matriz de correlaciones de Pearson haciendo uso de `cor()`. Luego haz uso de `correlate()` del paquete `{corrr}` + +```{r} +#| code-fold: true +#| eval: false +datos |> + select(where(is.numeric)) |> + cor() + +datos |> + select(where(is.numeric)) |> + corrr::correlate() +``` + +### [**Ejercicio 2**]{.hl-yellow} + +📝 Obtén la matriz de correlaciones con kendall y spearman + + +```{r} +#| code-fold: true +#| eval: false +datos |> + select(where(is.numeric)) |> + corrr::correlate(method = "spearman") + +datos |> + select(where(is.numeric)) |> + corrr::correlate(method = "kendall") +``` + +### [**Ejercicio 3**]{.hl-yellow} + +📝 Analiza y argumenta, en función de los resultados anteriores, la asociación entre `edad` y `grado_satisfaccion`, y entre `tiempo_espera` y `grado_satisfaccion` + +```{r} +#| code-fold: true +# Vemos que por ejemplo `edad` no correla con `grado_satisfaccion` ($-0.0339$ según Pearson) pero `tiempo_espera` tiene una correlación negativa ($-0.586$ según Pearson) con `grado_satisfaccion`. +``` + +### [**Ejercicio 4**]{.hl-yellow} + +📝 Con el paquete `{corrplot}` visualiza la matriz de correlaciones + +```{r} +#| code-fold: true +datos |> + select(where(is.numeric)) |> + cor() |> + corrplot::corrplot(method = "square") +``` + +### [**Ejercicio 5**]{.hl-yellow} + +📝 Investiga el paquete `{GGally}` y a función `ggpairs()` para visualizar las correlaciones de todas las variables (salvo `id`) + +```{r} +#| code-fold: true +library(GGally) +ggpairs(datos |> select(-id)) + + theme_minimal() + +# cuali vs cuali: pictogramas (con rectángulos) +# cuanti vs cuanti: scatter plot +# cuanti vs cuali: boxplot desagregados +# variable vs sí misma: densidad +``` + +### [**Ejercicio 6**]{.hl-yellow} + +📝 ¿Cómo saber que la correlación observada entre `edad` y `grado_satisfaccion` ($-0.0339$) es suficientemente pequeña para considerarse incorreladas? ¿Cómo saber si la correlación entre `tiempo_espera` y `grado_satisfaccion` ($-0.586$) es suficientemente grande para considerar que es **significativa**? + + +```{r} +#| code-fold: true +#| eval: false +cor.test(datos$edad, datos$grado_satisfaccion) +cor.test(datos$tiempo_espera, datos$grado_satisfaccion) + +# En uno el p-valor es bastante alto (**no rechazamos la hipótesis nula de incorrelación**) y en otro el p-valor es prácticamente 0 (rechazamos la hipótesis nula -> **hay evidencias de correlación significativa**). + +# Ninguna de las 3 es normal así que lo apropiado sería +# contrastar la correlación de rango +performance::check_normality(datos$edad) +performance::check_normality(datos$grado_satisfaccion) +performance::check_normality(datos$tiempo_espera) +``` + + +::: + + + +# Clase 3: análisis de la varianza {#clase-3} + +[**Asociación cuali vs cuanti: análisis de la varianza (30 de enero de 2025)**]{style="color:#444442;"} + +--- + +## Cuanti vs cuali + +Ya conocemos herramientas básicas para analizar la dependencia entre dos variables: + +* [**Cuali vs cuali**]{.hl-yellow}: test de Fisher o prueba de $\chi^2$, tablas de contigencia, diagramas de barras. + +* [**Cuanti vs cuanti**]{.hl-yellow}: correlaciones y test de correlaciones lineal (Pearson), correlaciones y test de correlaciones de rango (Spearman y Kendall), diagramas de dispersión. + +¿Pero qué sucede con la [**asociación cuali vs cuanti**]{.hl-red}? + +--- + +## Cuanti vs cuali + +Imagina que tenemos **$n$ estudiantes** de los que disponemos sus **notas $y_{ij}$** para $j=1,2$ asignaturas alumnos (datos en `notas_1factor_2cat.csv`) + +```{r} +datos <- read_csv(file = "./datos/notas_1factor_2cat.csv") +datos +``` + +  + +¿Existe [**dependencia entre la nota y la variable asignatura (cualitativa)**]{.hl-yellow}? ¿Son [**similares (en promedio) entre las asignaturas**]{.hl-green} o hay una de las dos más sencilla? + + +--- + +## Análisis de la varianza + +Disponemos de + +* [**Variable continua**]{.hl-yellow}: notas de $n$ estudiantes denotadas como $y_{ij}$, con $i=1,\ldots, n$. + +* [**Variable cualitativa o factor**]{.hl-yellow}: dos asignaturas $j=1,2$ + +El objetivo es ver la posible [**asociación entre la variable objetivo y el factor**]{.hl-yellow}, es decir, determinar si existe un **efecto del factor sobre el valor esperado de la variable continua**. + +. . . + +A eso se le conoce como [**análisis de la varianza (ANOVA) o análisis factorial**]{.hl-yellow}, desarrollada por R. Fisher en 1930, y empezaremos por el ejemplo más sencillo de **un factor** (una sola variable cualitativa). + +--- + +## ANOVA: un factor + +¿Cómo [**conceptualizar matemáticamente un modelo que asuma que todas las asignaturas tienen medias similares**]{.hl-yellow}? + +. . . + + +$$y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \quad \text{perturbación aleatoria}$$ + + +donde [**$\mu_j$ representa la media de los estudiantes en la asignatura $j$**]{.hl-yellow} y la [**perturbación $\varepsilon_{ij}$ representa la desviación**]{.hl-purple} de la nota en la asignatura $j$ del estudiante $i$ (representan la variabilidad intrínseca del EXPERIMENTO). + + + +--- + +## ANOVA: un factor + + +Esas perturbaciones vamos a asumir que cumplen una serie de [**hipótesis**]{.hl-green} + + +1. [**Promedio nulo**]{.hl-green}: $E[\varepsilon_{ij}] = 0$ para todo $i,j$ (las desviaciones positivas se compensan con las negativas) + +. . . + +2. [**Varianza constante (homocedasticidad)**]{.hl-green}: $V[\varepsilon_{ij}] = cte = \sigma^2$ para todo $i,j$ (las desviaciones respecto a la media de la asignatura son iguales) + +. . . + +3. [**Normalidad**]{.hl-green}: $\varepsilon_{ij} \sim N$ + +. . . + +4. [**Incorrelación**]{.hl-green}: al ser normales esto automáticamente implica que son [**independientes**]{.hl-green} (conocer la desviación de un estudiante no nos da información sobre otro: el **orden de recolección no afecta a los resultados**) + + +$$y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2) \quad \Rightarrow \quad y_{ij} \sim N(\mu_j, \sigma^2)$$ + +--- + +## ANOVA: un factor + +$$y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2) \quad \Rightarrow \quad y_{ij} \sim N(\mu_j, \sigma^2)$$ + +Los [**esimadores insesgados**]{.hl-yellow} de dichos parámetros poblacionales $\left(\mu_j, \sigma^2 \right)$ son + +* [**Media**]{.hl-yellow}: $\hat{\mu}_{j} = \overline{y}_j$, lo que implica que $\hat{\varepsilon}_{ij} = y_{ij} - \overline{y}_j$. + +* [**Varianza**]{.hl-yellow}: + + +$$\hat{\sigma}^2 = \frac{1}{n} \sum_{j=1}^{c}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \sum_{j=1}^{c} \frac{n_j}{n} s_{j}^2$$ + +es decir, el [**promedio de las desviaciones al cuadrado respecto a la media de cada grupo**]{.hl-purple} (también expresado como media ponderada de cada variabilidad), donde $s_{j}^2 = \frac{1}{n_j}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2$ representa la varianza de cada grupo. + +--- + +## ANOVA: un factor + +$$\hat{\sigma}^2 = \sum_{j=1}^{c} \frac{n_j}{n} s_{j}^2, \quad s_{j}^2 = \frac{1}{n_j}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2$$ + + +Sin embargo, dado que cada $\sum_{i=1}^{n_j} \left(\frac{y_{ij} - \overline{y}_j}{\sigma} \right)^2$ son **independientes entre sí** y siguen una $\chi^{2}_{n_j - 1}$ (la suma de normales al cuadrado es una $\chi^2$), tenemos que + +$$n\frac{\hat{\sigma}^2}{\sigma^2} \sim \chi^{2}_{n-c} \Rightarrow E[n\frac{\hat{\sigma}^2}{\sigma^2}] = n - c \Rightarrow E[\hat{\sigma}^2] = \frac{n-c}{n} \sigma^2$$ + +. . . + +Es decir: $\hat{\sigma}^2$ [**no es un estimador insesgado**]{.hl-red} de $\sigma^2$ así que usaremos la conocida como [**varianza residual (estimada)**]{.hl-yellow} + +$$\hat{s}_{r}^2 = \frac{n}{n-c}\hat{\sigma}^2 = \frac{1}{n-c} \sum_{j=1}^{c}\sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \frac{1}{n-c} \sum_{j=1}^{c}\sum_{i=1}^{n_j} \hat{\varepsilon}_{ij}^2$$ + + + +--- + +## ANOVA: un factor + +$$y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)$$ + +¿Qué contraste deberíamos plantear si queremos [**comprobar si existe un efecto del factor (asignatura) en la variable objetivo (nota)**]{.hl-yellow}? + +. . . + +$$H_0:~\mu_1 = \mu_2 = cte = \mu \quad vs \quad H_1:~\text{no todas son iguales}$$ + +La [**hipótesis nula**]{.hl-green} es que las [**diferencias (variabilidad) entre notas en las distintas asignaturas**]{.hl-yellow} se debe únicamente a una variabilidad aleatoria (y no una diferencia sistemática) + +--- + +## ANOVA: un factor + +Vamos a visualizar las dos distribuciones + +```{r} +#| code-fold: true +ggplot(datos) + + geom_density(aes(x = notas, color = asignatura, fill = asignatura), + alpha = 0.5) + + geom_point(aes(x = notas, y = 0, color = asignatura), + size = 1.7, alpha = 0.85) + + MetBrewer::scale_color_met_d(palette_name = "Renoir") + + MetBrewer::scale_fill_met_d(palette_name = "Renoir") + + theme_minimal() +``` + +Aunque la distribución B está más desplazada a la izquierda, la **nota más alta es de la asignatura B**. ¿Es suficiente para decir que **A distinto de B**? + +--- + + +## ANOVA: un factor + +$$y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)$$ + +$$H_0:~\mu_1 = \mu_2 = cte = \mu \quad vs \quad H_1:~\text{no todas son iguales}$$ + +En el caso de que **solo tengamos dos grupos** la solución es fácil: basta con hacer un [**contraste de medias conocido como prueba t**]{.hl-yellow} + +```{r} +t.test(datos |> filter(asignatura == "A") |> pull(notas), + datos |> filter(asignatura == "B") |> pull(notas)) +``` + +--- + + +## ANOVA: un factor + +¿Pero qué pasaría si [**en lugar de dos asignaturas tuviésemos 6 asignaturas**]{.hl-yellow}? + +. . . + +El [**problema de hacer contrastes 2 a 2**]{.hl-red} es que tendríamos que hacer ${6 \choose 2} = 15$ comparaciones (1-1, 1-2, ..., 1-6, 2-3, ..., 5-6). + +. . . + +No solo son muchos contrastes sino que si cada contraste se hace con una **probabilidad individual de error tipo I** de $\alpha = 0.05$, y suponiendo que todas las comparaciones fuesen independientes, la [**probabilidad de que se verifiquen las 15 igualdades de manera conjunta**]{.hl-yellow} ya no es de 0.95 sino $0.95^{15} = 0.463$: **si hacemos muchos contrastes es muy probable que, por azar, alguno salga significativo** (aunque realmente no haya diferencia en las medias) + + +--- + +## Corrección de Bonferroni + +Un paréntesis: para solventar el [**problema de las comparaciones múltiples**]{.hl-red} un solución habitual (la más sencilla aunque no siempre la mejor) es lo que se conoce como [**corrección de Bonferroni**]{.hl-yellow} + +. . . + +Sea $A_i$ el suceso "se rechaza la igualdad de medias de la comparación i" (que sucede con probabilidad $\alpha$ si la hipótesis nula es cierta). Y sea $B = \bigcup_i A_i$ el suceso de rechazar alguna de las comparaciones (es decir, no todas son iguales). Entonces, si tenemos $c$ comparaciones + +$$P(B) = P(\bigcup_i A_i) \leq \sum_i P(A_i) = c \alpha := \alpha_T$$ + + +. . . + +Si queremos que ese **$\alpha_T$ conjunto sea (al menos) de 0.05**, necesitamos que cada $\alpha$ individual sea $\alpha = \alpha_T/c$ (en nuestro ejemplo $\alpha = 0.00333$, demasiado pequeño si $c$ crece), o lo que es lo mismo $p-valor_{j}^{adj} = c*p-value_j $ + +--- + +## ANOVA: un factor + +No solo existe un [**problema de comparaciones múltiples**]{.hl-red} sino que, además, ¡no lo necesitamos! + +. . . + +Nosotros (de momento) **no queremos saber cuál de las asignaturas tiene más o menos nota** media sino simplemente contestar a la pregunta: ¿todas tienen la misma nota media o [**existe un efecto entre la asignatura y la nota**]{.hl-yellow}? + +. . . + +Y para responder a dicha pregunta [**no necesitamos chequear 2 a 2**]{.hl-red}: basta con que [**encontremos una que no sea igual**]{.hl-yellow} + + + +--- + +## ANOVA: un factor + +$$y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)$$ + +La idea es que [**no necesitamos comparar 2 a 2**]{.hl-red}. Si tenemos $c$ grupos sabemos que [**las medias $\mu_j$ ($j=1,\ldots,c$) nunca van a ser exactamente iguales**]{.hl-yellow} aunque el grupo no afecte, debido a la variabilidad intrínseca del experimento $\varepsilon_{ij}$ + +. . . + +¿Es esa [**variabilidad entre las estimaciones muestrales de las medias**]{.hl-yellow} (varianza ENTRE grupos, debida a estar en un grupo u otro) significativamente superior a la [**variabilidad promedio (intrínseca) de los grupos**]{.hl-purple} (varianza DENTRO de los grupos, no explicada por los grupos sino intrínseca a los datos)? + + + +--- + +## ANOVA: un factor + +Si la [**hipótesis nula fuese cierta**]{.hl-green} (todas las observaciones vienen de la misma población con misma varianza y media), la [**varianza entre grupos (explicada por el grupo) sería la misma que la varianza promedio dentro de los grupos**]{.hl-yellow}: según se alejen las medias de los grupos, la primera se incrementará pero la segunda permanecerá constante. + + +:::: columns +::: {.column width="50%"} + + +![](./img/anova-1.png) + + +::: +::: {.column width="50%"} + +![](./img/anova-2.png) + + +::: +:::: + +--- + +## ANOVA: un factor + +$$y_{ij} = \mu_j + \varepsilon_{ij}, \quad \varepsilon_{ij} \sim N (0, \sigma^2)$$ + +¿Cómo calcular la [**varianza explicada**]{.hl-red} por la variable de grupo (la variabilidad de las medias de cada grupo) y la [**varianza no explicada**]{.hl-purple} por el grupo (el promedio de las varianzas dentro de cada grupo, intrínseca a los datos)? + +. . . + + +La [**variabilidad total (SST o VT)**]{.hl-green} de la variable $y$ se define como + +$$SST = \displaystyle \sum_{l=1}^{n} \left(y_l - \overline{y} \right)^2 = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2, \quad VT = \frac{1}{n} \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2$$ + + +--- + +## ANOVA: un factor + + +$$SST = \displaystyle \sum_{l=1}^{n} \left(y_l - \overline{y} \right)^2 = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2, \quad VT = \frac{1}{n} \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2$$ + +A continuación **añadimos y restamos dentro del paréntesis la misma cantidad** (la media muestral de cada grupo $\overline{y}_j$, estimación insesgada de $\mu_j$) + + +$$\begin{eqnarray}\color{green}{SST} &=& \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y} \right)^2 = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \left( \left(y_{ij} - \overline{y}_j \right) - \left(\overline{y}_j - \overline{y} \right) \right)^2 \nonumber \\ &=& \color{purple}{\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2} + \color{red}{\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(\overline{y}_j - \overline{y} \right)^2} - 2\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right) \left(\overline{y}_j - \overline{y} \right) \nonumber \\ \color{green}{VT} &=& \color{purple}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2} + \color{red}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(\overline{y}_j - \overline{y} \right)^2} - \frac{2}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right) \left(\overline{y}_j - \overline{y} \right) +\end{eqnarray}$$ + + +--- + +## ANOVA: un factor + + +El [**segundo término**]{.hl-red} es en realidad la [**variabilidad (ponderada) de las medias de los grupos**]{.hl-red} (cómo fluctua la media entre los grupos) + + +$$\color{red}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(\overline{y}_j - \overline{y} \right)^2 = \frac{1}{n}\sum_{j=1}^{c} n_j \left(\overline{y}_j - \overline{y} \right)^2 = \sum_{j=1}^{c} \frac{n_j}{n} \left(\overline{y}_j - \overline{y} \right)^2 }$$ + +ya que + +$$\overline{\overline{y}_j} = \frac{1}{c} \sum_{j=1}^{c} \overline{y}_j = \sum_{j=1}^{c} \sum_{i=1}^{n_j} \frac{1}{c* n_{j}} y_{ij} = \frac{1}{n}\sum_{l}^{n} y_{l} = \overline{y}$$ + +Es la [**variabilidad explicada por los grupos**]{.hl-red} (variabilidad - de la media - ENTRE grupos). + +--- + +## ANOVA: un factor + + +El [**primer término**]{.hl-purple} es en realidad la [**media de la variabilidad $s_{j}^2$ DENTRO de cada grupo**]{.hl-purple} (el promedio de la variabilidad intragrupo) + + +$$\color{purple}{\frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \frac{n_j}{n_j} \left(y_{ij} - \overline{y}_j \right)^2 = \sum_{j=1}^{c} \frac{n_j}{n} s_{j}^2} := \hat{\sigma}^2$$ + +lo que hemos denominado antes $\hat{\sigma}^2 = \frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \hat{\varepsilon_{ij}}^2$ que se relaciona con la [**varianza residual (estimada)**]{.hl-purple} como $\hat{\sigma}^2 = \frac{n-c}{n} \hat{s}_{r}^{2}$. + + +Es la [**variabilidad NO explicada (residual) por el factor**]{.hl-purple} (promedio - de manera ponderada - de la variabilidad DENTRO de cada grupo) + +--- + +## ANOVA: un factor + +Por tanto, dado que el modelo es lineal, la [**variabilidad o información total**]{.hl-yellow} se puede descomponer como [**varianza explicada**]{.hl-red} (VE o suma cuadrados explicada - SSE) más [**varianza no explicada**]{.hl-purple} (VR o suma cuadrados residuales - SSR) + + +$$SST = SSE + SSR, \quad VT = VE + VR$$ + +$$VE = \sum_{j=1}^{c}\frac{ n_j}{n} \left(\overline{y}_j - \overline{y} \right)^2, \quad VR = \frac{1}{n}\sum_{j=1}^{c} \sum_{i=1}^{n_j} \hat{\varepsilon}_{ij}^2 = \hat{\sigma}^2 = \frac{n-c}{n} \hat{s}_{r}^{2}$$ + + +Así el objetivo será construir un **estadístico** para cuantificar si $VE$ se aleja mucho de $VR$ o no. + +--- + +## ANOVA: un factor + +Se puede **demostrar** como + +$$\frac{SSE}{\sigma^2} \sim \chi^2_{c-1}, \quad \frac{SSR}{\sigma^2} \sim \chi^2_{n-c} \quad \Rightarrow \quad F = \frac{\frac{SSE}{(c-1)\sigma^2}}{\frac{SSR}{(n-c)\sigma^2}} = \frac{\frac{SSE}{c-1}}{\frac{SSR}{n-c}} = \frac{\hat{s}_{e}^2}{\frac{n*VR}{n-c}} = \frac{\hat{s}_{e}^2}{\hat{s}_{r}^2} \sim F_{c-1, n-c}$$ + +usando que el cociente (ponderado por sus grados de libertad) de dos $\chi^2$ sigue una distribución conocida, calculando lo que se conoce como [**estadístico F**]{.hl-yellow}. + +. . . + +Si te fijas + +* $\hat{s}_{e}^2 = \frac{SSE}{c-1} = \frac{n * VE}{c-1} = \frac{1}{c-1}\sum_{j=1}^{c}n_j \left(\overline{y}_j - \overline{y} \right)^2$ es la [**varianza explicada (estimada)**]{.hl-red} calculada como una cuasivarianza ponderada. + +* $\hat{s}_{r}^2 = \frac{SSR}{n-c} = \frac{n*VR}{n-c}$ es la [**varianza residual (estimada)**]{.hl-purple} mencionada anteriormente + + + +--- + + +## ANOVA: un factor + +Vamos a ver el ejemplo en `R` haciendo uso de la función `aov()` + +* `data = ...`: la base de datos +* `formula = ...`: indicado como `var_objetivo ~ factor` (donde `~` representa un "vs") +* `|> summary()`: para obtener un resumen + +```{r} +aov(data = datos, formula = notas ~ asignatura) |> summary() +``` + +--- + +## ANOVA: un factor + + +```{r} +aov(data = datos, formula = notas ~ asignatura) |> summary() +``` + +Si [**analizamos por filas**]{.hl-yellow} tenemos + +* `asignatura`: la parte correspondiente la [**variabilidad explicada o entre grupos**]{.hl-red} + +* `Residuals`: la parte correspondiente la [**variabilidad no explicada o intra grupos**]{.hl-purple} + + +--- + +## ANOVA: un factor + + +```{r} +aov(data = datos, formula = notas ~ asignatura) |> summary() +``` + + +* `Df`: degrees of freedom (grados de libertad), definidos como $c-1$ para $SSE/VE$ (ya que $\frac{SSE}{\sigma^2} \sim \chi^2_{c-1}$) y $n-c$ (ya que $\frac{SSR}{\sigma^2} \sim \chi^2_{n-c}$). + +* `Sum Sq`: sum of squares (suma de cuadrados), es decir, $SSE$ y $SSR$. + +* `Mean Sq`: mean of squares (media de la suma de cuadrados, ponderado por `Df`), es decir, $\hat{s}_{e}^{2}$ y $\hat{s}_{r}^{2}$. + +* `F value` y `Pr(>F)`: valor del estadístico $F = \frac{\hat{s}_{e}^{2}}{\hat{s}_{r}^{2}}$ y p-valor del contraste + +. . . + +En este caso: [**rechazamos la hipótesis nula**]{.hl-yellow} de igualdad de medias, es decir, [**existen evidencias suficientes para concluir que el grupo tiene un efecto en las notas**]{.hl-yellow} + +--- + +## Caso real: crecimiento bebés + +Vamos a usar la tabla `leche_materna.csv` que recopila los resultados obtenidos de **2 tratamientos de leche en polvo distintos para el crecimiento de bebés prematuros** (de los que se miden su peso tras el tratamiento, partiendo de unas características similares, incluyendo además un **grupo control**). + +[**¿El objetivo?**]{.hl-yellow} Comprobar si alguno de los tratamientos fue efectivo. + +```{r} +datos <- + read_csv(file = "./datos/leche_materna.csv") |> + janitor::clean_names() +datos +``` + +--- + +## Caso real: crecimiento bebés + +```{r} +datos +``` + + +¿Cómo [**formulamos el ANOVA**]{.hl-yellow}? + +. . . + +$$y_{ij} = \mu_j + \varepsilon_{ij}, \quad y_{ij} = \text{peso del niño i del grupo j}, \quad j=1,2,3 \text{ (control, trt1, trt2)}$$ + +donde $\mu_j$ representa la media de peso de cada grupo, cuyo **estimador** insesgado es $\overline{y}_{j}$ + +--- + +## Caso real: crecimiento bebés + +¿La [**hipótesis nula**]{.hl-yellow}? + +. . . + +$$H_0:~\mu_1 = \mu_2 = \mu_3 \quad \text{(no diferencias entre tratamientos y control)}, \quad H_1:~existe$$ + +¿Existe una [**asociación entre el tratamiento/control y el peso**]{.hl_yellow}? + +--- + +## Caso real: crecimiento bebés + + +Desde un punto de vista [**descriptivo**]{.hl_yellow}, ¿cómo resumirlo numérica y gráficamente? + +:::: columns +::: {.column width="47%"} + +```{r} +datos |> + summarise("mean_peso" = mean(weight), + "sd_peso" = sd(weight), + .by = group) +``` + +::: + +::: {.column width="53%"} + +```{r} +#| code-fold: true +ggplot(datos) + + geom_boxplot(aes(x = group, y = weight, fill = group, + color = group), alpha = 0.5) + + MetBrewer::scale_color_met_d(palette_name = "Renoir") + + MetBrewer::scale_fill_met_d(palette_name = "Renoir") + + theme_minimal() +``` + +::: +:::: + +--- + +## Caso real: crecimiento bebés + +```{r} +#| code-fold: true +ggplot(datos |> + rowid_to_column(var = "id") |> + mutate("mean_weight" = mean(weight), .by = group)) + + geom_point(aes(x = id, y = weight, color = group), + alpha = 0.5, size = 4) + + geom_line(aes(x = id, y = mean_weight, color = group), + linewidth = 2) + + scale_y_continuous(limits = c(2.5, 7.5)) + + MetBrewer::scale_color_met_d(palette_name = "Renoir") + + theme_minimal() +``` + +--- + +## Caso real: crecimiento bebés + + +```{r} +aov(data = datos, formula = weight ~ group) |> summary() +``` + +El resultado del [**ANOVA de un factor (one-way ANOVA)**]{.hl-yellow} es el siguiente: + +Si [**analizamos por filas**]{.hl-yellow} tenemos + +* `group`: la parte correspondiente la [**variabilidad explicada o entre grupos de tratamiento**]{.hl-red} + +* `Residuals`: la parte correspondiente la [**variabilidad no explicada o intra grupos**]{.hl-purple} + +--- + +## Caso real: crecimiento bebés + + +```{r} +aov(data = datos, formula = weight ~ group) |> summary() +``` + +Si [**analizamos por columnas**]{.hl-yellow} tenemos + + +* `Df`: tenemos 2 grados de libertad (3 grupos - 1) para la varianza explicada y 27 grados de libertad (30 - 3 grupos) para la varianza no explicada. + +* `Sum Sq`: $SSE = 3.766$ y $SSR = 10.492$, + +* `Mean Sq`: $\hat{s}_{e}^{2} = 1.8832$ y $\hat{s}_{r}^{2} = 0.3886$. + + +* `F value` y `Pr(>F)`: valor del estadístico $F = \frac{\hat{s}_{e}^{2}}{\hat{s}_{r}^{2}} = \frac{1.8832}{0.3886} = 4.846$ y p-valor + +. . . + +[**Rechazamos la hipótesis nula**]{.hl-yellow}: [**existen evidencias para concluir que el tratamiento tiene un efecto en el peso**]{.hl-yellow} + +--- + +## Caso real: crecimiento bebés + + +```{r} +aov(data = datos, formula = weight ~ group) |> summary() +``` + +¿El [**problema**]{.hl-red}? + +. . . + +Sabemos que el tratamiento (bien sea "real" bien sea el grupo control) tiene un efecto (al menos estadístico) y que se observan [**medias distintas**]{.hl-yellow}. + +  + +[**¿Pero cuáles son distintas 2 a 2**]{.hl-purple}? ¿Son distintas entre los tratamientos? ¿Son distintas tratamientos vs control? ¿Solo uno de los tratamientos es distinto o ambos? + +En este caso necesitamos **3 comparaciones**. + +--- + +## Pruebas post-hoc + +Tras obtener un [**resultado significativo en un ANOVA**]{.hl-green} el siguiente objetivo sería determinar [**cuál de los grupos bajo estudio contribuye a esta significación estadística**]{.hl-yellow}. + +. . . + +Pero como hemos explicado, la estrategia de aplicar [**repetidamente pruebas t-Student**]{.hl-yellow} puede conllevar un [**aumento desmesurado de la probabilidad de cometer un error de Tipo I**]{.hl-red} (detectar diferencias por pura aleatoriedad) + +. . . + +  + +Alguno de los [**métodos post-hoc más comunes**]{.hl-yellow} (ver [**más**](https://journals.lww.com/jspinaldisorders/abstract/2022/06000/the_role_of_family_wise_error_rate_in_determining.7.aspx)) son **Bonferroni**, **Tukey** y **Dunnett**. + +--- + +## post-hoc: bonferroni + +El [**método de corrección Bonferroni**]{.hl-yellow} ya lo hemos explicado anteriormente y para implementarlo basta con usar `pairwise.t.test()` + +```{r} +# `pool.sd = FALSE` implica que, para cada comparativa, se calcula una desv en cada grupo +# `pool.sd = TRUE` --> la desviación estándar agrupada es un promedio ponderado de las sd de +# dos o más grupos, tal que las sd individuales se promedian, con más "peso" dado a +# tamaños de muestra más grandes. solo usar cuando los tamaños de cada grupo sean muy distintos +pairwise.t.test(datos$weight, datos$group, p.adjust.method = "bonferroni", pool.sd = FALSE) +``` + +. . . + +* **ctrl vs trt 1**: p-valor ajustado 0.751 --> [**sin diferencias significativas**]{.hl-red} + +* **ctrl vs trt 2**: p-valor ajustado 0.144 --> [**sin diferencias significativas**]{.hl-red} + +* **trt 1 vs trt 2**: p-valor ajustado 0.028 --> [**dif sig de los tratamientos**]{.hl-yellow} + + +--- + +## Pruebas post-hoc + +* [**Bonferroni**]{.hl-yellow}: + - [**Ventajas**]{.hl-green}: simplicidad y **no paramétrico** + - [**Desventajas**]{.hl-red}: al intentar controlar tanto error tipo I (rechazar $H_0$ sin que existan diferencias) es un **método muy conservador** -> cuesta mucho que se rechace $H_0$ -> [**alta tasa de errores tipo II según aumentan comparaciones**]{.hl-red} + +. . . + +Para evitar los problemas de Bonferroni cuando hay un alto número de comparaciones existe una alternativa conocida como [**test de Tukey**]{.hl-yellow}. + +```{r} +aov(data = datos, formula = weight ~ group) |> + TukeyHSD() +``` + + +--- + + +## post-hoc: Tukey + +```{r} +aov(data = datos, formula = weight ~ group) |> + TukeyHSD() +``` + + +* [**Tukey**]{.hl-yellow}: + - [**Ventajas**]{.hl-green}: controla eficazmente la tasa de error tipo I, muy útil para **muchas comparaciones** y [**mayor poder estadístico* vs Bonferroni**]{.hl-yellow} + - [**Desventajas**]{.hl-red}: sensible a valores atípicos y es [**paramétrico (requiere normalidad, grupos de tamaño similar e igualdad de varianzas)**]{.hl-red} + +[**Poder o potencia estadística**]{.hl-pruple}: probabilidad de rechazar $H_0$ cuando dicha hipótesis es falsa (probabilidad de no cometer un error del tipo II). + +--- + +## post-hoc: Dunnet + +En muchas ocasiones **no siempre queremos comparaciones 2 a 2 indistintamente** sino que querremos [**confrontar el resto de grupos respecto a un grupo control**]{.hl-yellow} (en nuestro caso: 2 tratamientos vs control, no los tratamientos entre sí). + +. . . + +Para ello disponemos del [**test de Dunnet**]{.hl-yellow} + +$$H_0:~\mu_{tr_{j}} = \mu_{ctrl}, \quad H_1:~\mu_{tr_{j}} \neq \mu_{ctrl}$$ + +* [**Dunnet**]{.hl-yellow}: + - [**Ventajas**]{.hl-green}: el contraste con mayor potencia cuando se trata de comaprar contra un grupo contorl + - [**Desventajas**]{.hl-red}: [**paramétrico (requiere normalidad, igualdad de varianzas e independencia entre grupos)**]{.hl-red} + + +--- + + +## Pruebas post-hoc + +Para implementarlo **primero chequeamos igualdad de varianzas entre los grupos** (por ejemplo, con `car::leveneTest()`) + + +```{r} +car::leveneTest(datos$weight ~ datos$group) +``` + +. . . + +Y luego `DunnettTest()` del paquete `{DescTools}` + +```{r} +DescTools::DunnettTest(x = datos$weight, g = datos$group, control = "ctrl") +``` + +Obtenemos que [**no hay dif. sig. entre ctrl y tratamientos**]{.hl-yellow} + + + +# Clase 4: análisis de la varianza {#clase-4} + +[**Asociación cuali vs cuanti: análisis de la varianza (4 de febrero de 2025)**]{style="color:#444442;"} + +--- + +## ANOVA: dos factores + + + + + diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-34-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-34-1.png index d7d107b..0933cd0 100644 Binary files a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-34-1.png and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-34-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-35-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-35-1.png index a606d61..020ec95 100644 Binary files a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-35-1.png and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-35-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-36-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-36-1.png index b1f15a2..11ce445 100644 Binary files a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-36-1.png and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-36-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-37-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-37-1.png index 229bc37..ab4a344 100644 Binary files a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-37-1.png and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-37-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-53-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-53-1.png new file mode 100644 index 0000000..e62f094 Binary files /dev/null and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-53-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-54-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-54-1.png index 1018968..c30bb43 100644 Binary files a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-54-1.png and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-54-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-62-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-62-1.png new file mode 100644 index 0000000..7a7488b Binary files /dev/null and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-62-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-63-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-63-1.png new file mode 100644 index 0000000..7441a4a Binary files /dev/null and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-63-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-66-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-66-1.png new file mode 100644 index 0000000..7a045c4 Binary files /dev/null and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-66-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-74-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-74-1.png new file mode 100644 index 0000000..0df3f56 Binary files /dev/null and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-74-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-75-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-75-1.png new file mode 100644 index 0000000..5e22e26 Binary files /dev/null and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-75-1.png differ diff --git a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-9-1.png b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-9-1.png index d99bc91..3099e65 100644 Binary files a/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-9-1.png and b/supervisado-datascience/diapos/index_files/figure-revealjs/unnamed-chunk-9-1.png differ