#r #regression
#r #регрессия
Вопрос:
Я получил набор данных об ингредиентах конфет разных марок, а также информацию о ценах в процентах, сахаре и прибыли в процентах. Информация об ингредиентах является фиктивной переменной, где 0 означает, что характеристика отсутствует, а 1 означает, что она присутствует. Другие переменные являются числовыми и представляют содержание сахара в конфете, цену продукта. Прибыль на продукт является символьной переменной. Цель состоит в том, чтобы выбрать статистический метод для определения потребительских предпочтений и сделать прогноз для нового продукта. Я хотел бы реализовать решение для этого в R.
Поскольку категориальные фиктивные переменные и категориальная переменная winpercent вызывали проблемы, я решил преобразовать все переменные в один и тот же тип данных
dpt(rbind(head(Candy.df, 10), tail(Candy.df, 10)))
dput(rbind(head(Candy.df, 10), tail(Candy.df, 10)))
structure(list(competitorname = c("100 Grand", "3 Musketeers",
"One dime", "One quarter", "Air Heads", "Almond Joy", "Baby Ruth",
"Boston Baked Beans", "Candy Corn", "Caramel Apple Pops", "Tootsie Roll Juniors",
"Tootsie Roll Midgies", "Tootsie Roll Snack Bars", "Trolli Sour Bites",
"Twix", "Twizzlers", "Warheads", "WelchÕs Fruit Snacks", "WertherÕs Original Caramel",
"Whoppers"), chocolate = c(1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L), fruity = c(0L, 0L,
0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L,
0L, 0L), caramel = c(1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L,
0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L), peanutyalmondy = c(0L,
0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L), nougat = c(0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), crispedricewafer = c(1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
0L, 0L, 1L), hard = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L), bar = c(1L, 1L, 0L,
0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L,
0L), pluribus = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L), sugarpercent = c(0.73199999,
0.60399997, 0.011, 0.011, 0.90600002, 0.465, 0.60399997, 0.31299999,
0.90600002, 0.60399997, 0.31299999, 0.17399999, 0.465, 0.31299999,
0.546, 0.22, 0.093000002, 0.31299999, 0.186, 0.87199998), pricepercent = c(0.86000001,
0.51099998, 0.116, 0.51099998, 0.51099998, 0.76700002, 0.76700002,
0.51099998, 0.32499999, 0.32499999, 0.51099998, 0.011, 0.32499999,
0.255, 0.90600002, 0.116, 0.116, 0.31299999, 0.26699999, 0.84799999
), winpercent = c("66.971.725", "67.602.936", "32.261.086", "46.116.505",
"52.341.465", "50.347.546", "56.914.547", "23.417.824", "38.010.963",
"34.517.681", "43.068.897", "45.736.748", "49.653.503", "47.173.229",
"81.642.914", "45.466.282", "39.011.898", "44.375.519", "41.904.308",
"49.524.113")), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L,
9L, 10L, 77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 85L, 86L), class = "data.frame")
Candy.df <- read.csv("Candy.csv", header=TRUE, sep = ";", stringsAsFactors = FALSE)
Candy.df <- sapply(Candy.df, as.factor)
dis <- lda(winpercent~chocolate fruity caramel peanutyalmondy nougat crispedricewafer bar
pluribus hard sugarpercent pricepercent,data= Candy.df)
Error in eval(predvars, data, env) : Object 'chocolate' not found
Комментарии:
1. В чем здесь вопрос? Это «почему я получаю сообщение об ошибке?» Это может быть связано с тем, что вы не сохраняете свои data.frames прямо. Вы предоставили нам dput
cbc.df
, затем сделалиsummary(Lidl.df)
, а затем попробовали LDAlda(..., data=Sweets.df)
. Предполагается, что все это разные data.frames?2. К сожалению, ваш пример невоспроизводим. Пожалуйста, укажите код, который выполняется в понятной среде с библиотеками.
3. @DanY извините, это была моя ошибка. Это один data.frame. Я переименовал имена в одно имя. Ошибка относится к переменной chocolate в формуле lda.
4. Ошибка сообщает вам, что
chocolate
в data.frame нет столбца с именемLidl.df
. Очистите свою глобальную среду, прочитайтеLidl.df
сread.csv()
помощью, как вы это делаете в данный момент, а затем проверьте, действительно ли существует вызываемый столбецchocolate
.