At the bottom of this post, you will find a link to the raw data along with some more information about the study I conducted and some of the decisions that may have affected the data.
To be clear: this is not a study on what species of Pokémon Ditto can disguise itself as! Data were collected indiscriminately and anonymously and therefore some reports may have been false. However, all reported data were included in the analysis.
It is generally known by now that Magikarp, Pidgey, Rattata, and Zubat are all Pokémon that Ditto disguises itself as. Well, now there's hard data to support the assertion that Ditto prefers to disguise itself as one of these 4 Pokémon.
Others have reported that they have caught Ditto disguised as other Pokémon such as Ekans, Mankey, and Spearow. However, there is no hard evidence for any of these (i.e. videos or screenshots). I assert that I captured a Ditto disguised as a Spearow, so I believe other Spearow and common Pokémon reports as well. I did not have the foresight to capture a screenshot at the time, so I make no claims of certainty (I could have been mistaken, I don't remember paying much attention at the time to what I was catching).
So, why does the above matter? While Ditto might not only disguise itself as Pidgey, Rattata, Zubat, and Magikarp, it certainly prefers to do so. That's an important distinction. These results make no claims about what other Pokémon Ditto can disguise itself as, but it does inform us what Ditto prefers to disguise itself as.
If you want to make edits to the Google Sheet, please make a copy (File > Make a copy...) and edit your copy. Feel free to share it with the community. I have included extra information that I have not used in the analysis but may be helpful for other analyses.
Important: Ditto displays a significant (p < 0.05) preference to disguise itself as either Pidgey, Rattata, Zubat, or Magikarp.