রিগ্রেশনে গুণগত পরিবর্তনশীল কোডিং "এককাম"


17

আমার কাছে "মানের" নামে একটি স্বাধীন ভেরিয়েবল রয়েছে; এই পরিবর্তনশীলটির 3 টির প্রতিক্রিয়া রয়েছে (খারাপ মানের; মাঝারি মানের; উচ্চ মানের)। আমি এই স্বতন্ত্র পরিবর্তনশীলটিকে আমার একাধিক লিনিয়ার রিগ্রেশনটিতে প্রবর্তন করতে চাই। আমার যখন বাইনারি ইন্ডিপেন্ডেন্ট ভেরিয়েবল থাকে (ডামি ভেরিয়েবল, আমি কোড করতে পারি 0/ 1) এটি একাধিক লিনিয়ার রিগ্রেশন মডেল হিসাবে পরিচিত করা সহজ।

তবে প্রতিক্রিয়ার 3 টি রূপ নিয়ে আমি এই ভেরিয়েবলটিকে এভাবে কোড করার চেষ্টা করেছি:

Bad quality      Medium quality      High quality

     0                1                  0
     1                0                  0
     0                0                  1
     0                1                  0

তবে আমি যখন আমার একাধিক লিনিয়ার রিগ্রেশন করার চেষ্টা করি তখন একটি সমস্যা হয়: এই পরিবর্তনটি Medium qualityআমাকে দেয় NA:

Coefficients: (1 not defined because of singularities) 

আমি এই পরিবর্তনশীল "মানের" 3 টি রূপ পরিবর্তনের সাথে কীভাবে কোড করব? আমাকে কি একটি ফ্যাক্টর ( factorইন R) হিসাবে ভেরিয়েবল তৈরি করতে হবে তবে তারপরে আমি এই ফ্যাক্টরটিকে একাধিক লিনিয়ার রিগ্রেশনটিতে পরিচয় করিয়ে দিতে পারি?


2
সম্ভবত আমি প্রশ্নটি ভুল বোঝাবুঝি করছি, তবে নিখুঁত কোলাইনারিটির কারণে আপনি একটি শ্রেণিবদ্ধ ভেরিয়েবলের সমস্ত স্তরকে রৈখিক প্রতিরোধের মধ্যে অন্তর্ভুক্ত করতে পারবেন না। আপনার গোষ্ঠীগুলির মধ্যে একটিতে অন্যান্য গোষ্ঠীর সাথে তুলনা করা হয় এমন একটি বেস গ্রুপ সরবরাহ করার জন্য বাদ দেওয়া হবে।
রিকিবি

1
এখানে একটি একক ম্যাট্রিক্স গঠনের পরিসংখ্যানিক প্রসঙ্গে একটি অসামান্য ব্যাখ্যা রয়েছে: কী-পারস্পরিক সম্পর্ক-করে তোলে-ম্যাট্রিক্স-একক?
গুং - মনিকা পুনরায়

উত্তর:


23

আপনার যে সমস্যাটি হচ্ছে (অর্থাত্ "সিঙ্গুলারিটিস") এটি বহুবিধরনের উদাহরণ হিসাবে ভাবা যেতে পারে । মাল্টিকোলাইনারিটি প্রায়শই সংজ্ঞায়িত হয়:

এক বা একাধিক পূর্বাভাসকারী ভেরিয়েবলগুলি অন্যান্য ভবিষ্যদ্বাণী ভেরিয়েবলগুলির রৈখিক সংমিশ্রণ।

এটি আসলে একটি বরং কঠোর সংজ্ঞা; এটি নিখুঁত মাল্টিকোলাইনারিটি এবং আপনার ভেরিয়েবলগুলি অন্যের নিখুঁত রৈখিক সংমিশ্রণ না হয়ে আপনি সহজেই বহুবিধ লাইন নিয়ে সমস্যা করতে পারেন । তদ্ব্যতীত, নিখুঁত মাল্টিকোলাইনারিটি খুব কমই ঘটে। তবে আপনি যে কোনও ক্ষেত্রেই হোঁচট খেয়েছেন it যাক দেখা যাক কিভাবে আমরা করতে পুরোপুরি ভবিষ্যদ্বাণী করা medium qualityঅন্য দুটি শ্রেণীর আমাদের জ্ঞান থেকে (আমরা একটি রিগ্রেশন মডেল যেখানে সঙ্গে এই কাজ করব medium qualityহয় , এবং & হয় এক্স 1 & এক্স 2 যথাক্রমে): ওয়াই = β 2 এক্স 2Ybad qualityhigh qualityX1X2
, নির্দিষ্ট করা হয়েছে, কারণ আমরা এটি সঠিকভাবে পূর্বাভাস দিতে পারি। এটি করতে, আমরা β 0 = 1 , β 1 = - 1 এবং β 2 = - 1 সেট করেছি । এখন, যখন আপনার রয়েছে, তখন এক্স 1 = 1 , যা β 0 বাতিল করে দেয়(

Y=β0+β1X1+β2X2
নোট কোন যে ত্রুটি শব্দ, εβ0=1β1=1β2=1bad qualityX1=1β0 ), এবং এক্স 2 = 0 যাতে সেই পদটি বাতিল হয়ে যায় ( - 1 × 0 )। সুতরাং, আমরা ওয়াই () এরজন্য 0 এর পূর্বাভাসকৃত মানটি রেখেছি, যা হুবহু সঠিক। অন্যান্য সম্ভাবনাগুলি (এটি সর্বদা কার্যকর হয়, আপনার ক্ষেত্রে) কাজ করার জন্য আমি এটি ছেড়ে দেব will 1+1×1X2=01×00Ymedium quality

তাহলে আপনার কি করা উচিত? শ্রেণীবদ্ধ পরিবর্তনশীল উপস্থাপন করার সময়, আমরা সাধারণত রেফারেন্স সেল কোডিং ব্যবহার করি0 অন্য সব স্তরের জন্য ডামি কোড 's। আপনার শ্রেণিবদ্ধ ভেরিয়েবলের অন্যান্য স্তরগুলি ডামি কোডগুলি প্রতিনিধিত্ব করে যেমন আপনি ইতিমধ্যে করেছেন। (এ সম্পর্কে আরও তথ্যের জন্য, আপনি আমার উত্তরটি এখানে দেখতে পাবেন: উদাহরণস্বরূপ সপ্তাহের দিনগুলির ভিত্তিতে রিগ্রেশন )) আপনি যদি ব্যবহার করে থাকেন তবে আপনি একটি ব্যবহার Rকরতে পারেনfactor এবংR


আপনার মন্তব্যের জন্য ধন্যবাদ ! আমি আর ব্যবহার করছি তাই আমি যদি ভালভাবে বুঝতে পারি, একটি ফ্যাক্টর দিয়ে আর সবকিছু করবে, আমার কিছু করার দরকার নেই! পারফেক্ট! আর একবার ট্যাঙ্ক!
ভেরিন সাচ

আপনি যদি lmসূত্রটিতে ( + 0) শুকতে ইন্টারসেপ্ট সেট করেন তবে এটি কার্যকর হবে?
ফায়ারব্যাগ

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

10

@ গুং তত্ত্বটি পরিষ্কারভাবে ব্যাখ্যা করেছেন। চিত্রিত করার জন্য এখানে ব্যবহারিক উদাহরণ রয়েছে:

set.seed(1)
pred1 <- factor(c("bad", "med", "high"), levels=c("bad", "med", "high"))
df1 <- data.frame(y=20*abs(runif(6)),
                  x=rnorm(6),
                  q=sample(pred1, 6, replace=TRUE)
                  )
l1 <- lm(y ~ x, data=df1)
### add variable q    
l2 <- lm(y ~ x + q, data=df1)
### look at dummy variables generated in creating model
model.matrix(l2)

এটি আমাদের দেখায় যে রেফারেন্স স্তর (সমস্ত 0গুলি) badএখানে সারি 4 তে দেখা যাচ্ছে:

  (Intercept)          x qmed qhigh
1           1  1.5952808    1     0
2           1  0.3295078    0     1
3           1 -0.8204684    0     1
4           1  0.4874291    0     0
5           1  0.7383247    1     0
6           1  0.5757814    0     0

এখন আমরা যদি ডামি ভেরিয়েবলগুলি নিজেরাই কোড করি এবং সেগুলি ব্যবহার করে কোনও মডেল ফিট করার চেষ্টা করি:

df1 <- within(df1, {
       qbad <- ifelse(q=="bad", 1, 0)
       qmed <- ifelse(q=="med", 1, 0)
       qhigh <- ifelse(q=="high", 1, 0)
       })    
lm(y ~ x + qbad + qmed + qhigh, data=df1, singular.ok=FALSE)

আমরা প্রত্যাশিত ত্রুটি পেয়েছি: singular fit encountered


1
প্লেজার। আশা করি এখন সব পরিষ্কার হয়ে গেছে। factorআপনার জন্য সাধারণত ডামি ভেরিয়েবল কোডিংয়ের যত্ন নেবে তবে 'হুডের নীচে' কী চলছে তা সচেতন হওয়া ভাল।
dardisco
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.