আমার বিশদ উত্তরটি নীচে, তবে এই ধরণের প্রশ্নের সাধারণ (অর্থাত্ আসল) উত্তরটি হল: 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^2
। lm
পলির সাথে দ্বিতীয় কলটি কেমন ? প্রত্যাবর্তনের 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
একটি বিকল্প রয়েছে । এই দুটি বিবেচনাগুলি আপনাকে কোনটি ফিরে আসে তা চেষ্টা করার জন্য অনুপ্রাণিত করতে পারে :raw
FALSE
head(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 ফাংশনগুলি কী করে তা ভুল বুঝে নেওয়া স্বাভাবিক। এটির সাথে মোকাবিলা করার উপায় হ'ল চারপাশে স্ক্রু করা, পরীক্ষা করা, ডেটা দেখুন এবং আরটিএফএম। নিজেকে "নির্লিপ্তভাবে একটি রেসিপি অনুসরণ করা" মোড থেকে এবং "গোয়েন্দা" মোডে পান।