আর-তে কীভাবে ভ্যারিম্যাক্স-ঘোরানো মূল উপাদানগুলি গণনা করবেন?


13

আমি 25 ভেরিয়েবলের উপর পিসিএ চালিয়েছি এবং ব্যবহার করে শীর্ষ 7 পিসি নির্বাচন করেছি prcomp

prc <- prcomp(pollutions, center=T, scale=T, retx=T)

আমি তখন সেই উপাদানগুলিতে ভেরিম্যাক্স ঘূর্ণন করেছি।

varimax7 <- varimax(prc$rotation[,1:7])

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

newData <- t(varimax7$rotmat) %*% t(prc$x[,1:7])

তবে এটি বোঝায় না কারণ উপরের ম্যাট্রিক্সের পরিমিতিগুলির যথাক্রমে এবং এবং সুতরাং আমি সারির পরিবর্তে কেবল সারির ম্যাট্রিক্স রেখে যাব ... কেউ কি জানেন? আমি এখানে কি ভুল করছি বা আমার চূড়ান্ত লাইনটি কী হওয়া উচিত? আমার কি কেবল পরে স্থানান্তর করা দরকার?7×77 169337×16933716933

উত্তর:


22

"আবর্তন" ফ্যাক্টর বিশ্লেষণে বিকশিত একটি পদ্ধতি; সেখানে ঘূর্ণন (যেমন যেমন ভেরাইম্যাক্স) লোডিংয়ের ক্ষেত্রে প্রয়োগ করা হয় , কোভেরিয়েন্স ম্যাট্রিক্সের ইগেনভেেক্টরগুলিতে নয়। লোডিংগুলি সম্পর্কিত ইগেনভ্যালুগুলির বর্গাকার শিকড় দ্বারা স্কেল করা আইজেনভেেক্টর। ভ্যারিম্যাক্স ঘোরার পরে, লোডিং ভেক্টরগুলি আর অর্থোগোনাল হয় না (যদিও ঘূর্ণনটিকে "অर्थোগোনাল" বলা হয়), তাই কোনও আবর্তিত লোডিং দিকগুলির সাথে ডেটার অर्थোগোনাল অনুমানগুলি সহজেই গণনা করতে পারে না।

@ এফ টিসেলের উত্তরে ধরে নেওয়া হয়েছে যে ভেরিম্যাক্স ঘূর্ণন ইগেনভেেক্টরগুলিতে প্রয়োগ করা হয় (লোডিংয়ের ক্ষেত্রে নয়)। এটি বেশ প্রচলিত হবে। বিস্তারিত জানার জন্য দয়া করে আমার পিসিএ + ভেরিম্যাক্সের বিশদ অ্যাকাউন্টটি দেখুন: পিসিএ কি একটি ঘূর্ণন অনুসরণ করে (যেমন ভেরিম্যাক্স) এখনও পিসিএ হয়? সংক্ষেপে, আমরা যদি ডাটা ম্যাট্রিক্স দিকে নজর রাখি , তারপরে লোডিংগুলি ঘোরানো মানে নিম্নরূপে কিছু ঘূর্ণন ম্যাট্রিক্স জন্য সন্নিবেশ করা : আর আর আর এক্স = ( ইউ আর ) ( আর এস ভি ) X=USVRRRX=(UR)(RSV).

যদি লোডিংগুলিতে ঘূর্ণন প্রয়োগ করা হয় (সাধারণত এটি হয়) তবে আর এর মধ্যে ভ্যারাম্যাক্স-ঘোরানো পিসি গণনা করার জন্য কমপক্ষে তিনটি সহজ উপায় রয়েছে:

  1. এগুলি ফাংশনের মাধ্যমে সহজেই উপলব্ধ psych::principal((এটি প্রকৃতপক্ষে আদর্শ পদ্ধতির প্রমাণ করে)। নোট করুন যে এটি স্ট্যান্ডার্ডাইজড স্কোরগুলি দেয় , অর্থাত্ সমস্ত পিসিতে ইউনিট ভেরিয়েন্স থাকে।

  2. varimaxলোডিংগুলি ঘোরানোর জন্য কেউ ম্যানুয়ালি ফাংশন ব্যবহার করতে পারে এবং তারপরে স্কোরগুলি অর্জন করতে নতুন ঘোরানো লোডিং ব্যবহার করতে পারে; ঘোরানো লোডিংয়ের ট্রান্সপোসপড সিউডো-ইনভার্সের সাথে একটিতে একাধিক ডেটা প্রয়োজন ( @ttnphns দ্বারা এই উত্তরের সূত্রগুলি দেখুন )। এটি মানকৃত স্কোরও অর্জন করবে।

  3. varimaxলোডিংগুলি ঘোরানোর জন্য কেউ ফাংশন ব্যবহার করতে পারে এবং তারপরে প্রাপ্ত মানকৃত $rotmatস্কোরগুলি ঘোরানোর জন্য ঘূর্ণন ম্যাট্রিক্স ব্যবহার করতে পারে prcomp

তিনটি পদ্ধতিই একই ফল দেয়:

irisX <- iris[,1:4]      # Iris data
ncomp <- 2

pca_iris_rotated <- psych::principal(irisX, rotate="varimax", nfactors=ncomp, scores=TRUE)
print(pca_iris_rotated$scores[1:5,])  # Scores returned by principal()

pca_iris        <- prcomp(irisX, center=T, scale=T)
rawLoadings     <- pca_iris$rotation[,1:ncomp] %*% diag(pca_iris$sdev, ncomp, ncomp)
rotatedLoadings <- varimax(rawLoadings)$loadings
invLoadings     <- t(pracma::pinv(rotatedLoadings))
scores          <- scale(irisX) %*% invLoadings
print(scores[1:5,])                   # Scores computed via rotated loadings

scores <- scale(pca_iris$x[,1:2]) %*% varimax(rawLoadings)$rotmat
print(scores[1:5,])                   # Scores computed via rotating the scores

এটি তিনটি অভিন্ন ফলাফল দেয়:

1 -1.083475  0.9067262
2 -1.377536 -0.2648876
3 -1.419832  0.1165198
4 -1.471607 -0.1474634
5 -1.095296  1.0949536

দ্রষ্টব্য: আর এর varimaxফাংশনটি normalize = TRUE, eps = 1e-5ডিফল্টরূপে পরামিতি ব্যবহার করে ( ডকুমেন্টেশন দেখুন )। epsএসপিএসএস-এর মতো অন্যান্য সফ্টওয়্যারগুলির সাথে ফলাফলগুলির তুলনা করার সময় কেউ এই প্যারামিটারগুলি পরিবর্তন করতে ( সহনশীলতা হ্রাস করতে এবং কায়সার স্বাভাবিককরণের যত্ন নেওয়া) করতে চাইতে পারেন । আমি এটি আমার নজরে আনার জন্য @ গটফ্রিডহেল্মসকে ধন্যবাদ জানাই। [দ্রষ্টব্য: এই পরামিতিগুলি varimaxফাংশনে পাস করার পরে psych::principalকাজ করে তবে ফাংশনে যাওয়ার সময় কাজ করে না। এটি ঠিক করা হবে এমন একটি ত্রুটি বলে মনে হচ্ছে]]


1
আমি এটি এখনই দেখছি এবং আমি মনে করি আপনি সঠিক are আমি তাত্পর্য উত্স খুঁজে পেতে আমার মূল উত্তর (বা অন্য একটি যুক্ত) সম্পাদনা করব। আমি আপনার এবং @ttnphns খুব সম্পূর্ণ এবং আকর্ষণীয় উত্তরগুলি পছন্দ করেছি, বইগুলিতে সাধারণত পাওয়া যায় না এমন বিশদ ব্যাখ্যা সরবরাহ করে।
এফ টিসেল

@amoeba আমি পিসিএ + + varimax ব্যবহার করে তা করতে চেষ্টা করছি principal, prcompএবং princomp, কিন্তু ফলে loadings / অধ্যয়ন সিদ্ধান্তে একে অপরের থেকে খুব ভিন্ন। আমি যা বুঝি তার জন্য, প্রম্পম্প এবং প্রিনম্পম্প মানকৃত স্কোর বা লোডিংগুলি ফিরিয়ে দেয় না। আমার প্রশ্ন: সেরা পন্থাটি কী? আমি কি সত্যিই মানসম্মত ফলাফল চাই? আমার কোড নয় pca_iris <- prcomp(irisX, center=T, scale=T)দ্বারা অনুসরণ varimax(pca_iris$rotation)$loadingsউপরে পুলিশের অনুযায়ী সঠিক হিসেবে?
জেমার্সেলিনো

@ জেমার্সেলিনো, না, আপনার কোডটি ভারীম্যাক্স-রোটেশনটি ইগেনভেেক্টরগুলিতে করে, লোডিংয়ের উপরে নয়। সাধারণত ভেরিম্যাক্স রোটেশনটি বোঝা বা প্রয়োগ করা হয় না।
অ্যামিবা বলছেন মনিকাকে

1
@ জেমার্সেলিনো, আপনি কি জিজ্ঞাসা করছেন কেন আমি বলছি যে এটি গণিতটি কাজ করে # 2 পদ্ধতিতে? আপনি যদি এই ধরণের লিনিয়ার বীজগণিতের সাথে পরিচিত হন তবে এটি সহজ। পিসিএ হ'ল এসভিডি পচা । । ভেরিম্যাক্সের মতো একটি ঘূর্ণন প্রয়োগের অর্থ একটি রোটেশন ম্যাট্রিক্স জন্য নিম্নরূপে সন্নিবেশ করা: । ঘোরানো লোডিংগুলি হল , আবর্তিত মানক স্কোরগুলি , তাইআপনি এবং জানেন ; কীভাবে ? ভাল, উত্তর আর আর আর এক্স = ইউ আর আর এস ভি এল = ভী এস আর / X=USVRRRX=URRSV টি=ইউআরL=VSR/n1 এক্স=টিএলএক্সএলটিটি=এক্স(এল)+=এক্স(এল+)T=URn1
X=TL.
XLT
T=X(L)+=X(L+).
অ্যামিবা বলেছেন মনিকাকে রিইনস্টেট করুন

1
আমি প্যাকেজটির রক্ষণাবেক্ষণকারীর একটি উত্তর পেয়েছি অধ্যাপক রেভেল। principalপ্রক্রিয়াটির পরামিতিগুলি পরিচালনা করার ক্ষেত্রে এটি একটি ত্রুটি বলে মনে হচ্ছে , যা সর্বদা কায়সার-নরমালাইজেশন এবং eps = 1e-5 এর সাথে গণনা করে। এখনও পর্যন্ত কোনও তথ্য নেই, কেন r-food.org এ সংস্করণটি সঠিকভাবে কাজ করে। সুতরাং আমাদের আপডেটের জন্য অপেক্ষা করা উচিত - এবং আমার এখন সমস্ত অপ্রচলিত মন্তব্য মুছে ফেলা উচিত। অ্যামিবা - সেই অনুসারে আপনার উত্তরে মন্তব্যটি আপডেট করা ভাল। সকল সহযোগিতার জন্য ধন্যবাদ!
গটফ্রিড হেলমেস

9

আপনার ম্যাট্রিক্স ব্যবহার করা দরকার $loadings, এটি নয় $rotmat:

 x <- matrix(rnorm(600),60,10)
 prc <- prcomp(x, center=TRUE, scale=TRUE)
 varimax7 <- varimax(prc$rotation[,1:7])
 newData <- scale(x) %*% varimax7$loadings

ম্যাট্রিক্স $rotmatঅরথোগোনাল ম্যাট্রিক্স যা অনারেটেডগুলি থেকে নতুন লোডিং তৈরি করে।

এডিআইটি ফেব্রুয়ারী, 12, 2015 হিসাবে:

n×mX

X=USVT
VXX
X=(UST)(TTVT)=UV
TVVUX(V)Tk<mkX
X(UkSk)(VkT)
X(UkSkTk)(TkTVkT)=UkVk
Vkk×nXVkতবে এর পরিবর্তে আমাদের @amoeba দ্বারা বর্ণিত সমাধানগুলির একটি সমাধান করতে হবে।

অন্য কথায়, আমি প্রস্তাবিত সমাধানটি কেবলমাত্র সেই ক্ষেত্রে সঠিক যেখানে এটি অকেজো এবং অযৌক্তিক হবে।

এই বিষয়টি আমার কাছে পরিষ্কার করার জন্য আন্তরিক ধন্যবাদ @ অ্যামিবার কাছে যান; আমি বছরের পর বছর ধরে এই ভুল ধারণা নিয়ে বাস করছি living

SVLVSviTX (i=1,,m)vi=1

আরও সম্পাদনা 12 ফেব্রুয়ারী, 2015

@ অ্যামিবা দ্বারা চিহ্নিত হিসাবে, যদিও আয়তক্ষেত্রাকার, তবুও আমি যে সমাধানটি প্রস্তাব করেছি তা এখনও গ্রহণযোগ্য হতে পারে: ইউনিট ম্যাট্রিক্স এবং । সুতরাং এটি সমস্ত স্কোর যে একটি পছন্দ পছন্দ সংজ্ঞা উপর জড়ান বলে মনে হচ্ছে। ভি কে ( ভি কে ) টি এক্স ( ভি কে ) টিইউ কেVkVk(Vk)TX(Vk)TUk


1
আহ ঠিক আছে গ্র্যান্ড। আমি বিভ্রান্ত হয়ে পড়েছিলাম কারণ প্রম্পম্পের লোডিংগুলিকে "আবর্তন" বলা হয়, সাহায্যটি আরও ভালভাবে পড়া উচিত ছিল। যেহেতু আমি প্রম্পম্প পদ্ধতিতে "কেন্দ্রে = সত্য", স্কেল = ট্রু "ব্যবহার করছি তার অর্থ কি এর অর্থ হ'ল আমার ভ্যারাম্যাক্স $ লোডিংগুলি দ্বারা গুণ করার আগে আমার ডেটাটি কেন্দ্রীভূত করা এবং স্কেল করা উচিত?
স্কট

1
হ্যাঁ, ভাল কথা, আমার ভুল কেন্দ্রীভূত হওয়া কোনও বিষয় নয়, যেমন কেবলমাত্র পয়েন্টগুলি স্থানান্তরিত করে, তবে স্কেলটি মূল উপাদানগুলি গণনা করতে একই রকম হওয়া উচিত, যা স্কেলিংয়ের ক্ষেত্রে অদ্বিতীয় নয়।
এফ। টুসেল

2
আমি উল্লেখ করতে ভুলে গেছি যে আপনি যদি ইতিমধ্যে এটি না করে থাকেন তবে আপনি ফাংশন ফাংশনালটি দেখতে চাইতে পারেন। এটি প্রধান উপাদানগুলির চেয়ে ফ্যাক্টর বিশ্লেষণ করে তবে স্কোরগুলি সরাসরি ফিরিয়ে দেয়।
এফ টিসেল

2
-1। আমি বিশ্বাস করি যে এই উত্তরটি সঠিক নয় এবং এটি প্রদর্শনের জন্য আমি আমার নিজের উত্তর পোস্ট করেছি। ঘোরানো লোডিংগুলিতে অরথোগোনাল প্রজেকশন দ্বারা কেউ আবর্তিত স্কোর পেতে পারে না (কারণ তারা আর অর্থোগোনাল নয়)। সঠিক স্কোরগুলি পাওয়ার সহজ উপায়টি হ'ল ব্যবহার করা psych::principal। [এগুলি বাদ দিয়ে, উপরের মন্তব্যে যেমন আলোচনা করা হয়েছে, তেমনভাবে স্কেলিং সন্নিবেশ করানোর জন্য আমি আপনার উত্তর সম্পাদনা করেছি]]
অ্যামিবা বলেছেন রিনস্টেট মনিকা

1
দুঃখিত আমার খারাপ. আমি কে বোঝাতে । আমি এখন এটি সংশোধন করব। এবং ... হ্যাঁ, এখন আমি এটি দেখছি, এর অরথোগোনাল কলাম রয়েছে তাই এখনও আমাদের একটি ইউনিট ম্যাট্রিক্স পেতে পারে, তাই না? যদি তাই হয় তবে আমি আসল পোস্টারকে ভুল পথে দেখি নি, আপনি আমার আত্মা থেকে একটি বোঝা তুলছেন! কে × এন ভি ( টি টি কে ভি টি কে ) ( ভি কে টি কে )Vkk×nV(TkTVkT)(VkTk)
এফ টিসেল

0

আমি এমন একটি সমাধান খুঁজছিলাম যা এডি 4 ব্যবহার করে পিসিএর জন্য কাজ করে ।

দয়া করে নীচের ফাংশনটি সন্ধান করুন:

library(ade4)

irisX <- iris[,1:4]      # Iris data
ncomp <- 2
# With ade4
dudi_iris <- dudi.pca(irisX, scannf = FALSE, nf = ncomp)

rotate_dudi.pca <- function(pca, ncomp = 2) {

  rawLoadings <- as.matrix(pca$c1[,1:ncomp]) %*% diag(sqrt(pca$eig), ncomp, ncomp)
  pca$c1 <- rawLoadings
  pca$li <- scale(pca$li[,1:ncomp]) %*% varimax(rawLoadings)$rotmat

  return(pca)
} 
rot_iris <- rotate_dudi.pca(pca = dudi_iris, ncomp = ncomp)
print(rot_iris$li[1:5,])                   # Scores computed via rotating the scores
#>        [,1]       [,2]
#> 1 -1.083475 -0.9067262
#> 2 -1.377536  0.2648876
#> 3 -1.419832 -0.1165198
#> 4 -1.471607  0.1474634
#> 5 -1.095296 -1.0949536

2020-01-14 তারিখে ডিপেক্স প্যাকেজ দ্বারা নির্মিত (v0.3.0)

এই সাহায্য আশা করি!


উত্তরের জন্য আপনাকে এই স্থানটি ব্যবহার করতে হবে।
মাইকেল আর চেরনিক

আমার কাছে মনে হয়েছিল যে সম্পূর্ণতার জন্য একটি উত্তর যুক্ত করা বৈধ। এই প্রশ্নের মতো: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 626862747474২ / ড্রে- এ- সার্কেল- উইথ- জিপিপ্লট ২ । আমি প্রয়োজনে আমার প্রস্তাব সরানো খুশি হবে।
আলাইন ডানেট

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