একটি জিজিপ্লোতে একটি রিগ্রেশন লাইন যুক্ত করা হচ্ছে


120

আমি জিজিপ্লট-এ একটি রিগ্রেশন লাইন যুক্ত করার চেষ্টা করছি। আমি প্রথমে অলাইন দিয়ে চেষ্টা করেছি কিন্তু আমি এটি কাজ করতে পরিচালিত হইনি। তারপরে আমি এটি চেষ্টা করেছিলাম ...

data = data.frame(x.plot=rep(seq(1,5),10),y.plot=rnorm(50))
ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) +
   geom_smooth(method='lm',formula=data$y.plot~data$x.plot)

তবে এটিও কাজ করছে না।

উত্তর:


170

সাধারণভাবে, আপনার নিজের সূত্রটি সরবরাহ করতে আপনার পক্ষে যুক্তি ব্যবহার করা উচিত xএবং yএটি আপনার প্রদত্ত মানগুলির সাথে মিল রাখে ggplot()- xএক্ষেত্রে x.plotএবং yহিসাবে ব্যাখ্যা করা হবে y.plot। স্মুথিং পদ্ধতি এবং সূত্র সম্পর্কে আরও তথ্য ফাংশনের সহায়তা পৃষ্ঠাতে আপনি stat_smooth()এটি ডিফল্ট স্ট্যাটাস ব্যবহার করে খুঁজে পেতে পারেন geom_smooth()

ggplot(data,aes(x.plot, y.plot)) +
  stat_summary(fun.data=mean_cl_normal) + 
  geom_smooth(method='lm', formula= y~x)

আপনি যদি ggplot()কলটিতে সরবরাহ করে একই x এবং y মানগুলি ব্যবহার করে থাকেন এবং লিনিয়ার রিগ্রেশন লাইনের প্লট করতে চান তবে আপনার ভিতরে সূত্রটি ব্যবহার করার দরকার নেই geom_smooth(), কেবল সরবরাহ করুন method="lm"

ggplot(data,aes(x.plot, y.plot)) +
  stat_summary(fun.data= mean_cl_normal) + 
  geom_smooth(method='lm')

46

আমি যেমনটি অনুধাবন করেছি, একাধিক লিনিয়ার রিগ্রেশন-এর জন্য আপনার যদি কোনও মডেল লাগানো থাকে তবে উল্লিখিত সমাধানটি কাজ করবে না।

আপনাকে একটি ডেটাফ্রেম হিসাবে ম্যানুয়ালি আপনার লাইন তৈরি করতে হবে যাতে আপনার মূল ডেটাফ্রেমের (আপনার ক্ষেত্রে data) জন্য পূর্বাভাসিত মান রয়েছে ।

এটি দেখতে এটি দেখতে হবে:

# read dataset
df = mtcars

# create multiple linear model
lm_fit <- lm(mpg ~ cyl + hp, data=df)
summary(lm_fit)

# save predictions of the model in the new data frame 
# together with variable you want to plot against
predicted_df <- data.frame(mpg_pred = predict(lm_fit, df), hp=df$hp)

# this is the predicted line of multiple linear regression
ggplot(data = df, aes(x = mpg, y = hp)) + 
  geom_point(color='blue') +
  geom_line(color='red',data = predicted_df, aes(x=mpg_pred, y=hp))

একাধিক এলআর

# this is predicted line comparing only chosen variables
ggplot(data = df, aes(x = mpg, y = hp)) + 
  geom_point(color='blue') +
  geom_smooth(method = "lm", se = FALSE)

একক এলআর


1
কনভেনশনটি হ'ল lm (y ~ x) for এক্স 'অক্ষরে আপনি যে পরিবর্তনশীলটি' ভবিষ্যদ্বাণী করছেন 'সেহেতু এটি পড়ার জন্য আমি কিছুটা ফিরলাম। দুর্দান্ত উত্তর যদিও।
রঙিন

14

সুস্পষ্ট সমাধানটি ব্যবহার করে geom_abline:

geom_abline(slope = data.lm$coefficients[2], intercept = data.lm$coefficients[1])

কোথায় data.lmএকটি lmঅবজেক্ট, এবং data.lm$coefficientsদেখতে এরকম কিছু দেখাচ্ছে:

data.lm$coefficients
(Intercept)    DepDelay 
  -2.006045    1.025109 

অনুশীলনে আইডটিকাল stat_functionএক্সের ক্রিয়াকলাপ হিসাবে রিগ্রেশন লাইন প্লট করতে ব্যবহার করে এটি ব্যবহার করে predict:

stat_function(fun = function(x) predict(data.lm, newdata = data.frame(DepDelay=x)))

এটি একটু কম দক্ষ কারণ ডিফল্ট n=101পয়েন্টগুলি গণনা করা হয় তবে এটি আরও নমনীয় যেহেতু এটি যে কোনও মডেল সমর্থন করে predictযেমন npregপ্যাকেজ এনপি থেকে অ-লিনিয়ার হিসাবে পূর্বাভাস বক্ররেখার পরিকল্পনা করবে ।

দ্রষ্টব্য: আপনি যদি ব্যবহার করেন scale_x_continuousবা scale_y_continuousকিছু মানগুলি কাটঅফ হতে পারে এবং এভাবে geom_smoothসঠিকভাবে কাজ নাও করতে পারে। ব্যবহার করুন coord_cartesianপরিবর্তে জুম


2
এবং তাই আপনি কখনই আপনার সূত্রগুলি অর্ডার করার জন্য বা +0নাম ব্যবহার করতে পারেন এমন একটি যুক্ত করার বিষয়ে চিন্তা করবেন না । data.lm$coefficients[['(Intercept)']]এবং data.lm$coefficients[['DepDelay']]
ইউফোস

(প্রায়) সর্বদা (Intercept)প্রথম তালিকাভুক্ত করা হবে। নামগুলি কোড পরিষ্কার করে।
Qwr

আমি মনে করি এটি সেরা উত্তর - এটি সবচেয়ে বহুমুখী।
অ্যারেঞ্জডাভিস

4

আমি একটি ব্লগে এই ফাংশনটি খুঁজে পেয়েছি

 ggplotRegression <- function (fit) {

    `require(ggplot2)

    ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) + 
      geom_point() +
      stat_smooth(method = "lm", col = "red") +
      labs(title = paste("Adj R2 = ",signif(summary(fit)$adj.r.squared, 5),
                         "Intercept =",signif(fit$coef[[1]],5 ),
                         " Slope =",signif(fit$coef[[2]], 5),
                         " P =",signif(summary(fit)$coef[2,4], 5)))
    }`

একবার আপনি ফাংশনটি লোড করলে আপনি সহজেই পারতেন

ggplotRegression(fit)

আপনিও যেতে পারেন ggplotregression( y ~ x + z + Q, data)

আশাকরি এটা সাহায্য করবে.


2

আপনি যদি অন্যান্য ধরণের মডেলগুলিতে ফিট করতে চান তবে লজিস্টিক মডেলগুলি ব্যবহার করে একটি ডোজ-প্রতিক্রিয়া বক্রের মতো আপনার যদি কোনও স্মুথ রিগ্রেশন রেখা থাকতে চান তবে ফাংশনটির পূর্বাভাস সহ আরও ডেটা পয়েন্ট তৈরি করতে হবে:

ফিট: আপনার লজিস্টিক রিগ্রেশন কার্ভের ফিট fit

#Create a range of doses:
mm <- data.frame(DOSE = seq(0, max(data$DOSE), length.out = 100))
#Create a new data frame for ggplot using predict and your range of new 
#doses:
fit.ggplot=data.frame(y=predict(fit, newdata=mm),x=mm$DOSE)

ggplot(data=data,aes(x=log10(DOSE),y=log(viability)))+geom_point()+
geom_line(data=fit.ggplot,aes(x=log10(x),y=log(y)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.