Квадратичное соответствие нескольких наименьших квадратов в ggplot - PullRequest
1 голос
/ 09 марта 2019

Обратите внимание, что ваш график, созданный из Задачи 4, показывает квадратичное или искривленное отношение между log_wages против exp .Следующая задача - построить три квадратичных функции для каждого уровня расы: «черный», «белый» и «другой».Чтобы оценить квадратичное соответствие, вы можете использовать следующую функцию quad_fit :

```{r}
quad_fit <- function(data_sub) {
  return(lm(log_wage~exp+I(exp^2),data=data_sub)$coefficients)
}
quad_fit(salary_data)
```

Вышеприведенная функция вычисляет квадратичное соответствие наименьших квадратов и возвращает коэффициенты a1, a2, a3, где

Y (шляпа) = a1 + a2x + a3x ^ 2

, где Y (шляпа) = журнал (заработная плата) и x = exp

Использование ggplot , чтобы выполнить эту задачу или использовать базовую графику R для частичного кредита.Не забудьте включить легенду и соответствующие метки.

Моя попытка

blackfit <- quad_fit(salary_data[salary_data$race == "black",])
whitefit <- quad_fit(salary_data[salary_data$race == "white",])
otherfit <- quad_fit(salary_data[salary_data$race == "other",])

yblack <- blackfit[1] + blackfit[2]*salary_data$exp + blackfit[3]*(salary_data$exp)^2
ywhite <- whitefit[1] + whitefit[2]*salary_data$exp + whitefit[3]*(salary_data$exp)^2
yother <- otherfit[1] + otherfit[2]*salary_data$exp + otherfit[3]*(salary_data$exp)^2

soloblack <- salary_data[salary_data$race == "black",]
solowhite <- salary_data[salary_data$race == "white",]
soloother <- salary_data[salary_data$race == "other",]

ggplot(data = soloblack) +
  geom_point(aes(x = exp, y = log_wage)) +
  stat_smooth(aes(y = log_wage, x = exp), formula = y ~ yblack)

Это только первая попытка для данных, отфильтрованных с помощью для гонки == "черный".Мне непонятно, как должна выглядеть формула, потому что через функцию quad_fit кажется, что она уже делает вычисления за вас.

1 Ответ

1 голос
/ 09 марта 2019

Рассмотрите возможность построения подгоночных значений, используя вывод quad_fit (как показано @ StefanK здесь ) и используйте by, чтобы нанести на график все различные значения race :

reg_plot <- function(sub) {
   # PREDICTED DATA FOR LINE PLOT
   q_fit <- quad_fit(sub)
   predicted_df <- data.frame(wage_pred = predict(q_fit, sub), exp = sub$exp)

   # ORIGINAL SCATTER PLOT WITH PREDICTED LINE
   ggplot(data = sub) + 
     geom_point(aes(x = exp, y = log_wage, alpha = exp)) +
     labs(x = "Job Experience", y = "Log of Wage", 
          title = paste("Wage and Job Experience Plot for",    
                        sub$race[[1]], "in Salary Dataset") 
     geom_line(color='red', data = predicted_df, aes(x = exp, y = wage_pred))
}

# RUN GRAPHS FOR EACH RACE
by(salary_data, salary_data$race, reg_plot)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...