From what you say in your clarification, you have one layer containing points, and each point has a categorical variable which indicates it is either a hotel or a shop etc. No point can be more than one category at once. You are trying to evaluate if the distribution of one type of point relates in a spatial sense to the distribution of another.
There is some useful information in a similar question here: Comparing two spatial point patterns?
First, you probably should re-project your data into a coordinate system based in metres- like the appropriate UTM system for that part of the world. You might also need to add a unique id field or name to the point layers if one does not exist. See this tutorial on how:
EDIT: It would also be useful to have a polygon layer containing the outline of the city. This will be the bounding space if you want to generate some random points, or to compare total area with area within buffers. If you don't have an outline then you can create a dummy one using Vector > Geoprocessing tools > Convex hull(s).
Next (though it can probably be done in one layer by experts) I would break the point layer up according to its type, so that you have separate layers for hotels, restaurants, etc. Information on the different ways to do this is well explained in answers here:
Splitting shapefile into separate files for each feature using QGIS/GDAL/SAGA?
You now have to make a decision as to what will be your estimation metric of “closeness” between each category on a pair basis- that is, between say hotels and restaurants, hotels and atm’s etc. Your measurement of “closeness” could be established several ways, for example by the average of the minimum distances of each restaurant to any hotel (as I think was suggested by @VincentBré in his comment) or the number of occurrences of restaurants that fall into buffers around each of the points representing the hotels (for example, restaurants situated within 200 m from a hotel vs those situated more than 200 m from a hotel. These are both valid approaches and each answers a somewhat different question.
To accomplish the first, you could use the Distance Matrix tool with number of points set to 1 between the layer for restaurants and the layer for hotels (then the same for all the other pairs you want to test). This will give you the distance from each restaurant point to the nearest hotel point in a newly added variable called “Distance”. This link describes the process:
Then the average of this field is the average minimum distance of restaurants to hotels, etc. You can calculate a value for each pair type and compare them.
For the second, you need first to decide what distance counts as “close” then to create a circular buffer around each hotel point with radius at the chosen distance. You can then count the number of restaurants, atm’s etc that fall within the buffers versus those that don’t.
This link gives the work flow:
Count points within each buffer QGIS
If you want to progress further, you could assess if the count you received was statistically different to the count you would get if the distribution of restaurant’s was random. You could even generate a couple of random point sets and make a comparison using the logic in this link:
Generate random points within a polygon with minimum distances in QGIS 2.14
Note that just because you have a spatial association does not mean one causes the other- they might both relate to something else like transport hubs or population concentration.
Note also in closing that there is a very big but complex field of techniques for spatial analysis and statistical tests of significance of spatial association. If you want to delve more deeply then start with the terrific work of Luc Anselin, particularly these two papers which are both freely available: