├── .github └── FUNDING.yml ├── .gitignore ├── LICENSE ├── README.md ├── detecting_multicollinearity.ipynb └── inp_data.csv /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: ['https://www.buymeacoffee.com/bhattbhavesh91'] 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | MANIFEST 2 | build 3 | dist 4 | _build 5 | docs/man/*.gz 6 | docs/source/api/generated 7 | docs/source/config.rst 8 | docs/gh-pages 9 | notebook/i18n/*/LC_MESSAGES/*.mo 10 | notebook/i18n/*/LC_MESSAGES/nbjs.json 11 | notebook/static/components 12 | notebook/static/style/*.min.css* 13 | notebook/static/*/js/built/ 14 | notebook/static/*/built/ 15 | notebook/static/built/ 16 | notebook/static/*/js/main.min.js* 17 | notebook/static/lab/*bundle.js 18 | node_modules 19 | *.py[co] 20 | __pycache__ 21 | *.egg-info 22 | *~ 23 | *.bak 24 | .ipynb_checkpoints 25 | .tox 26 | .DS_Store 27 | \#*# 28 | .#* 29 | .coverage 30 | .pytest_cache 31 | src 32 | 33 | *.swp 34 | *.map 35 | .idea/ 36 | Read the Docs 37 | config.rst 38 | 39 | /.project 40 | /.pydevproject 41 | 42 | package-lock.json 43 | geckodriver.log 44 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Multicollinearity - Why its bad? 2 | 3 | **If you like my work, you can support me by buying me a coffee by clicking the link below** 4 | 5 | Buy Me A Coffee 6 | 7 | ## To view the video 8 | * [Click here](https://youtu.be/ATH4urDitI8) 9 | * Click on the image below 10 | 11 | [![Multicollinearity - Why its bad?](http://img.youtube.com/vi/ATH4urDitI8/0.jpg)](http://www.youtube.com/watch?v=ATH4urDitI8) 12 | 13 | ## Follow Me 14 | 15 | 16 | 17 | 18 | 19 | 20 |

Show your support by starring the repository 🙂

21 | -------------------------------------------------------------------------------- /detecting_multicollinearity.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "colab": { 8 | "base_uri": "https://localhost:8080/", 9 | "height": 485 10 | }, 11 | "colab_type": "code", 12 | "executionInfo": { 13 | "elapsed": 1279, 14 | "status": "error", 15 | "timestamp": 1559972033717, 16 | "user": { 17 | "displayName": "Bhavesh Bhatt", 18 | "photoUrl": "https://lh5.googleusercontent.com/-Dxy3HXzth_c/AAAAAAAAAAI/AAAAAAAAHvk/4kcnA5cyAC4/s64/photo.jpg", 19 | "userId": "01561702845917398436" 20 | }, 21 | "user_tz": -330 22 | }, 23 | "id": "YqWC1bhPV7Eu", 24 | "outputId": "c17288a6-9707-4faa-f3e8-79063a9dd68e" 25 | }, 26 | "outputs": [], 27 | "source": [ 28 | "import matplotlib.pyplot as plt\n", 29 | "import numpy as np\n", 30 | "import pandas as pd\n", 31 | "import seaborn as sns\n", 32 | "import statsmodels.api as sm\n", 33 | "import warnings\n", 34 | "from numpy.linalg import matrix_rank, inv\n", 35 | "from sklearn.preprocessing import StandardScaler\n", 36 | "from statsmodels.stats.outliers_influence import variance_inflation_factor\n", 37 | "from statsmodels.tools.tools import add_constant" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": 2, 43 | "metadata": {}, 44 | "outputs": [], 45 | "source": [ 46 | "%matplotlib inline\n", 47 | "np.set_printoptions(precision=4)\n", 48 | "pd.set_option('display.float_format', lambda x: '%.3f' % x)\n", 49 | "warnings.filterwarnings('ignore')" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 3, 55 | "metadata": {}, 56 | "outputs": [], 57 | "source": [ 58 | "def pretty_print_linear(coefs, names=None, sort=False):\n", 59 | " if names is None:\n", 60 | " names = [\"X%s\" % x for x in range(len(coefs))]\n", 61 | " lst = zip(coefs, names)\n", 62 | " if sort:\n", 63 | " lst = sorted(lst, key=lambda x: -np.abs(x[0]))\n", 64 | " return \" + \".join(\"%s * %s\" % (round(coef, 3), name) for coef, name in lst)" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 4, 70 | "metadata": {}, 71 | "outputs": [], 72 | "source": [ 73 | "def plot_correlation(df, numerical_feature_columns, target, k):\n", 74 | " cols = df[numerical_feature_columns].corr().nlargest(k, target)[target].index\n", 75 | " cm = df[cols].corr()\n", 76 | " plt.figure(figsize=(10,6))\n", 77 | " return sns.heatmap(cm, annot=True, cmap = 'viridis')" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 5, 83 | "metadata": {}, 84 | "outputs": [], 85 | "source": [ 86 | "def fit_ols(x, y):\n", 87 | " model = sm.OLS(y, x)\n", 88 | " results = model.fit()\n", 89 | " return results.summary()" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 6, 95 | "metadata": {}, 96 | "outputs": [], 97 | "source": [ 98 | "def generate_vif(df, target):\n", 99 | " X_var = add_constant(df.loc[:, df.columns != target])\n", 100 | " return pd.Series(\n", 101 | " [variance_inflation_factor(X_var.values, i) for i in range(X_var.shape[1])],\n", 102 | " index=X_var.columns,\n", 103 | " )" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": 7, 109 | "metadata": {}, 110 | "outputs": [], 111 | "source": [ 112 | "def generate_x_y_numeric_target(df, target):\n", 113 | " numerical_feature_columns = list(df._get_numeric_data().columns)\n", 114 | " X = df.loc[:, df.columns != target].values\n", 115 | " Y = df.loc[:, df.columns == target].values\n", 116 | " return numerical_feature_columns, X, Y" 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": 8, 122 | "metadata": {}, 123 | "outputs": [], 124 | "source": [ 125 | "df = pd.read_csv('inp_data.csv')" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": 9, 131 | "metadata": {}, 132 | "outputs": [ 133 | { 134 | "data": { 135 | "text/html": [ 136 | "
\n", 137 | "\n", 150 | "\n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | "
x1x2x3y
0100110403.900
195110402.600
290120302.700
385110403.000
480100202.400
\n", 198 | "
" 199 | ], 200 | "text/plain": [ 201 | " x1 x2 x3 y\n", 202 | "0 100 110 40 3.900\n", 203 | "1 95 110 40 2.600\n", 204 | "2 90 120 30 2.700\n", 205 | "3 85 110 40 3.000\n", 206 | "4 80 100 20 2.400" 207 | ] 208 | }, 209 | "execution_count": 9, 210 | "metadata": {}, 211 | "output_type": "execute_result" 212 | } 213 | ], 214 | "source": [ 215 | "df.head()" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": 10, 221 | "metadata": {}, 222 | "outputs": [ 223 | { 224 | "data": { 225 | "text/plain": [ 226 | "" 227 | ] 228 | }, 229 | "execution_count": 10, 230 | "metadata": {}, 231 | "output_type": "execute_result" 232 | }, 233 | { 234 | "data": { 235 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAicAAAFpCAYAAABH6ohcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xl4FeX5//H3fU4CYUlCAsgSFtkRUFAWd8GFKmrdF6Rq8UulVrE/912/aitq3esOorZatWqtgkXBLwJqCZIooOyEIJAVQkgIq5Dz/P5IjEnIpjE5Myef13XN1TMzzzlzT0eSO/dzzxxzziEiIiLiFYFwByAiIiJSnpITERER8RQlJyIiIuIpSk5ERETEU5SciIiIiKcoORERERFPUXIiIiIinqLkRERERDxFyYmIiIh4ipITERER8ZSohj5AKKevno/vU6NXnhnuEKQeom6KDXcIUg+hxSvCHYLUwyehd6wxj1ff37WBjmsaNd7aNHhyIiIiIg0rRKhe7/faNIrX4hEREZEmTpUTERERnyt29auceC0Z8Fo8IiIi8hOFiKz2TiUnIiIiPlffnhOvUc+JiIiIeIoqJyIiIj5X7DStIyIiIh6inhMRERHxlGIlJyIiIuIlkVY5UUOsiIiIeIoqJyIiIj6nhlgRERHxlMh6yomSExEREd9TQ6yIiIh4SnFk5SZqiBURERFvUeVERETE59RzIiIiIp5SjIU7hF+UkhMRERGfC6nnRERERKThqHIiIiLic5rWEREREU9RciIiIiKeEnJKTkRERMRDIq1yooZYERER8RRVTkRERHyuOMJqDUpOREREfE49JyIiIuIp6jkRERERTyl2gXottTGz08xstZmlmdltVezvbmZzzOwbM5tnZl3K7etmZrPNbKWZrTCzg2s7npITERERqZaZBYFngTHAAOASMxtQadijwN+dc4cB9wMPltv3d+AR59whwAhgc23HVHIiIiLicyEC9VpqMQJIc86lO+e+B94Czq40ZgAwp/T13B/2lyYxUc65TwCcczucc7tqO6CSExEREZ8rxuq11CIJ2FRuPaN0W3lLgfNLX58LxJpZW6AvUGBm75nZYjN7pLQSUyMlJyIiIj5X354TM5toZqnllonlPr6q7KXy9yDfBIw0s8XASCAT2E/JjTfHl+4fDvQExtd2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\n", 236 | "text/plain": [ 237 | "
" 238 | ] 239 | }, 240 | "metadata": { 241 | "needs_background": "light" 242 | }, 243 | "output_type": "display_data" 244 | } 245 | ], 246 | "source": [ 247 | "target = 'y'\n", 248 | "numeric_cols, X, Y = generate_x_y_numeric_target(df, target)\n", 249 | "plot_correlation(df, numeric_cols, target, 5)" 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": 11, 255 | "metadata": {}, 256 | "outputs": [ 257 | { 258 | "name": "stdout", 259 | "output_type": "stream", 260 | "text": [ 261 | " OLS Regression Results \n", 262 | "==============================================================================\n", 263 | "Dep. Variable: y R-squared: 0.986\n", 264 | "Model: OLS Adj. R-squared: 0.981\n", 265 | "Method: Least Squares F-statistic: 169.8\n", 266 | "Date: Sun, 09 Jun 2019 Prob (F-statistic): 6.72e-07\n", 267 | "Time: 14:14:51 Log-Likelihood: -1.9021\n", 268 | "No. Observations: 10 AIC: 9.804\n", 269 | "Df Residuals: 7 BIC: 10.71\n", 270 | "Df Model: 3 \n", 271 | "Covariance Type: nonrobust \n", 272 | "==============================================================================\n", 273 | " coef std err t P>|t| [0.025 0.975]\n", 274 | "------------------------------------------------------------------------------\n", 275 | "x1 0.0405 0.012 3.420 0.011 0.012 0.068\n", 276 | "x2 -0.0093 0.009 -0.997 0.352 -0.031 0.013\n", 277 | "x3 0.0090 0.009 0.982 0.359 -0.013 0.031\n", 278 | "==============================================================================\n", 279 | "Omnibus: 0.439 Durbin-Watson: 2.500\n", 280 | "Prob(Omnibus): 0.803 Jarque-Bera (JB): 0.131\n", 281 | "Skew: -0.234 Prob(JB): 0.937\n", 282 | "Kurtosis: 2.692 Cond. No. 17.9\n", 283 | "==============================================================================\n", 284 | "\n", 285 | "Warnings:\n", 286 | "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n" 287 | ] 288 | } 289 | ], 290 | "source": [ 291 | "print(fit_ols(X,Y))" 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "execution_count": 12, 297 | "metadata": {}, 298 | "outputs": [ 299 | { 300 | "name": "stdout", 301 | "output_type": "stream", 302 | "text": [ 303 | "const 135.872\n", 304 | "x1 2.384\n", 305 | "x2 5.028\n", 306 | "x3 3.441\n", 307 | "dtype: float64\n" 308 | ] 309 | } 310 | ], 311 | "source": [ 312 | "print (generate_vif(df, target))" 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 13, 318 | "metadata": {}, 319 | "outputs": [], 320 | "source": [ 321 | "df['x4'] = df['x1'] + df['x2'] + df['x3']" 322 | ] 323 | }, 324 | { 325 | "cell_type": "code", 326 | "execution_count": 14, 327 | "metadata": {}, 328 | "outputs": [ 329 | { 330 | "data": { 331 | "text/html": [ 332 | "
\n", 333 | "\n", 346 | "\n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | "
x1x2x3yx4
0100110403.900250
195110402.600245
290120302.700240
385110403.000235
480100202.400200
\n", 400 | "
" 401 | ], 402 | "text/plain": [ 403 | " x1 x2 x3 y x4\n", 404 | "0 100 110 40 3.900 250\n", 405 | "1 95 110 40 2.600 245\n", 406 | "2 90 120 30 2.700 240\n", 407 | "3 85 110 40 3.000 235\n", 408 | "4 80 100 20 2.400 200" 409 | ] 410 | }, 411 | "execution_count": 14, 412 | "metadata": {}, 413 | "output_type": "execute_result" 414 | } 415 | ], 416 | "source": [ 417 | "df.head()" 418 | ] 419 | }, 420 | { 421 | "cell_type": "code", 422 | "execution_count": 15, 423 | "metadata": {}, 424 | "outputs": [ 425 | { 426 | "data": { 427 | "text/plain": [ 428 | "" 429 | ] 430 | }, 431 | "execution_count": 15, 432 | "metadata": {}, 433 | "output_type": "execute_result" 434 | }, 435 | { 436 | "data": { 437 | "image/png": "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\n", 438 | "text/plain": [ 439 | "
" 440 | ] 441 | }, 442 | "metadata": { 443 | "needs_background": "light" 444 | }, 445 | "output_type": "display_data" 446 | } 447 | ], 448 | "source": [ 449 | "target = 'y'\n", 450 | "numeric_cols, X, Y = generate_x_y_numeric_target(df, target)\n", 451 | "plot_correlation(df, numeric_cols, target, 5)" 452 | ] 453 | }, 454 | { 455 | "cell_type": "code", 456 | "execution_count": 16, 457 | "metadata": {}, 458 | "outputs": [ 459 | { 460 | "name": "stdout", 461 | "output_type": "stream", 462 | "text": [ 463 | " OLS Regression Results \n", 464 | "==============================================================================\n", 465 | "Dep. Variable: y R-squared: 0.986\n", 466 | "Model: OLS Adj. R-squared: 0.981\n", 467 | "Method: Least Squares F-statistic: 169.8\n", 468 | "Date: Sun, 09 Jun 2019 Prob (F-statistic): 6.72e-07\n", 469 | "Time: 14:21:38 Log-Likelihood: -1.9021\n", 470 | "No. Observations: 10 AIC: 9.804\n", 471 | "Df Residuals: 7 BIC: 10.71\n", 472 | "Df Model: 3 \n", 473 | "Covariance Type: nonrobust \n", 474 | "==============================================================================\n", 475 | " coef std err t P>|t| [0.025 0.975]\n", 476 | "------------------------------------------------------------------------------\n", 477 | "x1 0.0304 0.011 2.692 0.031 0.004 0.057\n", 478 | "x2 -0.0194 0.011 -1.844 0.108 -0.044 0.005\n", 479 | "x3 -0.0010 0.008 -0.131 0.899 -0.019 0.017\n", 480 | "x4 0.0100 0.002 5.540 0.001 0.006 0.014\n", 481 | "==============================================================================\n", 482 | "Omnibus: 0.439 Durbin-Watson: 2.500\n", 483 | "Prob(Omnibus): 0.803 Jarque-Bera (JB): 0.131\n", 484 | "Skew: -0.234 Prob(JB): 0.937\n", 485 | "Kurtosis: 2.692 Cond. No. 3.29e+16\n", 486 | "==============================================================================\n", 487 | "\n", 488 | "Warnings:\n", 489 | "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", 490 | "[2] The smallest eigenvalue is 5.7e-28. This might indicate that there are\n", 491 | "strong multicollinearity problems or that the design matrix is singular.\n" 492 | ] 493 | } 494 | ], 495 | "source": [ 496 | "print(fit_ols(X,Y))" 497 | ] 498 | }, 499 | { 500 | "cell_type": "code", 501 | "execution_count": 17, 502 | "metadata": {}, 503 | "outputs": [ 504 | { 505 | "name": "stdout", 506 | "output_type": "stream", 507 | "text": [ 508 | "const 135.872\n", 509 | "x1 inf\n", 510 | "x2 inf\n", 511 | "x3 inf\n", 512 | "x4 inf\n", 513 | "dtype: float64\n" 514 | ] 515 | } 516 | ], 517 | "source": [ 518 | "print (generate_vif(df, target))" 519 | ] 520 | }, 521 | { 522 | "cell_type": "markdown", 523 | "metadata": {}, 524 | "source": [ 525 | "###
Weights Equation in OLS
" 526 | ] 527 | }, 528 | { 529 | "cell_type": "markdown", 530 | "metadata": {}, 531 | "source": [ 532 | "\\begin{equation}\n", 533 | "\\hat{Y} = \\hat{\\beta}_0 + \\hat{\\beta}_1 X_i + \\hat{\\epsilon}_i\n", 534 | "\\end{equation}" 535 | ] 536 | }, 537 | { 538 | "cell_type": "markdown", 539 | "metadata": {}, 540 | "source": [ 541 | "\\begin{equation}\n", 542 | "\\hat{\\boldsymbol{\\beta}_1}=\\left(\\mathbf{X}^{\\top} \\mathbf{X}\\right)^{-1} \\mathbf{X}^{\\top} \\mathbf{Y}\n", 543 | "\\end{equation}" 544 | ] 545 | }, 546 | { 547 | "cell_type": "code", 548 | "execution_count": 18, 549 | "metadata": {}, 550 | "outputs": [ 551 | { 552 | "name": "stdout", 553 | "output_type": "stream", 554 | "text": [ 555 | "[[ 62125 80500 22250 164875]\n", 556 | " [ 80500 105800 29200 215500]\n", 557 | " [ 22250 29200 9500 60950]\n", 558 | " [164875 215500 60950 441325]]\n" 559 | ] 560 | } 561 | ], 562 | "source": [ 563 | "covariance_matrix = np.dot(X.T, X)\n", 564 | "print (covariance_matrix)" 565 | ] 566 | }, 567 | { 568 | "cell_type": "code", 569 | "execution_count": 19, 570 | "metadata": {}, 571 | "outputs": [ 572 | { 573 | "data": { 574 | "text/plain": [ 575 | "3" 576 | ] 577 | }, 578 | "execution_count": 19, 579 | "metadata": {}, 580 | "output_type": "execute_result" 581 | } 582 | ], 583 | "source": [ 584 | "matrix_rank(covariance_matrix)" 585 | ] 586 | }, 587 | { 588 | "cell_type": "code", 589 | "execution_count": 20, 590 | "metadata": {}, 591 | "outputs": [ 592 | { 593 | "ename": "LinAlgError", 594 | "evalue": "Singular matrix", 595 | "output_type": "error", 596 | "traceback": [ 597 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 598 | "\u001b[0;31mLinAlgError\u001b[0m Traceback (most recent call last)", 599 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0minverse_covariance_matrix\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcovariance_matrix\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 600 | "\u001b[0;32m/anaconda3/lib/python3.6/site-packages/numpy/linalg/linalg.py\u001b[0m in \u001b[0;36minv\u001b[0;34m(a)\u001b[0m\n\u001b[1;32m 530\u001b[0m \u001b[0msignature\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'D->D'\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misComplexType\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m'd->d'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 531\u001b[0m \u001b[0mextobj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_linalg_error_extobj\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_raise_linalgerror_singular\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 532\u001b[0;31m \u001b[0mainv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_umath_linalg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msignature\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msignature\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mextobj\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mextobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 533\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mwrap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mainv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mastype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult_t\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 534\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", 601 | "\u001b[0;32m/anaconda3/lib/python3.6/site-packages/numpy/linalg/linalg.py\u001b[0m in \u001b[0;36m_raise_linalgerror_singular\u001b[0;34m(err, flag)\u001b[0m\n\u001b[1;32m 87\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 88\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_raise_linalgerror_singular\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mflag\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 89\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mLinAlgError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Singular matrix\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 90\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 91\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_raise_linalgerror_nonposdef\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mflag\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 602 | "\u001b[0;31mLinAlgError\u001b[0m: Singular matrix" 603 | ] 604 | } 605 | ], 606 | "source": [ 607 | "inverse_covariance_matrix = inv(covariance_matrix)" 608 | ] 609 | }, 610 | { 611 | "cell_type": "code", 612 | "execution_count": 21, 613 | "metadata": {}, 614 | "outputs": [ 615 | { 616 | "name": "stdout", 617 | "output_type": "stream", 618 | "text": [ 619 | "[[ 62125 80500]\n", 620 | " [ 80500 105800]]\n" 621 | ] 622 | } 623 | ], 624 | "source": [ 625 | "X_sliced = X[:, 0:2]\n", 626 | "covariance_matrix = np.dot(X_sliced.T, X_sliced)\n", 627 | "print (covariance_matrix)" 628 | ] 629 | }, 630 | { 631 | "cell_type": "code", 632 | "execution_count": 22, 633 | "metadata": {}, 634 | "outputs": [ 635 | { 636 | "data": { 637 | "text/plain": [ 638 | "2" 639 | ] 640 | }, 641 | "execution_count": 22, 642 | "metadata": {}, 643 | "output_type": "execute_result" 644 | } 645 | ], 646 | "source": [ 647 | "matrix_rank(covariance_matrix)" 648 | ] 649 | }, 650 | { 651 | "cell_type": "code", 652 | "execution_count": 23, 653 | "metadata": {}, 654 | "outputs": [], 655 | "source": [ 656 | "inverse_covariance_matrix = inv(covariance_matrix)" 657 | ] 658 | }, 659 | { 660 | "cell_type": "code", 661 | "execution_count": 24, 662 | "metadata": {}, 663 | "outputs": [ 664 | { 665 | "name": "stdout", 666 | "output_type": "stream", 667 | "text": [ 668 | "[[ 0.0408]\n", 669 | " [-0.0071]]\n" 670 | ] 671 | } 672 | ], 673 | "source": [ 674 | "weights = np.dot(np.dot(inverse_covariance_matrix, X_sliced.T), Y)\n", 675 | "print (weights)" 676 | ] 677 | }, 678 | { 679 | "cell_type": "code", 680 | "execution_count": 25, 681 | "metadata": {}, 682 | "outputs": [ 683 | { 684 | "name": "stdout", 685 | "output_type": "stream", 686 | "text": [ 687 | " OLS Regression Results \n", 688 | "==============================================================================\n", 689 | "Dep. Variable: y R-squared: 0.985\n", 690 | "Model: OLS Adj. R-squared: 0.981\n", 691 | "Method: Least Squares F-statistic: 255.3\n", 692 | "Date: Sun, 09 Jun 2019 Prob (F-statistic): 5.66e-08\n", 693 | "Time: 14:32:17 Log-Likelihood: -2.5469\n", 694 | "No. Observations: 10 AIC: 9.094\n", 695 | "Df Residuals: 8 BIC: 9.699\n", 696 | "Df Model: 2 \n", 697 | "Covariance Type: nonrobust \n", 698 | "==============================================================================\n", 699 | " coef std err t P>|t| [0.025 0.975]\n", 700 | "------------------------------------------------------------------------------\n", 701 | "x1 0.0408 0.012 3.458 0.009 0.014 0.068\n", 702 | "x2 -0.0071 0.009 -0.783 0.456 -0.028 0.014\n", 703 | "==============================================================================\n", 704 | "Omnibus: 0.365 Durbin-Watson: 2.563\n", 705 | "Prob(Omnibus): 0.833 Jarque-Bera (JB): 0.333\n", 706 | "Skew: 0.332 Prob(JB): 0.847\n", 707 | "Kurtosis: 2.402 Cond. No. 17.4\n", 708 | "==============================================================================\n", 709 | "\n", 710 | "Warnings:\n", 711 | "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n" 712 | ] 713 | } 714 | ], 715 | "source": [ 716 | "print(fit_ols(X_sliced,Y))" 717 | ] 718 | }, 719 | { 720 | "cell_type": "code", 721 | "execution_count": null, 722 | "metadata": {}, 723 | "outputs": [], 724 | "source": [] 725 | } 726 | ], 727 | "metadata": { 728 | "colab": { 729 | "name": "Copy of Untitled0.ipynb", 730 | "provenance": [], 731 | "version": "0.3.2" 732 | }, 733 | "kernelspec": { 734 | "display_name": "Python 3", 735 | "language": "python", 736 | "name": "python3" 737 | }, 738 | "language_info": { 739 | "codemirror_mode": { 740 | "name": "ipython", 741 | "version": 3 742 | }, 743 | "file_extension": ".py", 744 | "mimetype": "text/x-python", 745 | "name": "python", 746 | "nbconvert_exporter": "python", 747 | "pygments_lexer": "ipython3", 748 | "version": "3.6.8" 749 | } 750 | }, 751 | "nbformat": 4, 752 | "nbformat_minor": 1 753 | } 754 | -------------------------------------------------------------------------------- /inp_data.csv: -------------------------------------------------------------------------------- 1 | x1,x2,x3,y 2 | 100,110,40,3.9 3 | 95,110,40,2.6 4 | 90,120,30,2.7 5 | 85,110,40,3 6 | 80,100,20,2.4 7 | 75,110,40,2.2 8 | 70,90,0,2.1 9 | 65,110,40,2.1 10 | 60,80,10,1.5 11 | 55,80,10,1.8 --------------------------------------------------------------------------------