ন্যূনতম স্কোয়ারগুলি রিগ্রেশন ধাপে ধাপে লিনিয়ার বীজগণিত গণনা


22

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

উদাহরণটি আর-ইন-বিল্ট ডেটাসেটের সাথে রয়েছে, mtcarsএবং গাড়ীর ওজন (ধ্রুবক ভেরিয়েবল) ওভার হিসাবে সিলিন্ডারের সংখ্যার উপর চাপ দেওয়া এবং স্বতন্ত্র ভেরিয়েবল হিসাবে কাজ করে এমন একটি গাড়ী গ্যালন প্রতি মাইল হিসাবে সেট আপ করা হবে would ইন্টারঅ্যাকশন ছাড়াই তিনটি স্তর (4, 6 বা 8) সহ ফ্যাক্টর।

সম্পাদনা: আপনি যদি এই প্রশ্নে আগ্রহী হন তবে আপনি অবশ্যই এই পোস্টে সিভির বাইরে ম্যাথিউ ড্রুরির একটি বিস্তারিত এবং সন্তোষজনক উত্তর পাবেন ।


আপনি যখন "ম্যানুয়াল গণনা" বলছেন, আপনি এটি কী খুঁজছেন? প্যারামিটারের অনুমান এবং আরও অনেকগুলি (উদাহরণস্বরূপ, বা এসডাব্লুইপি অপারেটরগুলির মাধ্যমে) উদাহরণস্বরূপ তুলনায় তুলনামূলক সহজ পদক্ষেপের একটি সিরিজ দেখানো অপেক্ষাকৃত সহজবোধ্য, তবে এটি আর অভ্যন্তরীণভাবে গণনাগুলি করে না; এটি (এবং অন্যান্য অন্যান্য পরিসংখ্যানের প্যাকেজগুলি) কিউআর পচন ব্যবহার করে (সাইটে বেশ কয়েকটি পোস্টে আলোচনা করা হয়েছে - কিউআর পচন নিয়ে অনুসন্ধানে বেশ কয়েকটি পোস্ট দেখা যায়, যার কয়েকটি থেকে আপনি সরাসরি মূল্য পেতে পারেন)
গ্লেন_বি -রিনস্টেট মনিকা

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

হাঁ! @ ম্যাথু ড্রুরি আপনি কি চান যে আমি ওপিতে সেই লাইনটি মুছে ফেলব, বা লিঙ্কটি আপডেট করব?
আন্তনি পরল্লদা

1
আপনার এই লিঙ্কটি আছে কিনা তা নিশ্চিত নয় তবে এটি নিবিড়ভাবে সম্পর্কিত এবং আমি জেএম এর উত্তরটি সত্যিই পছন্দ করি। stats.stackexchange.com/questions/1829/…
ডু

উত্তর:


51

দ্রষ্টব্য : আমি আমার ওয়েবসাইটে এই উত্তরটির একটি বর্ধিত সংস্করণ পোস্ট করেছি ।

প্রকৃত আর ইঞ্জিনটি প্রকাশের সাথে আপনি কি অনুরূপ উত্তর পোস্ট করার জন্য দয়া করে বিবেচনা করবেন?

নিশ্চিত! খরগোশের গর্তের নীচে আমরা যাই।

প্রথম স্তরটি হ'ল lm, ইন্টারফেসটি আরআর প্রোগ্রামার দ্বারা প্রকাশিত। আপনি কেবল lmআর কনসোলটিতে টাইপ করে এর উত্সটি দেখতে পারেন । এর বেশিরভাগ (বেশিরভাগ উত্পাদন স্তরের কোডের সংখ্যাগরিষ্ঠের মতো) ইনপুটগুলি পরীক্ষা করতে, অবজেক্টের বৈশিষ্ট্যগুলি নির্ধারণ এবং ত্রুটি ছুঁড়ে ব্যস্ত; কিন্তু এই লাইন আটকানো

lm.fit(x, y, offset = offset, singular.ok = singular.ok, 
                ...)

lm.fitঅন্য আর ফাংশন, এটি আপনি নিজে কল করতে পারেন। lmসুবিধামত সূত্র এবং ডেটা ফ্রেমের সাথে কাজ করার সময় , lm.fitম্যাট্রিক্স চায়, যাতে বিমূর্তির এক স্তর সরানো থাকে। lm.fitআরও ব্যস্ততার জন্য এবং নিম্নলিখিত সত্যই আকর্ষণীয় লাইনের উত্সটি পরীক্ষা করা

z <- .Call(C_Cdqrls, x, y, tol, FALSE)

এখন আমরা কোথাও পাচ্ছি। .Callসি কোডে কল করার R এর উপায়। আর কোথাও আর উত্সে সি ফাংশন, সি_সিডিকিউর্লস রয়েছে এবং আমাদের এটি সন্ধান করা দরকার। এটি এখানে

সি ফাংশনটি আবার দেখলে আমরা বেশিরভাগ সীমা পরীক্ষা করা, ত্রুটি পরিষ্কার করা এবং ব্যস্ত কাজের সন্ধান করি। তবে এই লাইনটি আলাদা

F77_CALL(dqrls)(REAL(qr), &n, &p, REAL(y), &ny, &rtol,
        REAL(coefficients), REAL(residuals), REAL(effects),
        &rank, INTEGER(pivot), REAL(qraux), work);

আর এখন আমরা আমাদের তৃতীয় ভাষাটিতে আছি, আরআর সি বলেছে যা ফোরআরানে কল করছে। এখানে ফরটারন কোড দেওয়া আছে

প্রথম মন্তব্যটি সব বলে দেয়

c     dqrfit is a subroutine to compute least squares solutions
c     to the system
c
c     (1)               x * b = y

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

কোডটি কী করতে চলেছে তা মন্তব্যটিতেও ব্যাখ্যা করা হয়েছে

c     on return
c
c        x      contains the output array from dqrdc2.
c               namely the qr decomposition of x stored in
c               compact form.

সুতরাং ফরট্রান পচন আবিষ্কার করে সিস্টেমটি সমাধান করতে চলেছে ।প্রশ্নঃআর

প্রথম যেটি ঘটে তা হ'ল এবং এখন পর্যন্ত সবচেয়ে গুরুত্বপূর্ণ

call dqrdc2(x,n,n,p,tol,k,qraux,jpvt,work)

এই ফোরট্রান ফাংশন কল dqrdc2আমাদের ইনপুট ম্যাট্রিক্স উপর x। এটা কী?

 c     dqrfit uses the linpack routines dqrdc and dqrsl.

সুতরাং আমরা অবশেষে এটি লিনপ্যাক করে ফেলেছি । লিনপ্যাক একটি গৌণ লিনিয়ার বীজগণিত গ্রন্থাগার যা 70 এর দশক থেকে প্রায়। বেশিরভাগ গুরুতর রৈখিক বীজগণিত ইভেন্টটি লিনপ্যাকের পথে খুঁজে পায়। আমাদের ক্ষেত্রে, আমরা dqrdc2 ফাংশনটি ব্যবহার করছি

c     dqrdc2 uses householder transformations to compute the qr
c     factorization of an n by p matrix x.

এখানেই আসল কাজটি করা হয়। এই কোডটি কী করছে তা নির্ধারণ করতে আমার পুরো দিনটি লাগবে, এগুলি যত নিচু স্তর রয়েছে। তবে সাধারণভাবে, আমাদের একটি ম্যাট্রিক্স এবং আমরা এটির একটি পণ্য এক্স = কিউ আর রূপান্তর করতে চাই যেখানে Q হল একটি অর্থোগোনাল ম্যাট্রিক্স এবং আর একটি উচ্চতর ত্রিভুজাকার ম্যাট্রিক্স। এটি করার জন্য একটি স্মার্ট জিনিস, কারণ একবার আপনার Q এবং R থাকলে আপনি রিগ্রেশনের জন্য লিনিয়ার সমীকরণগুলি সমাধান করতে পারেনএক্সএক্স=প্রশ্নঃআরপ্রশ্নঃআরপ্রশ্নঃআর

এক্সটিএক্সβ=এক্সটিওয়াই

খুব সহজভাবে. প্রকৃতপক্ষে

এক্সটিএক্স=আরটিপ্রশ্নঃটিপ্রশ্নঃআর=আরটিআর

সুতরাং পুরো সিস্টেম হয়ে যায়

আরটিআরβ=আরটিপ্রশ্নঃটিY

তবে উচ্চতর ত্রিভুজাকৃতির এবং এক্স টি এক্স এর সমান র‌্যাঙ্কযুক্ত রয়েছে , সুতরাং যতক্ষণ না আমাদের সমস্যাটি ভালভাবে উত্থিত হয় ততক্ষণ এটি সম্পূর্ণ পদমর্যাদার, এবং আমরা কেবল হ্রাস করা সিস্টেমটি সমাধান করতে পারিআরএক্সটিএক্স

আরβ=প্রশ্নঃটিY

আরconstant * beta_n = constantβএনβপ্রশ্নঃআর


4
এটি সবচেয়ে মজাদার গণিত / কোডিং সংক্ষিপ্ত রচনা যা কল্পনা করতে পারেন। আমি কোডিং সম্পর্কে কিছুই জানি না, তবে আপাতদৃষ্টিতে নিরীহ আর ফাংশনটির সাহসিকতার মধ্য দিয়ে আপনার "ভ্রমণ" সত্যই চোখ ধাঁধানো। দুর্দান্ত লেখা! যেহেতু "কল্যাণকামী" কৌতুক করেনি ... আপনি গেল কল্যাণকামী বিবেচনা এই এক একটি সম্পর্কিত চ্যালেঞ্জ হিসেবে? :-)
আন্তোনি পেরেল্লদা

6
+1 আমি এটি আগে দেখিনি, চমৎকার সংক্ষিপ্তসার। @ অ্যান্টনি যদি গৃহস্থালি রূপান্তরগুলির সাথে পরিচিত না হয় তবে কিছুটা তথ্য যোগ করতে; এটি মূলত একটি রৈখিক রূপান্তর যা আপনাকে ইতিমধ্যে মোকাবেলা করা অংশগুলি (যেভাবে আপনি সঠিক ক্রমে এটি চালিয়ে যাবেন) মেকিং ছাড়াই অর্জন করার চেষ্টা করছেন আর ম্যাট্রিক্সের একটি অংশ শূন্য করার অনুমতি দেয়, এটি আদর্শ করে তোলে ম্যাট্রিকগুলি উচ্চতর ত্রিভুজাকার ফর্মে রূপান্তর করার জন্য (প্রদত্ত ঘোরাগুলি একই রকম কাজ করে এবং ভিজ্যুয়ালাইজ করা সহজতর হয় তবে কিছুটা ধীর হয়)। আপনি আর তৈরি করার সময় আপনার অবশ্যই একই সময়ে Q
Glen_b -Rininstate মনিকা

2
ম্যাথিউ (+1), আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি আপনার পোস্টটি শুরু করার বা আপনার আরও বিস্তারিত লেখার লিঙ্ক আপটি শেষ করতে শেষ করুন মাদ্রি . github.io/jekyll/update/2016/07/20/lm-in-R.html
অ্যামিবা বলছেন

3
মুরগির বাইরে বেরোনোর ​​জন্য এবং মেশিনের কোডে না যাওয়ার জন্য -1।
এস কোলাসা - মনিকা


8

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

β

মিপি=আমিএনটিRপিটি(Y=4)+ +β1*Wআমিটি+ +ডি1*আমিএনটিRপিটি(Y=6)+ +ডি2*আমিএনটিRপিটি(Y=8)[*]

ডি1ডি2এক্স

attach(mtcars)    
x1 <- wt

    x2 <- cyl; x2[x2==4] <- 1; x2[!x2==1] <-0

    x3 <- cyl; x3[x3==6] <- 1; x3[!x3==1] <-0

    x4 <- cyl; x4[x4==8] <- 1; x4[!x4==1] <-0

    X <- cbind(x1, x2, x3, x4)
    colnames(X) <-c('wt','4cyl', '6cyl', '8cyl')

head(X)
        wt 4cyl 6cyl 8cyl
[1,] 2.620    0    1    0
[2,] 2.875    0    1    0
[3,] 2.320    1    0    0
[4,] 3.215    0    1    0
[5,] 3.440    0    0    1
[6,] 3.460    0    1    0

[*]lm

βপিRএমএকটিটিRআমিএক্স=(এক্সটিএক্স)-1এক্সটি[পিRএমএকটিটিRআমিএক্স][Y]=[আরRসি'গুলি](এক্সটিএক্স)-1এক্সটিY=β

X_tr_X_inv <- solve(t(X) %*% X)    
Proj_M <- X_tr_X_inv %*% t(X)
Proj_M %*% mpg

          [,1]
wt   -3.205613
4cyl 33.990794
6cyl 29.735212
8cyl 27.919934

অভিন্ন হবে: coef(lm(mpg ~ wt + as.factor(cyl)-1))

এইচএকটিটিএমএকটিটিRআমিএক্স=এক্স(এক্সটিএক্স)-1এক্সটি

HAT <- X %*% X_tr_X_inv %*% t(X)

Y^এক্স(এক্সটিএক্স)-1এক্সটিYy_hat <- HAT %*% mpg

cyl <- as.factor(cyl); OLS <- lm(mpg ~ wt + cyl); predict(OLS):

y_hat <- as.numeric(y_hat)
predicted <- as.numeric(predict(OLS))
all.equal(y_hat,predicted)
[1] TRUE

1
সাধারণভাবে, সংখ্যার কম্পিউটিংয়ে, আমি বিশ্বাস করি যে বিপরীতমুখী ম্যাট্রিক্সের পরিবর্তে লিনিয়ার সমীকরণটি সমাধান করা ভাল। সুতরাং, আমি মনে করি beta = solve(t(X) %*% X, t(X) %*% y)অনুশীলনের চেয়ে আরও সঠিক solve(t(X) %*% X) %*% t(X) %*% y
ম্যাথু ড্র্যারি

আর সেভাবে এটি করে না - এটি একটি কিউআর পচন ব্যবহার করে। আপনি যদি ব্যবহৃত অ্যালগরিদম বর্ণনা করতে চলেছেন তবে একটি কম্পিউটারে আমি সন্দেহ করি যে আপনি যে দেখান সেটিকেই কেউ ব্যবহার করে।
মনিকা পুনরায় ইনস্টল করুন - জি সিম্পসন

অ্যালগরিদমের পরে নয়, কেবল লিনিয়ার বীজগণিতের আন্ডারপিনিংগুলি বোঝার চেষ্টা করছেন।
আন্তনি পরল্লদা

@ আন্টনিপ্রেল্লদা এমনকি সেক্ষেত্রে আমি লিনিয়ার সমীকরণের ক্ষেত্রে এখনও অনেক পরিস্থিতিতে আরও আলোকিত হওয়ার কথা ভাবছি।
ম্যাথু ড্র্যারি

1
আমাদের সাইটের উদ্দেশ্যগুলিতে এই থ্রেডের পেরিফেরিয়াল সম্পর্কটি দেওয়া হয়েছে, Rগুরুত্বপূর্ণ গণনার জন্য ব্যবহারের চিত্রণ করার জন্য মূল্য দেখানোর সময় , আমি আপনাকে পরামর্শ দিতে চাই যে আপনি এটি আমাদের ব্লগে অবদান
whuber
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.