Nie będziesz chciał używać CORR
- jeśli utworzysz "numer żywności" i przypiszesz wołowinę = 1, kurczaka = 2 i makaron = 3, wówczas współczynnik korelacji wskaże Ci, czy zwiększony ser koreluje ze zwiększonym "numer żywności". Ale "liczba żywności", która jest wyższa lub niższa, nie ma znaczenia, odkąd ją wymyśliłeś. Więc nie używaj CORR
, chyba że twoje jedzenie jest w jakiś sposób uporządkowane, podobnie jak liczby.
Sposób, w jaki mówią o tym statystycy, to levels of measurement. W języku połączonego artykułu, MEAL_NUM
jest miarą nominalną - lub może miarą porządkową, jeśli posiłki były ułożone w kolejności, ale tak czy inaczej, to naprawdę zły pomysł, aby użyć współczynników korelacji na nim.
Prawdopodobnie będziesz chciał zamiast tego znaleźć coś w stylu "jaki procent posiłków z wołowiny ma również ser?" Następujący produkt zwróci, dla każdego składnika, liczbę posiłków, które go zawierają, a także liczbę posiłków, które go zawierają ORAZ ser. Sztuczka polega na tym, że COUNT
liczy tylko wartości inne niż null.
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
Ostrzeżenie: zwraca błędne wyniki, jeśli składnik zawiera dwa składniki w jednym posiłku.
Edytuj: Okazuje się, że nie interesuje Cię specjalnie ser. Naprawdę chcesz wszystkich par "korelacji". Możemy więc wyodrębnić "Ser" i nazwać je tylko pierwszymi i drugimi składnikami. Dodałem do tego "PossibleScore", który próbuje zachowywać się jak procent posiłków, ale nie daje silnego wyniku, jeśli jest bardzo mało przypadków składnika.
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
Kiedy klasyfikowane według wynik, to powinien wrócić
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
To bardzo dobra informacja. Myślę, że powodem, dla którego OP chciał użyć funkcji takiej jak corr(), jest to, że mógłby zastosować ją do całego zestawu danych, a nie tylko jednego składnika. –
@ James Oh; to naprawdę bardzo dobry punkt. Byłoby interesującym ćwiczeniem uogólnić mój "serowy" stół, tak aby niekoniecznie był nazywany "serem", ale poczekam na wiadomość z PO. –
Tak, planuję pozwolić, aby to coś działało na całym zbiorze danych. – owook