রিগ্রেশন লাইন সমীকরণ এবং গ্রাফটিতে আর ^ 2 যুক্ত করুন


227

আমি অবাক করি কীভাবে রিগ্রেশন লাইনের সমীকরণ এবং আর ^ 2 যুক্ত করতে হয় ggplot। আমার কোডটি হ'ল:

library(ggplot2)

df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
p <- ggplot(data = df, aes(x = x, y = y)) +
            geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x) +
            geom_point()
p

যে কোনও সাহায্যের প্রশংসা করা হবে।


1
জন্য জাফরি গ্রাফিক্স, দেখতে latticeExtra::lmlineq()
জোশ

উত্তর:


234

এখানে একটি সমাধান

# GET EQUATION AND R-SQUARED AS STRING
# SOURCE: https://groups.google.com/forum/#!topic/ggplot2/1TgH-kG5XMA

lm_eqn <- function(df){
    m <- lm(y ~ x, df);
    eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, 
         list(a = format(unname(coef(m)[1]), digits = 2),
              b = format(unname(coef(m)[2]), digits = 2),
             r2 = format(summary(m)$r.squared, digits = 3)))
    as.character(as.expression(eq));
}

p1 <- p + geom_text(x = 25, y = 300, label = lm_eqn(df), parse = TRUE)

সম্পাদনা করুন। আমি কোথা থেকে এই কোডটি বেছে নিয়েছি উত্সটি বের করেছিলাম। Ggplot2 গুগল গ্রুপগুলিতে মূল পোস্টটির লিঙ্কটি এখানে

আউটপুট


1
annotateআমার সাথে আরও ভাল লেখার পাঠ্য পাওয়ার বিষয়ে জোনাস্রেডেলের মন্তব্যটি আমার মেশিনে সঠিক ছিল।
আইআরটিএফএম

2
এটি আমার মেশিনে পোস্ট আউটপুটের মতো কিছুই দেখায় না, যেখানে লেবেলটি ডাকা হয় তার চেয়ে অনেকবার ওভাররাইট করা হয়, ফলস্বরূপ একটি ঘন এবং ঝাপসা লেবেল পাঠ্য হয়। লেবেলগুলিকে একটি ডেটাতে পাঠানো হচ্ছে ra ফ্রেমে প্রথমে কাজ করে (নীচে একটি মন্তব্যে আমার পরামর্শ দেখুন
প্যাট্রিকটি

@ পেট্রিকটি: aes(এবং এর সাথে সম্পর্কিতটিকে সরিয়ে দিন )aesডেটাফ্রেম ভেরিয়েবলকে ভিজ্যুয়াল ভেরিয়েবলগুলিতে ম্যাপিংয়ের জন্য - এটির এখানে প্রয়োজন নেই, যেহেতু কেবলমাত্র একটি উদাহরণ রয়েছে, তাই আপনি এগুলি সমস্ত মূল geom_textকলটিতে রাখতে পারেন। আমি উত্তরে এডিট করব।
নট 101

এই সমাধানটির সাথে সমস্যাটি মনে হচ্ছে, যে যদি ডেটাসেটটি বড় হয় (আমার ছিল 370000 পর্যবেক্ষণ) ফাংশনটি ব্যর্থ বলে মনে হচ্ছে। আমি @kdauria থেকে সমাধানটি সুপারিশ করব যা একই কাজ করে তবে অনেক দ্রুত।
বেনিয়ামিন

3
যারা আর 2 এবং সমীকরণের পরিবর্তে আর এবং পি মান চান: eq <- বিকল্প (italic (r) ~ "=" ~ মূল্যবৃদ্ধি * "," ~ ইটালিক (পি) = "=" ~ মান, তালিকা (মূল্যায়ন = স্প্রিন্টফ) ("% .2f", সাইন (কোফ (এম) [2]) * স্কয়ার্ট (সারাংশ (এম) $ r.squared)), প্যাভেলু = ফর্ম্যাট (সারসংক্ষেপ (এম) e সহগ [২,৪], সংখ্যা = ২ )))
জেরি টি

135

আমি stat_poly_eq()আমার প্যাকেজে ggpmiscএমন একটি পরিসংখ্যান অন্তর্ভুক্ত করেছি যা এই উত্তরটির অনুমতি দেয়:

library(ggplot2)
library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y)) +
   geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
   stat_poly_eq(formula = my.formula, 
                aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), 
                parse = TRUE) +         
   geom_point()
p

এখানে চিত্র বর্ণনা লিখুন

এই পরিসংখ্যানটি কোনও অনুপস্থিত শর্তাদি ছাড়াই কোনও বহুপদী সাথে কাজ করে এবং আশা করি সাধারণভাবে কার্যকর হওয়ার জন্য যথেষ্ট নমনীয়তা রয়েছে। আর ^ 2 বা সমন্বিত আর R 2 লেবেলগুলি lm () লাগানো কোনও মডেল সূত্রের সাথে ব্যবহার করা যেতে পারে। একটি ggplot পরিসংখ্যান হওয়ায় এটি দল এবং দিকগুলির সাথে প্রত্যাশার সাথে আচরণ করে।

'Ggpmisc' প্যাকেজটি CRAN এর মাধ্যমে উপলব্ধ।

সংস্করণ 0.2.6 সবেমাত্র CRAN- এ গৃহীত হয়েছিল।

এটি @ শ্যাববিচেফ এবং @ এম ইয়াসেন208 দ্বারা মন্তব্যগুলিকে সম্বোধন করে।

@ এম ইয়াসেন208 এটি কীভাবে টুপি যুক্ত করবেন তা দেখায় ।

library(ggplot2)
library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y)) +
   geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
   stat_poly_eq(formula = my.formula,
                eq.with.lhs = "italic(hat(y))~`=`~",
                aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), 
                parse = TRUE) +         
   geom_point()
p

এখানে চিত্র বর্ণনা লিখুন

@ শ্যাববিচেফ এখন অক্ষ-লেবেলের জন্য ব্যবহৃত সমীকরণের সাথে ভেরিয়েবলগুলি মেলা সম্ভব। প্রতিস্থাপন করতে এক্স বলতে সঙ্গে z- র এবং Y দিয়ে ব্যবহার হবে:

p <- ggplot(data = df, aes(x = x, y = y)) +
   geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
   stat_poly_eq(formula = my.formula,
                eq.with.lhs = "italic(h)~`=`~",
                eq.x.rhs = "~italic(z)",
                aes(label = ..eq.label..), 
                parse = TRUE) + 
   labs(x = expression(italic(z)), y = expression(italic(h))) +          
   geom_point()
p

এখানে চিত্র বর্ণনা লিখুন

এই সাধারণ আর পার্সড এক্সপ্রেশন হিসাবে গ্রীক অক্ষরগুলি এখন সমীকরণের lhs এবং rh উভয় ক্ষেত্রে ব্যবহার করা যেতে পারে।

[2017-03-08] @ সমালোচনা এবং আর 2-লেবেলের মধ্যে কীভাবে কমা যুক্ত করবেন তা দেখিয়ে মূল প্রশ্নটি আরও সুনির্দিষ্টভাবে সমাধান করার জন্য @ এলারি সম্পাদনা করুন।

p <- ggplot(data = df, aes(x = x, y = y)) +
  geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
  stat_poly_eq(formula = my.formula,
               eq.with.lhs = "italic(hat(y))~`=`~",
               aes(label = paste(..eq.label.., ..rr.label.., sep = "*plain(\",\")~")), 
               parse = TRUE) +         
  geom_point()
p

এখানে চিত্র বর্ণনা লিখুন

[2019-10-20] @ হেলেন। আমি গ্রুপিংয়ের stat_poly_eq()সাথে ব্যবহারের উদাহরণ নীচে দিই ।

library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 20 * c(0, 1) + 3 * df$x + rnorm(100, sd = 40)
df$group <- factor(rep(c("A", "B"), 50))
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y, colour = group)) +
  geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
  stat_poly_eq(formula = my.formula, 
               aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), 
               parse = TRUE) +         
  geom_point()
p

p <- ggplot(data = df, aes(x = x, y = y, linetype = group)) +
  geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
  stat_poly_eq(formula = my.formula, 
               aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), 
               parse = TRUE) +         
  geom_point()
p

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

[২০২০-০১-২১] @ হারমান এটি প্রথম দর্শনে কিছুটা স্ব-স্বজ্ঞাত হতে পারে তবে গোষ্ঠী ব্যবহার করার সময় কোনও একক সমীকরণ অর্জন করতে গ্রাফিক্সের ব্যাকরণ অনুসরণ করা প্রয়োজন। হয় ম্যাপিংকে সীমাবদ্ধ করুন যা পৃথক স্তরগুলিতে গোষ্ঠীকরণ তৈরি করে (নীচে দেখানো হয়েছে) বা ডিফল্ট ম্যাপিং রাখুন এবং স্তরটিতে স্থায়ী মান সহ ওভাররাইড করুন যেখানে আপনি দলবদ্ধকরণ চান না (যেমন colour = "black")।

পূর্ববর্তী উদাহরণ থেকে অবিরত।

p <- ggplot(data = df, aes(x = x, y = y)) +
  geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
  stat_poly_eq(formula = my.formula, 
               aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), 
               parse = TRUE) +         
  geom_point(aes(colour = group))
p

এখানে চিত্র বর্ণনা লিখুন

[২০২০-০১-২২] সম্পূর্ণতার জন্য দৃষ্টিকোণগুলির সাথে একটি উদাহরণ, তা প্রমাণ করে যে এই ক্ষেত্রেও গ্রাফিক্সের ব্যাকরণের প্রত্যাশা পূরণ হয়েছে।

library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 20 * c(0, 1) + 3 * df$x + rnorm(100, sd = 40)
df$group <- factor(rep(c("A", "B"), 50))
my.formula <- y ~ x

p <- ggplot(data = df, aes(x = x, y = y)) +
  geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
  stat_poly_eq(formula = my.formula, 
               aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), 
               parse = TRUE) +         
  geom_point() +
  facet_wrap(~group)
p

এখানে চিত্র বর্ণনা লিখুন


1
এটি লক্ষ করা উচিত যে xএবং yসূত্রটিতে প্লটের স্তরগুলির ডেটা xএবং yডেটা উল্লেখ করা হয় , এবং প্রয়োজন হয় না যে সময়ে সেই সুযোগটি তৈরি করা my.formulaহয় constructed সুতরাং সূত্র সর্বদা এক্স এবং y ভেরিয়েবল ব্যবহার করা উচিত ?
shabbychef

এটি অত্যন্ত সত্য xএবং yএই নান্দনিকতার সাথে ম্যাপযুক্ত যে কোনও ভেরিয়েবলগুলি উল্লেখ করুন। জিওম_স্মোথ () এবং গ্রাফিক্সের ব্যাকরণ কীভাবে কাজ করে সে সম্পর্কেও এটি প্রত্যাশা। এটি ডেটা ফ্রেমের মধ্যে বিভিন্ন নাম ব্যবহার করা আরও পরিষ্কার হতে পারে তবে আমি তাদের এটিকে মূল প্রশ্নের মতোই রেখেছি।
পেদ্রো আফালো

এর পরবর্তী সংস্করণে সম্ভব হবে ggpmisc। পরামর্শের জন্য ধন্যবাদ!
পেড্রো আফালো

3
গুড পয়েন্ট @ এলারি! এটি আর এর পার্স () ফাংশন কীভাবে কাজ করে তা সম্পর্কিত। বিচার এবং ত্রুটির মাধ্যমে আমি খুঁজে পেয়েছি যে aes(label = paste(..eq.label.., ..rr.label.., sep = "*plain(\",\")~"))কাজটি করে।
পেড্রো অ্যাফালো

1
@ হারমানথুথ্রোট সাধারণত একটি রিগ্রেশন এর জন্য আর 2 পছন্দ করা হয়, সুতরাং এর দ্বারা প্রাপ্ত ডেটাতে কোনও পূর্বনির্ধারিত r.label নেই stat_poly_eq()। আপনি stat_fit_glance()প্যাকেজ 'ggpmisc' থেকেও ব্যবহার করতে পারেন , যা R2 কে একটি সংখ্যার মান হিসাবে প্রদান করে। সহায়তা পৃষ্ঠায় উদাহরণগুলি দেখুন এবং এর stat(r.squared)দ্বারা প্রতিস্থাপন করুন sqrt(stat(r.squared))
পেড্রো আফালো

99

stat_smoothএকটি নতুন ফাংশন তৈরি করতে আমি উত্স এবং সম্পর্কিত ফাংশনগুলির কয়েকটি লাইন পরিবর্তন করেছি যা ফিট সমীকরণ এবং আর স্কোয়ার মান যুক্ত করে। এটি ফেসবুকেও কাজ করবে!

library(devtools)
source_gist("524eade46135f6348140")
df = data.frame(x = c(1:100))
df$y = 2 + 5 * df$x + rnorm(100, sd = 40)
df$class = rep(1:2,50)
ggplot(data = df, aes(x = x, y = y, label=y)) +
  stat_smooth_func(geom="text",method="lm",hjust=0,parse=TRUE) +
  geom_smooth(method="lm",se=FALSE) +
  geom_point() + facet_wrap(~class)

এখানে চিত্র বর্ণনা লিখুন

আমি @ রামনাথের উত্তরে কোডটি ব্যবহার করে এই সমীকরণটি ফর্ম্যাট করেছিলাম। stat_smooth_funcফাংশন খুব শক্তসমর্থ নয়, কিন্তু তখন তার সঙ্গে চারপাশে খেলা কঠিন হওয়া উচিত নয়।

https://gist.github.com/kdauria/524eade46135f6348140 । আপনি ggplot2যদি ত্রুটি পান তবে আপডেট করার চেষ্টা করুন ।


2
অনেক ধন্যবাদ. এটি কেবল রূপগুলির জন্য নয়, এমনকি গোষ্ঠীগুলির জন্যও কাজ করে। অংশবিশেষের জন্য, উদাহরণস্বরূপ stat_smooth_func(mapping=aes(group=cut(x.val,c(-70,-20,0,20,50,130))),geom="text",method="lm",hjust=0,parse=TRUE), স্ট্যাকওভারফ্লো.com
জুলিয়ান

1
@ আলেয়ান, এই লাইনগুলি পরিবর্তন করুন: gist.github.com/kdauria/… আপনার পছন্দ অনুসারে। তারপরে sourceআপনার স্ক্রিপ্টে পুরো ফাইল।
kdauria

1
@ কেডৌরিয়া যদি আমার প্রতিটি ফেসট_আর্যাপে বিভিন্ন সমীকরণ হয় এবং আমার প্রতিটি ফেসব্যাপে বিভিন্ন y_value থাকে। কোনও পরামর্শ কীভাবে সমীকরণের অবস্থান ঠিক করবেন? আমি এই উদাহরণে ব্যবহার hjust, vjust এবং কোণের বেশ কয়েকটি বিকল্প চেষ্টা dropbox.com/s/9lk9lug2nwgno2l/R2_facet_wrap.docx?dl=0 কিন্তু আমি facet_wrap প্রতিটি একই স্তরের এ সব সমীকরণ আনতে না পারে
চকচকে

3
@aelwan, সমীকরণের অবস্থান এই লাইন দ্বারা নির্ধারিত হয়: gist.github.com/kdauria/... । আমি সংক্ষেপে ফাংশনটি তৈরি করেছি xposএবং yposযুক্তি দিয়েছি । সুতরাং আপনি যদি সমস্ত সমীকরণকে ওভারল্যাপ করতে চান তবে কেবল সেট করুন xposএবং ypos। অন্যথায়, xposএবং yposতথ্য থেকে গণনা করা হয়। আপনি যদি কোনও ফ্যানসিয়ার চান, তবে ফাংশনের ভিতরে কিছু যুক্তি যুক্ত করা খুব কঠিন হওয়া উচিত নয়। উদাহরণস্বরূপ, সম্ভবত আপনি গ্রাফের কোন অংশে সবচেয়ে খালি জায়গা রয়েছে তা নির্ধারণ করতে কোনও ফাংশন লিখতে পারেন এবং সেখানে ফাংশনটি রেখে দিতে পারেন।
kdauria

6
আমি সোর্স_জিস্টের সাথে একটি ত্রুটির মধ্যে পড়েছিলাম: r_files [[যা]] এ ত্রুটি: অবৈধ সাবস্ক্রিপ্ট টাইপ 'বন্ধকরণ'। : সমাধান জন্য এই পোস্ট দেখতে stackoverflow.com/questions/38345894/r-source-gist-not-working
Matifou

73

আমি রামনাথের পোস্টকে ক) এ সংশোধন করেছি) আরও জেনেরিক তৈরি করি যাতে এটি ডেটা ফ্রেমের পরিবর্তে লিনিয়ার মডেলটিকে প্যারামিটার হিসাবে গ্রহণ করে এবং খ) আরও সঠিকভাবে নেতিবাচক প্রদর্শন করে disp

lm_eqn = function(m) {

  l <- list(a = format(coef(m)[1], digits = 2),
      b = format(abs(coef(m)[2]), digits = 2),
      r2 = format(summary(m)$r.squared, digits = 3));

  if (coef(m)[2] >= 0)  {
    eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,l)
  } else {
    eq <- substitute(italic(y) == a - b %.% italic(x)*","~~italic(r)^2~"="~r2,l)    
  }

  as.character(as.expression(eq));                 
}

ব্যবহারের পরিবর্তন হবে:

p1 = p + geom_text(aes(x = 25, y = 300, label = lm_eqn(lm(y ~ x, df))), parse = TRUE)

17
এটি দুর্দান্ত দেখাচ্ছে! তবে আমি একাধিক দিকগুলিতে জিওম_পয়েন্টগুলি ষড়যন্ত্র করছি, যেখানে দিকের ভেরিয়েবলের ভিত্তিতে ডিএফ পৃথক হয়। আমি কেমন করে ঐটি করি?
bshor

24
জয়ডেনের সমাধানটি বেশ ভালভাবে কাজ করে তবে টাইপফেসটি দেখতে খুব কুরুচিপূর্ণ। আমি এটিতে এই ব্যবহারটি পরিবর্তন করার পরামর্শ দিচ্ছি: p1 = p + annotate("text", x = 25, y = 300, label = lm_eqn(lm(y ~ x, df)), colour="black", size = 5, parse=TRUE)সম্পাদনা করুন: এটি আপনার কিংবদন্তিতে প্রদর্শিত অক্ষরগুলির সাথে আপনার যে কোনও সমস্যা সমাধান করতে পারে res
জোনাস রাইডল

1
@ জোনাস, কোনও কারণে আমি পাচ্ছি "cannot coerce class "lm" to a data.frame"। এই বিকল্পটি কাজ করে: df.labs <- data.frame(x = 25, y = 300, label = lm_eqn(df))এবং p <- p + geom_text(data = df.labs, aes(x = x, y = y, label = label), parse = TRUE)
প্যাট্রিকটি

1
@ পেট্রিকটি - আপনি যদি lm_eqn(lm(...))রামনাথের সমাধান নিয়ে ফোন করেন তবে এটির একটি ত্রুটি বার্তা । আপনি সম্ভবত এটি চেষ্টা করার পরেও এটি চেষ্টা করেছিলেন তবে আপনি নতুন করে সংজ্ঞা দিয়েছেন তা নিশ্চিত করতে ভুলে গেছেনlm_eqn
হামি

@ পেট্রিকটি: আপনি কি নিজের উত্তরটি আলাদা উত্তর করতে পারবেন? আমি এটা ভোগ করতে খুশি হবে!
জেলেনাউকলিনা

11

@ রমনাথ সলিউশনকে সত্যই ভালোবাসি। রিগ্রেশন সূত্রটি কাস্টমাইজ করার জন্য ব্যবহারের অনুমতি দেওয়ার জন্য (y এবং x এর পরিবর্তে আক্ষরিক ভেরিয়েবলের নাম হিসাবে স্থির), এবং প্রিন্টআউটে পি-মান যুক্ত করে (@ জেরি টি মন্তব্য করেছেন), এখানে মোড রয়েছে:

lm_eqn <- function(df, y, x){
    formula = as.formula(sprintf('%s ~ %s', y, x))
    m <- lm(formula, data=df);
    # formating the values into a summary string to print out
    # ~ give some space, but equal size and comma need to be quoted
    eq <- substitute(italic(target) == a + b %.% italic(input)*","~~italic(r)^2~"="~r2*","~~p~"="~italic(pvalue), 
         list(target = y,
              input = x,
              a = format(as.vector(coef(m)[1]), digits = 2), 
              b = format(as.vector(coef(m)[2]), digits = 2), 
             r2 = format(summary(m)$r.squared, digits = 3),
             # getting the pvalue is painful
             pvalue = format(summary(m)$coefficients[2,'Pr(>|t|)'], digits=1)
            )
          )
    as.character(as.expression(eq));                 
}

geom_point() +
  ggrepel::geom_text_repel(label=rownames(mtcars)) +
  geom_text(x=3,y=300,label=lm_eqn(mtcars, 'hp','wt'),color='red',parse=T) +
  geom_smooth(method='lm')

এখানে চিত্র বর্ণনা লিখুন দুর্ভাগ্যক্রমে, এটি ফেস_আর্যাপ বা ফেস_গ্রিডের সাথে কাজ করে না।


খুব ঝরঝরে, আমি এখানে উল্লেখ করেছি । একটি ব্যাখ্যা - ggplot(mtcars, aes(x = wt, y = mpg, group=cyl))+জেম_পয়েন্ট () এর আগে আপনার কোডটি কি অনুপস্থিত ? একটি আধা সংশ্লিষ্ট প্রশ্ন - যদি আমরা পড়ুন এইচপি এবং WT মধ্যে aes()ggplot জন্য, আমরা তারপর পারেন দখল তাদের কলে ব্যবহার করতে lm_eqn, অতএব আমরা শুধুমাত্র একটি স্থানে কোডে আছে? আমি জানি আমরা xvar = "hp"ggplot () কল করার আগে সেটআপ করতে পারতাম এবং এইচপি প্রতিস্থাপন করতে উভয় স্থানে xvar ব্যবহার করতে পারতাম , তবে এটি মনে হয় এটি অপ্রয়োজনীয় হওয়া উচিত।
মার্ক নিল

9

জিজিপুবার ব্যবহার :

library(ggpubr)

# reproducible data
set.seed(1)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)

# By default showing Pearson R
ggscatter(df, x = "x", y = "y", add = "reg.line") +
  stat_cor(label.y = 300) +
  stat_regline_equation(label.y = 280)

এখানে চিত্র বর্ণনা লিখুন

# Use R2 instead of R
ggscatter(df, x = "x", y = "y", add = "reg.line") +
  stat_cor(label.y = 300, 
           aes(label = paste(..rr.label.., ..p.label.., sep = "~`,`~"))) +
  stat_regline_equation(label.y = 280)

## compare R2 with accepted answer
# m <- lm(y ~ x, df)
# round(summary(m)$r.squared, 2)
# [1] 0.85

এখানে চিত্র বর্ণনা লিখুন


আপনি একটি নম্বর নির্দিষ্ট করার জন্য একটি ঝরঝরে প্রোগ্রামেটিক উপায় দেখেছেন label.y?
মার্ক নিল

@ মারকনিয়েল সম্ভবত y এর সর্বাধিক সন্ধান করুন তারপরে 0.8 দিয়ে গুণ করুন। label.y = max(df$y) * 0.8
zx8754

1
@ মার্কনিল ভাল পয়েন্টস, সম্ভবত গিটিহাব জিজিপুবারে বৈশিষ্ট্য অনুরোধ হিসাবে ইস্যুটি জমা দিন।
zx8754

1
অটো লোকেশনে ইস্যু এখানে
মার্ক নিল

1
@ zx8754, আপনার প্লটে এটি rho দেখানো হয়েছে এবং R² নয়, আরওকে দেখানোর কোনও সহজ উপায়?
ম্যাথমার

5

এখানে সবার জন্য সর্বাধিক সহজ কোড

নোট: পিয়ারসন এর Rho প্রদর্শন এবং না R ^ 2।

library(ggplot2)
library(ggpubr)

df <- data.frame(x = c(1:100)
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
p <- ggplot(data = df, aes(x = x, y = y)) +
        geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x) +
        geom_point()+
        stat_cor(label.y = 35)+ #this means at 35th unit in the y axis, the r squared and p value will be shown
        stat_regline_equation(label.y = 30) #this means at 30th unit regresion line equation will be shown

p

আমার নিজস্ব ডেটাসেটের সাথে এরকম একটি উদাহরণ


উপরের মতো একই সমস্যা, আপনার প্লটটিতে এটি আরও দেখানো হয়েছে, আরও নয়!
ম্যাথমার

3

এই উত্তরে প্রদত্ত সমীকরণ শৈলীর দ্বারা অনুপ্রাণিত হয়ে আরও জেনেরিক পদ্ধতির (বিকল্প হিসাবে একাধিক প্রেডিকটার + ল্যাটেক্স আউটপুট) হতে পারে:

print_equation= function(model, latex= FALSE, ...){
    dots <- list(...)
    cc= model$coefficients
    var_sign= as.character(sign(cc[-1]))%>%gsub("1","",.)%>%gsub("-"," - ",.)
    var_sign[var_sign==""]= ' + '

    f_args_abs= f_args= dots
    f_args$x= cc
    f_args_abs$x= abs(cc)
    cc_= do.call(format, args= f_args)
    cc_abs= do.call(format, args= f_args_abs)
    pred_vars=
        cc_abs%>%
        paste(., x_vars, sep= star)%>%
        paste(var_sign,.)%>%paste(., collapse= "")

    if(latex){
        star= " \\cdot "
        y_var= strsplit(as.character(model$call$formula), "~")[[2]]%>%
            paste0("\\hat{",.,"_{i}}")
        x_vars= names(cc_)[-1]%>%paste0(.,"_{i}")
    }else{
        star= " * "
        y_var= strsplit(as.character(model$call$formula), "~")[[2]]        
        x_vars= names(cc_)[-1]
    }

    equ= paste(y_var,"=",cc_[1],pred_vars)
    if(latex){
        equ= paste0(equ," + \\hat{\\varepsilon_{i}} \\quad where \\quad \\varepsilon \\sim \\mathcal{N}(0,",
                    summary(MetamodelKdifEryth)$sigma,")")%>%paste0("$",.,"$")
    }
    cat(equ)
}

modelযুক্তি একটি আশা lmবস্তু, latexযুক্তি সহজ অক্ষর বা একটি ক্ষীর-Formated সমীকরণ জন্য জিজ্ঞাসা করতে একটি বুলিয়ান, এবং ...যুক্তি তার মান পাস formatফাংশন।

আমি এটিকে ক্ষীর হিসাবে আউটপুট করার জন্য একটি বিকল্পও যুক্ত করেছি যাতে আপনি এই ফাংশনটি এই জাতীয় একটি রমারডাউনতে ব্যবহার করতে পারেন:


```{r echo=FALSE, results='asis'}
print_equation(model = lm_mod, latex = TRUE)
```

এখন এটি ব্যবহার:

df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
df$z <- 8 + 3 * df$x + rnorm(100, sd = 40)
lm_mod= lm(y~x+z, data = df)

print_equation(model = lm_mod, latex = FALSE)

এই কোডটি দেয়: y = 11.3382963933174 + 2.5893419 * x + 0.1002227 * z

এবং যদি আমরা প্যারামিটারগুলি 3 টি করে গোল করে একটি ক্ষীর সমীকরণের জন্য জিজ্ঞাসা করি:

print_equation(model = lm_mod, latex = TRUE, digits= 3)

এই ফলন: ক্ষীর সমীকরণ


0

আমার সন্দেহ আছে, সমীকরণে ভেটার জন্য টেস্টেস্টের একটি স্বাক্ষরীয় পরিসংখ্যান কীভাবে রাখবেন ggpmisc::stat_poly_eq()?

উদা: expression(hat(Y)== 0000*"**"+0000*"x"*"*"-0000*"x"^2*"**"~~~~"R"^2*":"~~0.000)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.