All NGUI sprites must be a child of a panel, so there has to be a parent anyway. If there isn't one, NGUI will attempt to find it and create one. You should never just instantiate UI elements in the middle of nowhere. If nothing else, then UIRoot.list[0].gameObject can be your parent.
I created float leftBoundsX and rightBoundX that represents the furthest left/right via the camera. I was then trying to instantiate using random.Range(leftBoundsX, rightBoundsX). It works fine as Unity Sprite, and these are not UI elements, but I was using UISprite so I can keep it all in one sprite sheet (it's a small game for my 7yo son but good practice). I was trying to keep everything under UIRoot and using the camera that is built by default w/ nGUI when adding your first nGUI object.
When I use AddChild, I can't seem to create a random start location based on left/right max X at the top of the screen like I want (they drop from the top of the screen downwards).
Right now I changed them back to Unity sprites and it all works perfectly, but I was trying to keep everything under nGUI since it is a 2D game with all sprites, it seems easier if I just keep everything under UIRoot as some things have ui elements even though they are game pieces and not purely gui.