সায়পি ব্যবহার করে কোয়ান্টাইল-কোয়ান্টাইল প্লট


87

আপনি কীভাবে পাইথন ব্যবহার করে কিউকিউ প্লট তৈরি করবেন?

ধরে নিচ্ছি যে আপনার কাছে পরিমাপের একটি বিশাল সেট রয়েছে এবং কিছু প্লট ফাংশন ব্যবহার করছেন যা এক্সওয়াই-মানগুলি ইনপুট হিসাবে গ্রহণ করে। ফাংশনটি কিছু বিতরণের (সাধারণ, ইউনিফর্ম ...) সম্পর্কিত কোয়ান্টাইলগুলির বিরুদ্ধে পরিমাপের পরিমাণের প্লট করা উচিত।

ফলস্বরূপ প্লট আমাদের পরিমাপের পরে মূল্যায়ন করতে দেয় অনুমিত বন্টন অনুসরণ করে বা না follows

http://en.wikedia.org/wiki/Quantile- Quantil_plot

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


4
আপনি কি তাকিয়েছেন probplot? docs.scipy.org/doc/scipy/references/generated/…
জেফ

4
qqplot এবং প্রচুর অপশন সহ প্রোবপ্লট: statsmodels.sourceforge.net/devel/…
জোসেফ

উত্তর:


105

আমি মনে করি এটি scipy.stats.probplotআপনি যা চান তা করবে। আরও বিশদ জন্য ডকুমেন্টেশন দেখুন ।

import numpy as np 
import pylab 
import scipy.stats as stats

measurements = np.random.normal(loc = 20, scale = 5, size=100)   
stats.probplot(measurements, dist="norm", plot=pylab)
pylab.show()

ফলাফল

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


কখনও কখনও আমি কিছু বিন্দুবিহীন আত্মবিশ্বাসের লাইন দেখেছি যা মাঝখানে সংকীর্ণ হয় এবং শেষের দিকে শিংগা জাতীয়। আপনি কি এই "গাইড লাইন" প্লটে যুক্ত করতে পারবেন?
নরফেল্ড

21
ঠিক আছে তবে এটি সম্ভাবনার প্লট (একটি তাত্ত্বিক বিতরণের বনাম একটি নমুনা)। একটি কিউকি প্লট দুটি নমুনার তুলনা করে। itl.nist.gov/div898/andbook/eda/section3/qqplot.htm itl.nist.gov/div898/handbook/eda/section3/probplot.htm
রিকি রবিনসন

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

4
আমি @ রিকি রবিনসনের সাথে একমত, এটি এই প্রশ্নের সঠিক উত্তর নয়। কিউকিউ প্লট এবং প্রোব প্লটগুলি উভয়ই অন্যটির বিপরীতে একটি বিতরণের কোয়ান্টাইলগুলি সত্ত্বেও আলাদা।
ফ্লোরেন্ট

49

ব্যবহার qqplotএর statsmodels.apiঅন্য কোনো বিকল্প নেই:

খুব মৌলিক উদাহরণ:

import numpy as np
import statsmodels.api as sm
import pylab

test = np.random.normal(0,1, 1000)

sm.qqplot(test, line='45')
pylab.show()

ফলাফল:

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

ডকুমেন্টেশন এবং আরও উদাহরণ এখানে


4
@ tommy.carstensen এটা ইচ্ছাকৃতভাবে থেকে পৃথক ছিল scipyথেকেstatsmodels
SARose

4
শুধু একটি নোট. আপনার উদাহরণ মানক সাধারণ বিতরণের জন্য রেখাটি আঁকবে। @ জিওফ উদাহরণের মতো একটি মানক রেখার জন্য (প্রদত্ত নমুনার মানক বিচ্যুতি দ্বারা পরিমিত এবং গড়টি যোগ করার জন্য) পেতে, আপনাকে লাইন = '45 'এর পরিবর্তে লাইন =' s 'সেট করতে হবে
মাইক

এই উত্তরের জন্য +1। আমি মনে করি পরিসংখ্যানগুলির জন্য একটি একক প্যাকেজে আরও সংস্থান দেওয়া উচিত। statsmodelsএকটি ভাল পছন্দ হবে।
কেন টি

20

আপনার যদি একটি স্যাম্পল বনাম অন্যের কিউকিউ প্লট করতে হয় তবে স্ট্যাটাসমডেলগুলিতে কিউকিপ্লট_2 নমুনা () অন্তর্ভুক্ত থাকে। উপরের মন্তব্যে রিকি রবিনসনের মতো এটিই আমি কিউকিউ প্লট হিসাবে বনাম সম্ভাবনা প্লট হিসাবে মনে করি যা তাত্ত্বিক বিতরণের বিরুদ্ধে একটি নমুনা।

HTTP


11
এই কিউকিপ্লাট প্রয়োগটি বিভিন্ন মাপের সাথে নমুনাগুলি পরিচালনা করে না বলে মনে হয়, যা মজার বিষয় কারণ একটি কিউকিউ প্লটের একটি বড় সুবিধা হ'ল যে কোনও একটি বিভিন্ন আকারের সাথে নমুনাগুলির তুলনা করতে পারে ...
রবার্ট মুইল

5

আমি এই নিয়ে এসেছি। হতে পারে আপনি এটি উন্নতি করতে পারেন। বিশেষত বিতরণের পরিমাণটি উত্পন্ন করার পদ্ধতিটি আমার কাছে জটিল মনে হয়।

np.random.normalঅন্যান্য বিতরণের np.randomবিরুদ্ধে ডেটা তুলনা করতে আপনি অন্য যে কোনও বিতরণ দিয়ে প্রতিস্থাপন করতে পারেন ।

#!/bin/python

import numpy as np

measurements = np.random.normal(loc = 20, scale = 5, size=100000)

def qq_plot(data, sample_size):
    qq = np.ones([sample_size, 2])
    np.random.shuffle(data)
    qq[:, 0] = np.sort(data[0:sample_size])
    qq[:, 1] = np.sort(np.random.normal(size = sample_size))
    return qq

print qq_plot(measurements, 1000)


2

পাইথন এবং আর ওয়ার্ল্ডসের কিউকিউ প্লট এবং সম্ভাব্যতা প্লটের চারপাশে বিভ্রান্তি যুক্ত করতে, সায়পি প্যানুয়ালটি এটি বলে:

" probplotএকটি সম্ভাব্যতা প্লট উত্পন্ন করে, যা কিউকিউ বা পিপি প্লটের সাথে বিভ্রান্ত হওয়া উচিত নয় St

যদি আপনি চেষ্টা করে scipy.stats.probplotদেখেন তবে দেখতে পাবেন যে এটি কোনও তাত্ত্বিক বিতরণের সাথে একটি ডেটাসেটের তুলনা করে। কিউকিউ প্লট, ওটিওএইচ, দুটি ডেটাसेट (নমুনা) তুলনা করুন।

আর এর ফাংশন রয়েছে qqnorm, qqplotএবং qqline। আর সহায়তা থেকে (সংস্করণ 3.6.3):

qqnorm একটি জেনেরিক ফাংশন হ'ল ডিফল্ট পদ্ধতি যা এর y এর মানগুলির একটি QQ প্লট তৈরি করে। qqlineএকটি "তাত্ত্বিক" -এ একটি লাইন যুক্ত করে, ডিফল্ট হিসাবে স্বাভাবিক, কোয়ান্টাইল-কোয়ান্টাইল প্লট যা প্রব্যাক্ট কোয়ান্টাইলগুলির মধ্য দিয়ে যায়, ডিফল্টরূপে প্রথম এবং তৃতীয় কোয়ার্টাইলস।

qqplot দুটি ডেটাসেটের কিউকিউ প্লট তৈরি করে।

সংক্ষেপে বলতে গেলে, আর এর qqnormঅফার একই কার্যকারিতা যা scipy.stats.probplotডিফল্ট সেটিং প্রদান করে dist=norm। তবে তারা এটিকে ডেকেছে qqnormএবং এটি "একটি সাধারণ কিউকিউ প্লট উত্পাদন করার" কথাটি ব্যবহারকারীদের সহজেই বিভ্রান্ত করতে পারে।

অবশেষে, সতর্কতার একটি শব্দ। এই প্লটগুলি যথাযথ পরিসংখ্যান পরীক্ষার প্রতিস্থাপন করে না এবং কেবল উদাহরণস্বরূপ ব্যবহার করা উচিত।


1

আপনি বোকেহ ব্যবহার করতে পারেন

from bokeh.plotting import figure, show
from scipy.stats import probplot
# pd_series is the series you want to plot
series1 = probplot(pd_series, dist="norm")
p1 = figure(title="Normal QQ-Plot", background_fill_color="#E8DDCB")
p1.scatter(series1[0][0],series1[0][1], fill_color="red")
show(p1)

1
import numpy as np 
import pylab 
import scipy.stats as stats
measurements = np.random.normal(loc = 20, scale = 5, size=100)   
stats.probplot(measurements, dist="norm", plot=pylab)
pylab.show()

এখানে প্রোবপ্লট গ্রাফ পরিমাপ বনাম স্বাভাবিক বিতরণ আঁকেন যা স্পষ্ট করে তোলে = "আদর্শ"


0

আপনার নমুনা কত বড়? ওপেনসিটি লাইব্রেরি ব্যবহার করে যে কোনও বিতরণের বিরুদ্ধে আপনার ডেটা পরীক্ষা করার জন্য এখানে আরও একটি বিকল্প রয়েছে । নীচের উদাহরণে, আমি ইউনিফর্ম বিতরণ থেকে 1.000.000 সংখ্যার একটি নমুনা এক্স উত্পন্ন করি এবং এটি একটি সাধারণ বিতরণের বিরুদ্ধে পরীক্ষা করি। আপনি যদি এইটিকে পুনরায় আকার দিন তবে আপনার ডেটা দ্বারা এক্স প্রতিস্থাপন করতে পারেনx= [[x1], [x2], .., [xn]]

import openturns as ot

x = ot.Uniform().getSample(1000000)
g = ot.VisualTest.DrawQQplot(x, ot.Normal())
g

আমার জুপিটার নোটবুকে, আমি দেখতে পাচ্ছি: এখানে চিত্র বর্ণনা লিখুন

আপনি যদি কোনও স্ক্রিপ্ট লিখছেন তবে আপনি এটি আরও সঠিকভাবে করতে পারেন

from openturns.viewer import View`
import matplotlib.pyplot as plt
View(g)
plt.show()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.