No va a querer usar CORR
- si crea un "número de alimento" y asigna Beef = 1, Chicken = 2 y Pasta = 3, entonces un coeficiente de correlación le dirá si el aumento de queso se correlaciona con un aumento "número de comida". Pero el "número de comida" es más alto o más bajo no significa nada desde que lo inventaste. Por lo tanto, no use CORR
a menos que sus alimentos en realidad estén ordenados de alguna manera, como lo son los números.
La manera en que los estadísticos hablan sobre esto es con levels of measurement. En el lenguaje del artículo vinculado, MEAL_NUM
es una medida nominal, o tal vez una medida ordinal si las comidas sucedieron en orden, pero de cualquier forma, es una mala idea usar coeficientes de correlación en ella.
Probablemente desearás encontrar algo como "¿qué porcentaje de las comidas de carne también tienen queso?" Lo siguiente devolverá, para cada ingrediente, el número de comidas que lo contienen y también el número de comidas que lo contienen Y el queso. El truco es que COUNT
solo cuenta valores no nulos.
SELECT Other.Ingredient,
COUNT(*) AS TotalMeals,
COUNT(Cheese.Ingredient) AS CheesyMeals
FROM table Other
LEFT JOIN table Cheese
ON (Cheese.Ingredient = 'Cheese'
AND Cheese.Meal_Num = Other.Meal_Num)
GROUP BY Other.Ingredient
Advertencia: arroja un resultado erróneo si incluye un ingrediente dos veces en una de las comidas.
Editar: Resulta que usted no está interesado específicamente en el queso. Realmente quieres todos los pares de "correlaciones". Entonces, podemos extraer el "queso" y llamarlo solo el primer y segundo ingrediente. Agregué una "Puntuación Posible" a esta que intenta actuar como un porcentaje de las comidas, pero no da una puntuación fuerte si hay muy pocas instancias del ingrediente.
SELECT First.Ingredient,
Second.Ingredient,
COUNT(*) AS MealsWithFirst,
COUNT(First.Ingredient) AS MealsWithBoth,
COUNT(First.Ingredient)/(COUNT(*) + 3) AS PossibleScore,
FROM table First
LEFT JOIN table Second
ON (First.Meal_Num = Second.Meal_Num)
GROUP BY First.Ingredient, Second.Ingredient
Cuando ordenados por puntuación, esto debe volver
PASTA CHEESE 2 2 0.400
CHEESE PASTA 3 2 0.333
BEEF CHEESE 1 1 0.250
BEEF PASTA 1 1 0.250
FISH CHEESE 1 1 0.250
FISH PASTA 1 1 0.250
CHICKEN CHEESE 1 1 0.250
PASTA BEEF 2 1 0.200
PASTA FISH 2 1 0.200
CHEESE BEEF 3 1 0.167
CHEESE FISH 3 1 0.167
CHEESE CHICKEN 3 1 0.167
Esto es realmente una buena información. Creo que la razón por la que OP quería usar una función como corr() es para poder aplicarla a todo el conjunto de datos en lugar de solo un ingrediente. –
@James Oh; ese es un muy buen punto en realidad. Sería un ejercicio interesante generalizar mi tabla de "Queso" para que no necesariamente se llame "Queso", pero esperaré a escuchar del OP. –
Sí, planeo dejar que esto se ejecute en todo el conjunto de datos. – owook