簡體   English   中英

鋸齒形線而不是線性建模中的直線

[英]Zig zag lines instead of straight line in linear modeling

數據集: 這里

我正在嘗試使用 R 在上述數據集上擬合線性 model。

這是 R 中的代碼:


library(tidyverse)
data <- read.csv("~/Desktop/Salary_Data.csv")

s_data <- data.frame(scale(data)) 

# Split data into test and train data sets
set.seed(123)
sam <- sample(c(T, F), size = nrow(s_data), replace=T, prob = c(0.8,0.2))
train <- s_data[sam,]
test <- s_data[!sam,]

model_train = lm(YearsExperience~Salary, data=train);

pred <- predict.lm(object = model_train, newdata = test)
pred_train <- predict.lm(model_train, train)


# Trying to plot using ggplot on test dataset. 
ggplot() +
  geom_point(aes(x = test$YearsExperience, y = test$Salary),
             colour = 'red') +
  geom_line(aes(x = test$YearsExperience, y = predict.lm(model_train, test)),
            colour = 'blue') +
  ggtitle('Salary vs Experience (Test set)') +
  xlab('Years of experience') +
  ylab('Salary')

Output

不是一條直線

我的理解是,簡單線性回歸 model 根據ax+b形式的線性方程預測值。 所以geom_line()中的y值必須在一條直線上,但在我的例子中,它們不是。 為什么會這樣? 謝謝閱讀!

看起來您在翻轉xy值時遇到了問題。 如果您在x軸上有 plot 年的經驗,看起來您正試圖用它來預測薪水。 但是你的 model 反了。 所以你可以翻轉 model 得到一條直線

model_train = lm(Salary~YearsExperience, data=train);

ggplot(data.frame(test, pred=predict(model_train, newdata = test))) +
  geom_point(aes(x = YearsExperience, y = Salary),
             colour = 'red') +
  geom_line(aes(x = YearsExperience, y = pred),
            colour = 'blue') +
  ggtitle('Salary vs Experience (Test set)') +
  xlab('Years of experience') +
  ylab('Salary')

在此處輸入圖像描述 或者你可以翻轉 plot 得到一條直線

model_train = lm(YearsExperience~Salary, data=train);

ggplot(data.frame(test, pred=predict(model_train, newdata = test))) +
  geom_point(aes(x = Salary, y = YearsExperience),
             colour = 'red') +
  geom_line(aes(x = Salary, y = pred),
            colour = 'blue') +
  ggtitle('Salary vs Experience (Test set)')

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM