বহুবর্ষীয় মডেল ফিট থেকে সহগের কীভাবে ব্যাখ্যা করবেন?


36

আমি আমার কাছে থাকা কিছু ডেটাতে দ্বিতীয় ক্রমের বহুবর্ষীয় ফিট তৈরি করার চেষ্টা করছি। আসুন আমি বলি যে আমি এইগুলির সাথে এটি ফিট করে ggplot():

ggplot(data, aes(foo, bar)) + geom_point() + 
       geom_smooth(method="lm", formula=y~poly(x, 2))

আমি পাই:

স্ক্র্যাটারপ্লোটে আত্মবিশ্বাস ব্যান্ডের সাথে প্যারাবলিক ফিটের প্লট

সুতরাং, একটি দ্বিতীয় ক্রম ফিট বেশ ভাল কাজ করে। আমি আর দিয়ে এটি গণনা করি:

summary(lm(data$bar ~ poly(data$foo, 2)))

এবং আমি পেয়েছি:

lm(formula = data$bar ~ poly(data$foo, 2))
# ...
# Coefficients:
#                     Estimate Std. Error t value Pr(>|t|)    
# (Intercept)         3.268162   0.008282 394.623   <2e-16 ***
# poly(data$foo, 2)1 -0.122391   0.096225  -1.272    0.206
# poly(data$foo, 2)2  1.575391   0.096225  16.372   <2e-16 ***
# ....

এখন, আমি আমার ফিটের জন্য সূত্রটি ধরে নেব:

bar=3.2680.122foo+1.575foo2

তবে এটি আমাকে ভুল মান দেয়। উদাহরণস্বরূপ, 3 থাকার সাথে সাথে আমি 3.15 এর কাছাকাছি কিছু হওয়ার আশা করব । তবে উপরের সূত্রটি getোকানো আমি পাই: foobar

bar=3.2680.1223+1.57532=17,077

শেষ ঘন্টা? আমি কি মডেলের সহগগুলি ভুলভাবে ব্যাখ্যা করছি?


2
এই প্রশ্নের বেশ কয়েকটি থ্রেডে উত্তর দেওয়া হয়েছে যা অরথোগোনাল বহুবর্ষের
শুশুক

6
@ হুবুয়ার যদি আমি জানতাম যে সমস্যাটি "অরথোগোনাল বহুবচন" এর সাথে রয়েছে তবে আমি সম্ভবত একটি উত্তর খুঁজে পেতে পারতাম। তবে আপনি কী অনুসন্ধান করবেন তা যদি না জানেন তবে এটি কিছুটা শক্ত।
ব্যবহারকারীর 13907

2
আপনি বহুগুলিতে অনুসন্ধান করে উত্তরগুলিও খুঁজে পেতে পারেন যা আপনার কোডে বিশিষ্টভাবে প্রদর্শিত হয়। আমি দুটি কারণে মন্তব্যে এই জাতীয় তথ্য রেখেছি: (1) লিঙ্কগুলি ভবিষ্যতের পাঠকদের পাশাপাশি আপনার নিজের এবং (২) তারা কীভাবে আমাদের (কিছুটা আইডিসিঙ্ক্র্যাটিক) অনুসন্ধান সিস্টেমকে শোষণ করতে পারে তা দেখাতে সহায়তা করতে পারে।
শুশুক

7
আপনি প্রথমে আর polyটাইপ ?polyনা করে আপনার ব্যবহার সম্পর্কিত একটি প্রশ্ন পোস্ট করেছেন ? এটি বৃহত বন্ধুত্বপূর্ণ চিঠিতে শীর্ষে ' গণনা অর্থোগোনাল বহুবচন ' বলে ।
গ্লেন_বি -রিনস্টেট মনিকা

4
@ গ্লেন_ বি হ্যাঁ, আমি সিনট্যাক্সটি বুঝতে টাইপ করেছি did ?polyস্বীকারযোগ্য, এর পিছনে ধারণাগুলি সম্পর্কে আমার খুব কম জ্ঞান আছে। আমি জানতাম না যে অন্য কিছু আছে (বা "সাধারণ" বহুপদী এবং অরথোগোনাল বহুবর্ষের মধ্যে এত বড় পার্থক্য), এবং আমি যে সমস্ত উদাহরণ অনলাইনে poly()ফিটিংয়ের জন্য ব্যবহার করেছি , বিশেষত ggplot- তা কেন আমি কেবল এটি ব্যবহার করব না এবং ফলাফল "ভুল" হলে বিভ্রান্ত হবেন? মনে মনে, আমি গণিতে দক্ষ নই others আমি অন্যকে যা দেখেছি তা কেবল প্রয়োগ করছি এবং এটি বোঝার চেষ্টা করছি।
ব্যবহারকারী 13907

উত্তর:


55

আমার বিশদ উত্তরটি নীচে, তবে এই ধরণের প্রশ্নের সাধারণ (অর্থাত্ আসল) উত্তরটি হল: 1) পরীক্ষা করা, চারপাশে স্ক্রু করুন, ডেটা দেখুন, আপনি যা কিছু করেন না কেন কম্পিউটারটি ভাঙ্গতে পারবেন না, তাই। । । পরীক্ষা; বা 2) আরটিএফএম

এখানে এমন কিছু Rকোড রয়েছে যা কমবেশি এই প্রশ্নটিতে চিহ্নিত সমস্যাটির প্রতিরূপ দেয়:

# This program written in response to a Cross Validated question
# http://stats.stackexchange.com/questions/95939/
# 
# It is an exploration of why the result from lm(y_x+I(x^2))
# looks so different from the result from lm(y~poly(x,2))

library(ggplot2)


epsilon <- 0.25*rnorm(100)
x       <- seq(from=1, to=5, length.out=100)
y       <- 4 - 0.6*x + 0.1*x^2 + epsilon

# Minimum is at x=3, the expected y value there is
4 - 0.6*3 + 0.1*3^2

ggplot(data=NULL,aes(x, y)) + geom_point() + 
       geom_smooth(method = "lm", formula = y ~ poly(x, 2))

summary(lm(y~x+I(x^2)))       # Looks right
summary(lm(y ~ poly(x, 2)))   # Looks like garbage

# What happened?
# What do x and x^2 look like:
head(cbind(x,x^2))

#What does poly(x,2) look like:
head(poly(x,2))

প্রথমটি lmপ্রত্যাশিত উত্তরটি দেয়:

Call:
lm(formula = y ~ x + I(x^2))

Residuals:
     Min       1Q   Median       3Q      Max 
-0.53815 -0.13465 -0.01262  0.15369  0.61645 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.92734    0.15376  25.542  < 2e-16 ***
x           -0.53929    0.11221  -4.806 5.62e-06 ***
I(x^2)       0.09029    0.01843   4.900 3.84e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.2241 on 97 degrees of freedom
Multiple R-squared:  0.1985,    Adjusted R-squared:  0.182 
F-statistic: 12.01 on 2 and 97 DF,  p-value: 2.181e-05

দ্বিতীয়টি lmবিজোড় কিছু দেয়:

Call:
lm(formula = y ~ poly(x, 2))

Residuals:
     Min       1Q   Median       3Q      Max 
-0.53815 -0.13465 -0.01262  0.15369  0.61645 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.24489    0.02241 144.765  < 2e-16 ***
poly(x, 2)1  0.02853    0.22415   0.127    0.899    
poly(x, 2)2  1.09835    0.22415   4.900 3.84e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.2241 on 97 degrees of freedom
Multiple R-squared:  0.1985,    Adjusted R-squared:  0.182 
F-statistic: 12.01 on 2 and 97 DF,  p-value: 2.181e-05

যেহেতু lmদুটি কলগুলিতে সমান তাই এটির যুক্তিগুলি lmভিন্ন are সুতরাং, আসুন আর্গুমেন্ট তাকান। স্পষ্টতই, yএকই। এটি অন্যান্য অংশ। আসুন প্রথম কলটিতে ডান হাতের দিকের চলকগুলিতে প্রথম কয়েকটি পর্যবেক্ষণগুলি দেখুন lm। প্রত্যাবর্তনের head(cbind(x,x^2))মত দেখাচ্ছে:

            x         
[1,] 1.000000 1.000000
[2,] 1.040404 1.082441
[3,] 1.080808 1.168146
[4,] 1.121212 1.257117
[5,] 1.161616 1.349352
[6,] 1.202020 1.444853

এটি প্রত্যাশা অনুযায়ী প্রথম কলামটি xএবং দ্বিতীয় কলামটি x^2lmপলির সাথে দ্বিতীয় কলটি কেমন ? প্রত্যাবর্তনের head(poly(x,2))মত দেখাচ্ছে:

              1         2
[1,] -0.1714816 0.2169976
[2,] -0.1680173 0.2038462
[3,] -0.1645531 0.1909632
[4,] -0.1610888 0.1783486
[5,] -0.1576245 0.1660025
[6,] -0.1541602 0.1539247

ঠিক আছে, এটা আসলে আলাদা। প্রথম কলামটি নয় x, এবং দ্বিতীয় কলামটি নয় x^2। সুতরাং, যাই হোক poly(x,2)না কেন এটি ফিরে আসে না xএবং x^2। যদি আমরা জানতে চাই polyতবে এটির সহায়তা ফাইলটি পড়ে আমরা শুরু করতে পারি। সুতরাং আমরা বলি help(poly)। বিবরণ বলে:

X এর নির্দিষ্ট পয়েন্ট x এর উপর ভিত্তি করে 1 ডিগ্রি পর্যন্ত অরথোগোনাল বহুভুজগুলি প্রদান বা মূল্যায়ন করে। এগুলি সমস্ত 0 ডিগ্রি ধ্রুবক বহুবর্ষের জন্য অরথগোনাল Al বিকল্পভাবে, কাঁচা বহুপদী মূল্যায়ন করুন।

এখন, হয় আপনি জানেন যে "অরথোগোনাল বহুবচন" কী বা আপনি তা করেন না। যদি আপনি তা না করেন তবে উইকিপিডিয়া বা বিং ব্যবহার করুন (গুগল নয় অবশ্যই, কারণ গুগল দুষ্ট --- অ্যাপলের মতো খারাপ নয়, স্বাভাবিকভাবেই, তবে এখনও খারাপ)। অথবা, আপনি সিদ্ধান্ত নিতে পারেন যে অर्थোগোনাল বহুবৈচিত্রগুলি কী তা আপনার যত্ন নেই। আপনি "কাঁচা পলিনোমিয়ালস" শব্দটি লক্ষ্য করতে পারেন এবং আপনি সাহায্যের ফাইলটিতে আরও কিছুটা নীচে লক্ষ্য করতে পারেন যা ডিফল্টরূপে সমান polyএকটি বিকল্প রয়েছে । এই দুটি বিবেচনাগুলি আপনাকে কোনটি ফিরে আসে তা চেষ্টা করার জন্য অনুপ্রাণিত করতে পারে :rawFALSEhead(poly(x, 2, raw=TRUE))

            1        2
[1,] 1.000000 1.000000
[2,] 1.040404 1.082441
[3,] 1.080808 1.168146
[4,] 1.121212 1.257117
[5,] 1.161616 1.349352
[6,] 1.202020 1.444853

এই আবিষ্কার দ্বারা উত্তেজিত (এটি এখন ঠিক আছে, হ্যাঁ?), আপনি চেষ্টা করতে পারেন summary(lm(y ~ poly(x, 2, raw=TRUE))) এই প্রত্যাবর্তন:

Call:
lm(formula = y ~ poly(x, 2, raw = TRUE))

Residuals:
     Min       1Q   Median       3Q      Max 
-0.53815 -0.13465 -0.01262  0.15369  0.61645 

Coefficients:
                        Estimate Std. Error t value Pr(>|t|)    
(Intercept)              3.92734    0.15376  25.542  < 2e-16 ***
poly(x, 2, raw = TRUE)1 -0.53929    0.11221  -4.806 5.62e-06 ***
poly(x, 2, raw = TRUE)2  0.09029    0.01843   4.900 3.84e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.2241 on 97 degrees of freedom
Multiple R-squared:  0.1985,    Adjusted R-squared:  0.182 
F-statistic: 12.01 on 2 and 97 DF,  p-value: 2.181e-05

উপরের উত্তরের কমপক্ষে দুটি স্তর রয়েছে। প্রথমে আমি আপনার প্রশ্নের উত্তর দিয়েছি। দ্বিতীয়ত এবং আরও গুরুত্বপূর্ণভাবে, আমি উদাহরণ দিয়েছিলাম যে কীভাবে আপনি নিজের মতো করে এই প্রশ্নের উত্তর দেওয়ার কথা ভাবেন। "কীভাবে প্রোগ্রাম করতে হয়" জানেন এমন প্রতিটি ব্যক্তি ষাট মিলিয়ন বারের মতো একটি অনুক্রমের মধ্য দিয়ে গেছে। এমনকি প্রোগ্রামিং এ লোকেরা যতটা হতাশাজনকভাবে খারাপ আমি ততক্ষণ এই ক্রমটি দিয়ে যাচ্ছি। কোড কাজ না করা স্বাভাবিক normal ফাংশনগুলি কী করে তা ভুল বুঝে নেওয়া স্বাভাবিক। এটির সাথে মোকাবিলা করার উপায় হ'ল চারপাশে স্ক্রু করা, পরীক্ষা করা, ডেটা দেখুন এবং আরটিএফএম। নিজেকে "নির্লিপ্তভাবে একটি রেসিপি অনুসরণ করা" মোড থেকে এবং "গোয়েন্দা" মোডে পান।


7
আমি মনে করি এটি একটি +6 প্রাপ্য। যখন সম্ভব হবে তখন আমি কয়েকদিনের মধ্যে মনে রাখার চেষ্টা করব। এফটিআর, আমি মনে করি এটি এতটা ব্যঙ্গাত্মক হওয়া উচিত নয়, তবে অরথগোনাল বহুবর্ষগুলি কীভাবে / তারা কীভাবে কাজ করে তা প্রদর্শন করা এবং আপনি এ জাতীয় জিনিসগুলি বের করার জন্য কী প্রক্রিয়াটি ব্যবহার করছেন তা দেখানো ভাল কাজ করে।
গাং - মনিকা পুনরায়

13
দুর্দান্ত উত্তর, আপনাকে ধন্যবাদ। যদিও আমি "আরটিএফএম" দ্বারা কিছুটা বিরক্ত হয়েছি (তবে এটি কেবলমাত্র আমি): সমস্যাটি হ'ল আমি যে সমস্ত পড়েছি তা কমপক্ষে আর-এ লিনিয়ার রিগ্রেশন করার ক্ষেত্রে মানুষ কখনও কখনও এটি করে, অন্যরাও তা করে। সত্যই, আমি অরথোগোনাল বহুবর্ষে উইকিপিডিয়া এন্ট্রি বুঝতে পারি না। আপনি যে সহগগুলি "ভুল" পেয়েছেন তা যদি কেউ এই প্রতিরোধের জন্য কেন ব্যবহার করবে তা আমার কাছে ঘটে না। আমি কোনও গণিতবিদ নই - আমি রেসিপিগুলি অনুসরণ করার চেষ্টা করি কারণ আমি কোনও শিক্ষিত রান্না নই, তবে তবুও আমার কিছু খাওয়া দরকার।
ব্যবহারকারী 13907

12
@ ব্যবহারকারী 13907, এটি কেবল আপনিই নন। এটি প্রকৃতপক্ষে একটি উত্তরের উত্তর যা ভোটদানের জন্য প্রাপ্য, তবে এটি আরও ভাল সুরের দ্বারা উপকৃত হবে।
ওয়াল্ডির লিওনসিও

8
অরথোগোনাল বহুবচন এখানে আসলে আপনার বুঝতে হবে না --- আপনার কেবল বুঝতে হবে যে তারা যা চান তা নয়। কেন কেউ অরথোগোনাল বহুবর্ষ চাইবে? বহুবর্ষে দুটি পদগুলির মধ্যে সমবায়তা শূন্য (রাউন্ডঅফ ত্রুটি পর্যন্ত) খুঁজে পেতে কোভ জমা দিন (বহু (x, 2))। এটি অরথোগোনাল বহুবচনগুলির মূল সম্পত্তি --- তাদের পদগুলির একে অপরের সাথে শূন্য সমবায় রয়েছে। কখনও কখনও আপনার আরএইচএস ভেরিয়েবলগুলির একে অপরের সাথে শূন্য সম্পর্ক স্থাপন করা সুবিধাজনক। তাদের সহগগুলি ভুল নয়, সত্যই, তাদের কেবল আলাদাভাবে ব্যাখ্যা করতে হবে।
বিল

2
ওহ, ঠিক আছে, সরল ইংরেজিতে সেই ব্যাখ্যাটি এখন অর্থবোধ করে। ধন্যবাদ.
ব্যবহারকারী 13907

5

সিমিটসন এট আল দ্বারা বহুবর্ষীয় রিগ্রেশন ব্যাখ্যার জন্য একটি আকর্ষণীয় পন্থা রয়েছে (1978) । এটি পুনর্লিখন জড়িত

ওয়াই=β0+ +β1এক্স+ +β2এক্স2+ +তোমার দর্শন লগ করা

যেমন

ওয়াই=মি+ +β2(-এক্স)2+ +তোমার দর্শন লগ করা

মি=β0-β12/4β2β2=-β1/2β2


2
+1 সম্পর্কিত বিশ্লেষণের জন্য দয়া করে stats.stackexchange.com/questions/28730 এবং stats.stackexchange.com/questions/157629 দেখুন
whuber

4

আপনি যদি এতটা রায় ছাড়াই কেবল সঠিক দিকে ঝুঁকতে চান: poly()অরথোগোনাল তৈরি করেন (পারস্পরিক সম্পর্কযুক্ত নয়) বহুত্ববাদী, এর বিপরীতে I(), যা ফলস্বরূপ বহুবর্ষগুলির মধ্যে পারস্পরিক সম্পর্ককে সম্পূর্ণ উপেক্ষা করে। প্রেডিক্টর ভেরিয়েবলের মধ্যে সম্পর্কের বিষয়টি লিনিয়ার মডেলগুলিতে সমস্যা হতে পারে ( পারস্পরিক সম্পর্ক কেন সমস্যা হতে পারে সে সম্পর্কে আরও তথ্যের জন্য এখানে দেখুন), তবে এটির poly()পরিবর্তে সম্ভবত ব্যবহার করা আরও ভাল (সাধারণভাবে) I()। এখন, ফলাফলগুলি এত আলাদা দেখাচ্ছে কেন? ঠিক আছে, উভয়ই poly()এবং I()এক্স নিন এবং এটিকে একটি নতুন এক্সে রূপান্তরিত করুন (এর ক্ষেত্রে I(), নতুন এক্সটি কেবল x ^ 1 বা x ^ 2 এর ক্ষেত্রে poly(), নতুন এক্স আরও জটিল) (আপনি যদি জানতে চান তবে সেগুলি কোথা থেকে এসেছে (এবং আপনি সম্ভবত নাও), আপনি শুরু করতে পারেনএখানে বা উল্লিখিত উইকিপিডিয়া পৃষ্ঠা বা একটি পাঠ্যপুস্তক)। মুল বক্তব্যটি হ'ল আপনি যখন x মানগুলির একটি নির্দিষ্ট সেটের উপর ভিত্তি করে y গণনা করছেন (পূর্বাভাস দিচ্ছেন), আপনার দ্বারা উত্পাদিত রূপান্তরিত x মানগুলি ব্যবহার করতে হবে poly()বা I()(আপনার লিনিয়ার মডেলটিতে কোনটি নির্ভর করে)। তাই:

library(ggplot2)    

set.seed(3)
epsilon <- 0.25*rnorm(100)
x       <- seq(from=1, to=5, length.out=100)
y       <- 4 - 0.6*x + 0.1*x^2 + epsilon

# Minimum is at x=3, the expected y value there is
4 - 0.6*3 + 0.1*3^2

ggplot(data=NULL,aes(x, y)) + geom_point() + 
   geom_smooth(method = "lm", formula = y ~ poly(x, 2))

modI <- lm(y~x+I(x^2)) 
summary(modI) # Looks right
modp <- lm(y ~ poly(x, 2))
summary(modp)  # Looks like garbage

# predict y using modI
coef(modI)[1] + coef(modI)[2] * 3^1 + coef(modI)[3] * 3^2

# predict y using modp
# calculate the new x values using predict.poly()
x_poly <- stats:::predict.poly(object = poly(x,2), newdata = 3)
coef(modp)[1] + coef(modp)[2] * x_poly[1] + coef(modp)[3] * x_poly[2]

এই ক্ষেত্রে, উভয় মডেল একই উত্তর ফেরত দেয়, যা প্রস্তাব করে যে ভবিষ্যদ্বাণী ভেরিয়েবলগুলির মধ্যে পারস্পরিক সম্পর্ক আপনার ফলাফলগুলিকে প্রভাবিত করছে না। পারস্পরিক সম্পর্ক যদি সমস্যা হত তবে দুটি পদ্ধতিই বিভিন্ন মানের পূর্বাভাস দেয়।


1

'পলি' বহুবর্ষ 1, x, x x 2, ..., x 'ডিগ্রিতে গ্রাহাম-শ্মিট অরথো-নরমালাইজেশন সম্পাদন করে উদাহরণস্বরূপ এই ফাংশনটি অবশ্যই' কোফ 'বৈশিষ্ট্যগুলি ফিরিয়ে না নিয়ে' পলি 'হিসাবে একই কাজ করে।

MyPoly <- 
function(x, deg)
{
    n <- length(x)
    ans <- NULL
    for(k in 1:deg)
    {
        v <- x^k
        cmps <- rep(0, n)
        if(k>0) for(j in 0:(k-1)) cmps <- cmps + c(v%*%ans[,j+1])*ans[,j+1]
        p <- v - cmps
        p <- p/sum(p^2)^0.5
        ans <- cbind(ans, p)
    }
    ans[,-1]
}

আমি এই থ্রেডে অবতরণ করেছি কারণ আমি কার্যকরী ফর্মটিতে আগ্রহী ছিল। সুতরাং আমরা কীভাবে 'পলি'র ফলাফলটি প্রকাশ হিসাবে প্রকাশ করব? গ্রাহাম-শ্মিট পদ্ধতিটি কেবল উল্টে দিন। আপনি একটি জগাখিচুড়ি শেষ হবে!

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