একাধিক সুপ্ত শ্রেণির মডেল থেকে ফলাফল ভিজুয়ালাইজ করা


9

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

ক্লাস = (i) সহ মডেলটিতে শ্রেণিবদ্ধ পর্যবেক্ষণগুলি শ্রেণি = (i + 1) দিয়ে মডেল দ্বারা কীভাবে বিতরণ করা হয় তা বোঝার চেষ্টা করার জন্য আমি প্রায়শই বিভিন্ন মডেলটি দেখতে খুব দরকারী বলে মনে করি। খুব কমপক্ষে আপনি মাঝেমধ্যে খুব দৃust় ক্লাস্টারগুলি দেখতে পারেন যা মডেলটির ক্লাস সংখ্যা নির্বিশেষে বিদ্যমান exist

আমি এই সম্পর্কগুলিকে গ্রাফ করার, কাগজপত্রগুলিতে এই জটিল ফলাফলগুলি আরও সহজেই যোগাযোগ করার এবং স্ট্যাটিস্টিকাল ভিত্তিক নয় এমন সহকর্মীদের কাছে চাই। আমি কল্পনা করেছিলাম যে এটি কোনও ধরণের সাধারণ নেটওয়ার্ক গ্রাফিক্স প্যাকেজ ব্যবহার করে আরে করা খুব সহজ তবে আমি কীভাবে তা জানি না।

যে কেউ দয়া করে আমাকে সঠিক দিকে নির্দেশ করতে পারে। নীচে একটি উদাহরণ ডেটাসেট পুনরুত্পাদন করার জন্য কোড রয়েছে is প্রতিটি ভেক্টর একাদশটি সম্ভাব্য ক্লাস সহ একটি মডেলে 100 টি পর্যবেক্ষণের শ্রেণিবিন্যাস উপস্থাপন করে। আমি গ্রাফ করতে চাই যে পর্যবেক্ষণগুলি (সারিগুলি) কলামগুলি জুড়ে শ্রেণি থেকে শ্রেণিতে স্থানান্তর করে।

x1 <- sample(1:1, 100, replace=T)
x2 <- sample(1:2, 100, replace=T)
x3 <- sample(1:3, 100, replace=T)
x4 <- sample(1:4, 100, replace=T)
x5 <- sample(1:5, 100, replace=T)

results <- cbind (x1, x2, x3, x4, x5)

আমি কল্পনা করি এমন একটি গ্রাফ তৈরির একটি উপায় আছে যেখানে নোডগুলি শ্রেণিবিন্যাস এবং প্রান্তগুলি প্রতিফলিত করে (ওজন বা রঙের সাহায্যে) একটি মডেল থেকে পরের মডেলে শ্রেণিবিন্যাস থেকে সরানো পর্যবেক্ষণের% যেমন

এখানে চিত্র বর্ণনা লিখুন

আপডেট: ইগ্রাফ প্যাকেজটি নিয়ে কিছুটা অগ্রগতি। উপরের কোড থেকে শুরু হচ্ছে ...

পিএলসিএএর ফলাফলগুলি শ্রেণীর সদস্যপদ বর্ণনা করার জন্য একই নম্বরগুলিকে পুনর্ব্যবহার করে, তাই আপনাকে কিছুটা পুনর্নির্মাণ করা দরকার।

N<-ncol(results) 
n<-0
for(i in 2:N) {
results[,i]<- (results[,i])+((i-1)+n)
n<-((i-1)+n)
}

তারপরে আপনাকে সমস্ত ক্রস-ট্যাবুলেশন এবং তাদের ফ্রিকোয়েন্সি পেতে হবে এবং এগুলি সমস্ত প্রান্তকে সংজ্ঞায়িত করে একটি ম্যাট্রিক্সে আবদ্ধ করতে হবে। এটি করার জন্য আরও অনেক মার্জিত উপায় রয়েছে।

results <-as.data.frame(results)

g1           <- count(results,c("x1", "x2"))

g2           <- count(results,c("x2", "x3"))
colnames(g2) <- c("x1", "x2", "freq")

g3           <- count(results,c("x3", "x4"))
colnames(g3) <- c("x1", "x2", "freq")

g4           <- count(results,c("x4", "x5"))
colnames(g4) <- c("x1", "x2", "freq")

results <- rbind(g1, g2, g3, g4)

library(igraph)

g1 <- graph.data.frame(results, directed=TRUE)

plot.igraph(g1, layout=layout.reingold.tilford)

এখানে চিত্র বর্ণনা লিখুন

আমার মনে হয় ইগ্রাফ অপশনগুলির সাথে আরও খেলার সময় Time


1
যদি আপনি এমন কোনও সমাধান খুঁজে পান যা আপনাকে সন্তুষ্ট করে, তবে আপনি উত্তর হিসাবে নিজের
গালা


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

উত্তর:


3

এখনও অবধি, আমি খুঁজে পেয়েছি সেরা বিকল্পগুলি, আপনার পরামর্শগুলির জন্য ধন্যবাদ, এগুলি:

  library (igraph)
  library (ggparallel)

# Generate random data

  x1 <- sample(1:1, 1000, replace=T)
  x2 <- sample(2:3, 1000, replace=T)
  x3 <- sample(4:6, 1000, replace=T)
  x4 <- sample(7:10, 1000, replace=T)
  x5 <- sample(11:15, 1000, replace=T)
  results <- cbind (x1, x2, x3, x4, x5)
  results <-as.data.frame(results)

# Make a data frame for the edges and counts

  g1           <- count (results, c("x1", "x2"))

  g2           <- count (results, c("x2", "x3"))
  colnames(g2) <- c     ("x1", "x2", "freq")

  g3           <- count (results, c("x3", "x4"))
  colnames(g3) <- c     ("x1", "x2", "freq")

  g4           <- count (results, c("x4", "x5"))
  colnames(g4) <- c     ("x1", "x2", "freq")

  edges        <- rbind (g1, g2, g3, g4)

# Make a data frame for the class sizes

  h1            <- count (results, c("x1"))

  h2            <- count (results, c("x2"))
  colnames (h2) <- c     ("x1", "freq")

  h3            <- count (results, c("x3"))
  colnames (h3) <- c     ("x1", "freq")

  h4            <- count (results, c("x4"))
  colnames (h4) <- c     ("x1", "freq")

  h5            <- count (results, c("x5"))
  colnames (h5) <- c     ("x1", "freq")

  cSizes        <- rbind (h1, h2, h3, h4, h5)

# Graph with igraph

  gph    <- graph.data.frame (edges, directed=TRUE)

  layout <- layout.reingold.tilford (gph, root = 1)
  plot (gph,
        layout           = layout,
        edge.label       = edges$freq, 
        edge.curved      = FALSE,
        edge.label.cex   = .8,
        edge.label.color = "black",
        edge.color       = "grey",
        edge.arrow.mode  = 0,
        vertex.label     = cSizes$x1 , 
        vertex.shape     = "square",
        vertex.size      = cSizes$freq/20)

# The same idea, using ggparallel

  a <- c("x1", "x2", "x3", "x4", "x5")

  ggparallel (list (a), 
              data        = results, 
              method      = "hammock", 
              asp         = .7, 
              alpha       = .5, 
              width       = .5, 
              text.angle = 0)

ইগ্রাফ দিয়ে শেষ

আইগ্রাফ সহ

জিগাপ্যারালাল দিয়ে সম্পন্ন হয়েছে

জিগাপ্যারালাল সহ

একটি জার্নালে ভাগ করার জন্য এখনও খুব রুক্ষ, তবে আমি অবশ্যই এগুলি খুব দরকারী বলে একটি তাত্ক্ষণিকভাবে পেয়েছি।

এই প্রশ্ন থেকে স্ট্যাক ওভারফ্লো সম্পর্কে একটি সম্ভাব্য বিকল্পও রয়েছে , তবে আমি এখনও এটি বাস্তবায়নের সুযোগ পাইনি; এবং অন্য সম্ভাবনা এখানে


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