Не уверен, что понял вопрос. Примеры данных помогут. Если вы хотите проверить нормальность каждого столбца, вы можете просто запустить тест в каждом соответствующем столбце.
Например, если ваш набор данных называется data
и является data.table см class(data)
:
Expense <- data$Expense
shapiro.test(Expense)
Вы можете перебрать столбцов (см apply
функции семьи), или если у вас есть только несколько просто повторите выше, если это необходимо.
В зависимости от того, что вы пытаетесь выяснить, есть несколько тестов: https://en.wikipedia.org/wiki/Normality_test#Frequentist_tests
Если у вас есть сказать, миллион Cust_Id
, где есть 340 уникальных, вы можете создать суб-таблицу для каждой уникальной группы и испытания нормальность каждой группы. Если это то, что вы хотите, я могу написать цикл, который затем даст вам нормальность для определенных столбцов для каждого из 340 уникальных идентификаторов?
Что-то вроде:
library(data.table)
data <- data.table(data)
Для одного идентификатора:
id_10 <- data[Cust_Id == 10]
Тестовые Расходы id_10:
shapiro.test(id_10$Expense)
в цикле их:
for(i in unique(data$Cust_Id)){
u <- setDT(data)[Cust_Id == i]
s <- shapiro.test(u$Expense)
print(i)
print(s)
}
Или создать подмножества, а затем применить тесты к каждому:
for(i in unique(data$Cust_Id)){
assign(paste0("id",i),setDT(data)[Cust_Id== i])
}
Другим способом будет расколоть уникальный идентификатор:
z<-split(data,data$Cust_Id)
for(i in z){print(shapiro.test(i$Expense))}
EDIT
Чтобы получить результаты в таблице :
Используя образец таблицы:
x <- data.frame(a=c(1,1,1,2,2,2,3,3,3,4,4,4),y=c(100,10,20,20,35,50,1,2,3,4,5,100),z=c(1,2,3,4,5,6,7,8,9,10,11,12))
df <- setDT(x)[, .(Normality_y = shapiro.test(y), Normality_z = shapiro.test(z), Count = .N), by = a]
df покажет нормальность столбцов y и z и количество уникальных идентификаторов в конце. Примечание для каждого идентификатора первое число в кадре данных для normality_y является значением W, а второе - значением p.
Чтобы очистить это:
library(plyr)
df2 <- ddply(df, "a", function(z) head(z,2))
Теперь для каждого ID вы будете иметь два ряда для W и р значение. Я использовал столбцы y и z, которые вы можете изменить на расход и доход и многое другое. Синтаксис должен быть прямым для добавления дополнительных столбцов.
Есть ли особые значения теста, который вы ищите? –
Вы пробовали мой? Окончательный с использованием split довольно прост. Позвоните в данные выборочных данных и измените расходы ($) на доход для нормальности дохода каждой группы идентификаторов, как вы пытались сделать с ответом Седрика. –
Извините, я думал, что ваш фрейм данных был назван Cust_id, я изменил свой сценарий. – Cedric