এক প্লটে কীভাবে ফিটেড গ্রাফ এবং গামা বিতরণের প্রকৃত গ্রাফ আঁকবেন?


10

প্রয়োজনীয় প্যাকেজটি লোড করুন।

library(ggplot2)
library(MASS)

গামা বিতরণে লাগানো 10,000 নম্বর উত্পন্ন করুন।

x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]

সম্ভাব্যতার ঘনত্বের ফাংশনটি আঁকুন, ধারণা করা হয় আমরা কোন ডিস্ট্রিবিউশন x ফিট করে we

t1 <- as.data.frame(table(x))
names(t1) <- c("x","y")
t1 <- transform(t1,x=as.numeric(as.character(x)))
t1$y <- t1$y/sum(t1[,2])
ggplot() + 
  geom_point(data = t1,aes(x = x,y = y)) + 
  theme_classic()

পিডিএফ

গ্রাফ থেকে, আমরা শিখতে পারি যে এক্স এর বিতরণটি গামা বিতরণের মতো, সুতরাং আমরা গামার বিতরণের আকার এবং হারের পরামিতিগুলি পেতে fitdistr()প্যাকেজটিতে ব্যবহার করি MASS

fitdistr(x,"gamma") 
##       output 
##       shape           rate    
##   2.0108224880   0.2011198260 
##  (0.0083543575) (0.0009483429)

একই প্লটে আসল পয়েন্ট (কালো বিন্দু) এবং লাগানো গ্রাফ (লাল রেখা) আঁকুন এবং এখানে প্রশ্নটি রয়েছে, দয়া করে প্রথমে প্লটটি দেখুন।

ggplot() + 
  geom_point(data = t1,aes(x = x,y = y)) +     
  geom_line(aes(x=t1[,1],y=dgamma(t1[,1],2,0.2)),color="red") + 
  theme_classic()

লাগানো গ্রাফ

আমার দুটি প্রশ্ন আছে:

  1. বাস্তব পরামিতি হয় shape=2, rate=0.2এবং পরামিতি আমি ফাংশন ব্যবহার fitdistr()পেতে shape=2.01, rate=0.20। এই দুটি প্রায় একই, তবে কেন লাগানো গ্রাফটি আসল পয়েন্টটি ভালভাবে ফিট করে না, লাগানো গ্রাফটিতে অবশ্যই কিছু ভুল থাকতে হবে, বা আমি যেভাবে ফিটিত গ্রাফটি আঁকছি এবং প্রকৃত পয়েন্টগুলি সম্পূর্ণ ভুল, আমার কী করা উচিত? ?

  2. আমি মডেল আমি কায়েম এর প্যারামিটার, কোন দিকে আমি মডেল, রৈখিক মডেল বা P-মানের জন্য আরএসএস (অবশিষ্ট বর্গ সমষ্টি) ভালো কিছু মূল্যায়ন পেতে shapiro.test(), ks.test()এবং অন্যান্য পরীক্ষা?

আমি পরিসংখ্যানগত জ্ঞানে দরিদ্র, আপনি দয়া করে আমাকে সাহায্য করতে পারেন?

PS: আমি গুগল, স্ট্যাকওভারফ্লো এবং সিভিতে বহুবার অনুসন্ধান করেছি, তবে এই সমস্যার সাথে সম্পর্কিত কোনও কিছুই পাইনি


1
আমি প্রথমে এই প্রশ্নটি স্ট্যাকওভারফ্লোতে জিজ্ঞাসা করেছি, তবে মনে হয়েছিল যে এই প্রশ্নটি সিভিরই, বন্ধুটি বলেছিল আমি সম্ভাব্যতা গণ ফাংশন এবং সম্ভাবনার ঘনত্বের ফাংশনটি ভুল বুঝেছি, আমি এটি পুরোপুরি বুঝতে পারি না, তাই আবার এই প্রশ্নের উত্তর দেওয়ার জন্য আমাকে ক্ষমা করুন forgive সিভি
লিঙ্গ ঝাং

1
আপনার ঘনত্বের গণনাটি ভুল। গণনা করার একটি সহজ উপায় h <- hist(x, 1000, plot = FALSE); t1 <- data.frame(x = h$mids, y = h$density)

@ পাসল আপনি ঠিক বলেছেন, আমি কিউ 1 সমাধান করেছি, আপনাকে ধন্যবাদ!
লিং ঝাং

নীচে উত্তর দেখুন, densityফাংশন একটি দরকারী এক।

আমি এটি পেয়েছি, আমার প্রশ্ন সম্পাদনা এবং সমাধান করার জন্য আপনাকে আবার ধন্যবাদ
লিং জাং

উত্তর:


11

প্রশ্ন 1

আপনি যেভাবে হাত দিয়ে ঘনত্ব গণনা করছেন তা ভুল বলে মনে হচ্ছে। গামা বিতরণ থেকে এলোমেলো সংখ্যার গোল করার দরকার নেই। @ প্যাসাল হিসাবে উল্লেখ করা হয়েছে, আপনি পয়েন্টগুলির ঘনত্বের পরিকল্পনা করতে একটি হিস্টোগ্রাম ব্যবহার করতে পারেন। নীচের উদাহরণে, আমি densityঘনত্ব অনুমান করতে এবং এটি পয়েন্ট হিসাবে প্লট করতে ফাংশনটি ব্যবহার করি । আমি পয়েন্ট এবং হিস্টোগ্রামের সাথে উভয়ই ফিট উপস্থাপন করি:

library(ggplot2)
library(MASS)

# Generate gamma rvs

x <- rgamma(100000, shape = 2, rate = 0.2)

den <- density(x)

dat <- data.frame(x = den$x, y = den$y)

# Plot density as points

ggplot(data = dat, aes(x = x, y = y)) + 
  geom_point(size = 3) +
  theme_classic()

গামা ঘনত্ব

# Fit parameters (to avoid errors, set lower bounds to zero)

fit.params <- fitdistr(x, "gamma", lower = c(0, 0))

# Plot using density points

ggplot(data = dat, aes(x = x,y = y)) + 
  geom_point(size = 3) +     
  geom_line(aes(x=dat$x, y=dgamma(dat$x,fit.params$estimate["shape"], fit.params$estimate["rate"])), color="red", size = 1) + 
  theme_classic()

গামা ঘনত্ব ফিট

# Plot using histograms

ggplot(data = dat) +
  geom_histogram(data = as.data.frame(x), aes(x=x, y=..density..)) +
  geom_line(aes(x=dat$x, y=dgamma(dat$x,fit.params$estimate["shape"], fit.params$estimate["rate"])), color="red", size = 1) + 
  theme_classic()

ফিট সহ হিস্টোগ্রাম

@ প্যাসাল প্রদত্ত সমাধানটি এখানে:

h <- hist(x, 1000, plot = FALSE)
t1 <- data.frame(x = h$mids, y = h$density)

ggplot(data = t1, aes(x = x, y = y)) + 
  geom_point(size = 3) +     
  geom_line(aes(x=t1$x, y=dgamma(t1$x,fit.params$estimate["shape"], fit.params$estimate["rate"])), color="red", size = 1) + 
  theme_classic()

হিস্টোগ্রাম ঘনত্ব পয়েন্ট

প্রশ্ন 2

ফিটের নেকী মূল্যায়ন করতে আমি প্যাকেজটি সুপারিশ করি fitdistrplus। এটি এখানে দুটি বিতরণে ফিট করার জন্য এবং গ্রাফিক এবং সংখ্যাসূচকভাবে তাদের ফিটগুলির তুলনা করতে ব্যবহার করা যেতে পারে। কমান্ডটি gofstatবিভিন্ন ব্যবস্থা যেমন এআইসি, বিআইসি এবং কিছু গোফ-পরিসংখ্যান যেমন কেএস-টেস্ট ইত্যাদির প্রিন্ট করে These আরও উত্তর আমার উত্তর এখানে পাওয়া যাবে :

library(fitdistrplus)

x <- c(37.50,46.79,48.30,46.04,43.40,39.25,38.49,49.51,40.38,36.98,40.00,
       38.49,37.74,47.92,44.53,44.91,44.91,40.00,41.51,47.92,36.98,43.40,
       42.26,41.89,38.87,43.02,39.25,40.38,42.64,36.98,44.15,44.91,43.40,
       49.81,38.87,40.00,52.45,53.13,47.92,52.45,44.91,29.54,27.13,35.60,
       45.34,43.37,54.15,42.77,42.88,44.26,27.14,39.31,24.80,16.62,30.30,
       36.39,28.60,28.53,35.84,31.10,34.55,52.65,48.81,43.42,52.49,38.00,
       38.65,34.54,37.70,38.11,43.05,29.95,32.48,24.63,35.33,41.34)

fit.weibull <- fitdist(x, "weibull")
fit.gamma <- fitdist(x, "gamma", lower = c(0, 0))

# Compare fits 

graphically

par(mfrow = c(2, 2))
plot.legend <- c("Weibull", "Gamma")
denscomp(list(fit.weibull, fit.gamma), fitcol = c("red", "blue"), legendtext = plot.legend)
qqcomp(list(fit.weibull, fit.gamma), fitcol = c("red", "blue"), legendtext = plot.legend)
cdfcomp(list(fit.weibull, fit.gamma), fitcol = c("red", "blue"), legendtext = plot.legend)
ppcomp(list(fit.weibull, fit.gamma), fitcol = c("red", "blue"), legendtext = plot.legend)

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

ফিট তুলনা

# Compare goodness of fit

gofstat(list(fit.weibull, fit.gamma))

Goodness-of-fit statistics
                             1-mle-weibull 2-mle-gamma
Kolmogorov-Smirnov statistic    0.06863193   0.1204876
Cramer-von Mises statistic      0.05673634   0.2060789
Anderson-Darling statistic      0.38619340   1.2031051

Goodness-of-fit criteria
                               1-mle-weibull 2-mle-gamma
Aikake's Information Criterion      519.8537    531.5180
Bayesian Information Criterion      524.5151    536.1795

1
আমি সংশোধন করতে পারছি না, তবে আপনার অ্যাসোভারে fitdistrplusএবং ব্যবহারকারীর জন্য ব্যাকটিকটি নিয়ে আপনার সমস্যা আছেgofstat

2
এক-লাইন সুপারিশ: কোয়ান্টাইল-কোয়ান্টাইল প্লট এই উদ্দেশ্যে সেরা একক গ্রাফ। পর্যবেক্ষণ করা এবং লাগানো ঘনত্বের তুলনা করা ভাল hard উদাহরণস্বরূপ, বৈজ্ঞানিকভাবে এবং ব্যবহারিকভাবে প্রায়শই খুব গুরুত্বপূর্ণ যে উচ্চ মূল্যবোধগুলিতে নিয়মতান্ত্রিক বিচ্যুতি চিহ্নিত করা শক্ত।
নিক কক্স

1
খুশি আমরা সম্মত। ওপি 10,000 পয়েন্ট দিয়ে শুরু হয়। অনেক সমস্যা অনেক কম দিয়ে শুরু হয় এবং তারপরে ঘনত্ব সম্পর্কে ভাল ধারণা পাওয়া সমস্যাযুক্ত হতে পারে।
নিক কক্স

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

1
স্ট্রেটার ভাল হয়। এছাড়াও, দেখুন stats.stackexchange.com/questions/111010/… নীতিগুলি একই। লিনিয়ারিটি থেকে সিস্টেমিক বিচ্যুতি একটি সমস্যা।
নিক কক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.