#r #loops
#r #циклы
Вопрос:
Для проекта регрессии я создал кластеры данных через nbclust, используя kmeans. В настоящее время в этом проекте 4 кластера, но в случае успеха проект может включать анализ нескольких городов США. Хотя я мог бы построить каждую регрессию вручную, я бы предпочел свести к минимуму объем кода и, следовательно, возможность ошибок при кодировании.
Текущая модель использует glm с несколькими подмножествами и 10-15 различными независимыми переменными. В настоящее время я создаю каждую кластерную регрессию вручную.
Tulsa$Cluster <- Tulsa$Best.partition
#This creates a vector of clusters; there are currently 4 distinct clusters
summary(Tulsa_Cluster1 <- glm(formula = Tulsa$Result ~ Tulsa$FactorA Tulsa$FactorB Tulsa$FactorC Tulsa$FactorD Tulsa$FactorE Tulsa$FactorF,
method = "glm.fit", family = gaussian(),subset = Tulsa$Cluster =="1"))
summary(Tulsa_Step <- stepAIC(Tulsa_Cluster1, direction = "both",trace = FALSE,
scope=list(lower = ~ Tulsa_Cluster1$FactorA)))
Я надеюсь разработать регрессию по кластерам, которую я затем смогу обобщить.
Комментарии:
1. Какую часть
summary
строк нужно будет зациклить?2. Parfait — оба утверждения. Первое утверждение является «базовой» регрессией для кластера. Второй оператор — это пошаговая регрессия, которая запускается, как только выполняется начальная регрессия.
Ответ №1:
Рассмотрите любой из следующих подходов, используя unique
, levels
, split
и by
для перебора уникальных значений кластера:
unique
for
for (c in unique(Tulsa$Cluster)) {
Tulsa_Cluster <- glm(formula = Result ~ FactorA FactorB FactorC FactorD FactorE FactorF,
data = Tulsa, method = "glm.fit", family = gaussian(), subset = Cluster == c)
print(summary(Tulsa_Cluster)) # REQUIRED IN for LOOPS TO FOR CONSOLE OUTPUT
Tulsa_Step <- stepAIC(Tulsa_Cluster, direction = "both", trace = FALSE,
scope=list(lower = ~ Tulsa_Cluster$FactorA))
print(summary(Tulsa_Step)) # REQUIRED IN for LOOPS TO FOR CONSOLE OUTPUT
}
levels
for
for (c in levels(factor(Tulsa$Cluster))) {
Tulsa_Cluster <- glm(formula = Result ~ FactorA FactorB FactorC FactorD FactorE FactorF,
data = Tulsa, method = "glm.fit", family = gaussian(), subset = Cluster == c)
print(summary(Tulsa_Cluster))
Tulsa_Step <- stepAIC(Tulsa_Cluster, direction = "both", trace = FALSE,
scope=list(lower = ~ Tulsa_Cluster$FactorA))
print(summary(Tulsa_Step))
}
Ниже два возвращает именованный список объектов.
split
lapply
(нет аргументов подмножества)
data_list <- split(Tulsa, Tulsa$Cluster)
model_list <- lapply(data_list, function(sub_df) {
Tulsa_Cluster <- glm(formula = Result ~ FactorA FactorB FactorC FactorD FactorE FactorF,
data = sub_df, method = "glm.fit", family = gaussian())
Tulsa_Step <- stepAIC(Tulsa_Cluster, direction = "both", trace = FALSE,
scope=list(lower = ~ Tulsa_Cluster$FactorA))
# RETURN BOTH SUMMARIES INTO LIST
return(list(Tulsa_Cluster, Tulsa_Step))
})
by
(нет аргументов подмножества)
model_list <- by(Tulsa, Tulsa$Cluster, function(sub_df) {
Tulsa_Cluster <- glm(formula = Result ~ FactorA FactorB FactorC FactorD FactorE FactorF,
data = sub_df, method = "glm.fit", family = gaussian())
Tulsa_Step <- stepAIC(Tulsa_Cluster, direction = "both", trace = FALSE,
scope=list(lower = ~ Tulsa_Cluster$FactorA))
# RETURN BOTH SUMMARIES INTO LIST
return(list(Tulsa_Cluster, Tulsa_Step))
})
Комментарии:
1. Спасибо! Это потрясающе, и я действительно ценю вашу помощь.