কোন পদ্ধতিটি সবচেয়ে ভাল কাজ করে তা দেখতে আমি সিমুলেটেড ডেটাতে কয়েকটি পরীক্ষা চালিয়েছি। দয়া করে নীচে আমার অনুসন্ধানগুলি পড়ুন।
দুটি ভিন্ন পরিস্থিতি দেখে নেওয়া যাক - প্রথম যেখানে ডিইউআই এবং লিকার স্টোরগুলির মধ্যে সরাসরি সম্পর্ক নেই এবং দ্বিতীয় যেখানে আমাদের সরাসরি সম্পর্ক রয়েছে। তারপরে কোন পদ্ধতিটি সবচেয়ে ভাল কাজ করে তা দেখতে প্রতিটি পদ্ধতি পরীক্ষা করে দেখুন।
কেস 1: সরাসরি সম্পর্ক নয় তবে উভয়ই জনসংখ্যার সাথে সম্পর্কিত
library(rmutil)
############
## Simulating Data
set.seed(111)
# Simulating city populations
popln <- rpareto(n=10000,m=10000,s=1.2)
# Simulating DUI numbers
e1 <- rnorm(10000,mean=0,sd=15)
DUI = 100 + popln * 0.04 + e1
summary(DUI)
truehist(log(DUI))
# Simulating Nbr of Liquor stores
e2 <- rnorm(100,mean=0,sd=5)
Nbr_Liquor_Stores = 20 + popln * 0.009 + e2
summary(Nbr_Liquor_Stores)
truehist(log(Nbr_Liquor_Stores))
dat <- data.frame(popln,DUI,Nbr_Liquor_Stores)
এখন যেহেতু ডেটা সিম্যুলেটেড করা হয়েছে, আসুন দেখুন প্রতিটি পদ্ধতি কীভাবে ভাড়া নেওয়া হয়।
## Method 0: Simple OLS
fit0 <- lm(DUI~Nbr_Liquor_Stores,data=dat)
summary(fit0)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.4353630 0.2801544 33.68 <2e-16 ***
Nbr_Liquor_Stores 4.4444207 0.0001609 27617.49 <2e-16 ***
প্রত্যাশার মতো এনবিআর_লিকোয়ার_সত্তর অত্যন্ত তাত্পর্যপূর্ণ ores যদিও সম্পর্ক পরোক্ষ।
## Method 1: Divide Liquor Stores by population and then regress
fit1 <- lm( I(DUI/popln) ~ Nbr_Liquor_Stores, data=dat)
summary(fit1)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.981e-01 4.143e-02 12.022 <2e-16 ***
Nbr_Liquor_Stores -1.325e-05 2.380e-05 -0.557 0.578
এনবিআর_লিকার_সত্তরের কোনও তাত্পর্য নেই। কাজ দেখে মনে হচ্ছে, তবে এখনও সিদ্ধান্তে ঝাঁপিয়ে পড়ে না।
## Method 2: Divide Liquor Stores by population and then regress
fit2 <- lm( DUI ~ Nbr_Liquor_Stores + popln, data=dat)
summary(fit2)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.003e+02 6.022e-01 166.569 <2e-16 ***
Nbr_Liquor_Stores -1.603e-02 3.042e-02 -0.527 0.598
popln 4.014e-02 2.738e-04 146.618 <2e-16 ***
এনবিআর_লিকার_সত্তারগুলি উল্লেখযোগ্য নয়, পি-মানটিও পদ্ধতি 1-এর খুব কাছে।
## Method 3: "DUI per capita" on "liquer stores per capita" and "population size"
fit3 <- lm( I(DUI/popln) ~ I(Nbr_Liquor_Stores/popln) + popln, data=dat)
summary(fit3)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.841e-02 1.300e-02 2.187 0.0288 *
I(Nbr_Liquor_Stores/popln) 4.886e+00 1.603e-02 304.867 <2e-16 ***
popln -8.426e-09 6.675e-08 -0.126 0.8996
(এনবিআর_লিকর_সেটোর / পপলন) অত্যন্ত তাৎপর্যপূর্ণ! এমনটি আশা করেননি, সম্ভবত আপনার সমস্যার বিবৃতি দেওয়ার জন্য এই পদ্ধতিটি সেরা নয়।
কেস 2: জনসংখ্যা এবং এনবিআর_লিকোয়ার_স্টোর উভয়ের সাথেই সরাসরি সম্পর্ক
### Simulating Data
set.seed(111)
# Simulating city populations
popln <- rpareto(n=10000,m=10000,s=1.2)
# Simulating Nbr of Liquor stores
e2 <- rnorm(100,mean=0,sd=5)
Nbr_Liquor_Stores = 20 + popln * 0.009 + e2
summary(Nbr_Liquor_Stores)
truehist(log(Nbr_Liquor_Stores))
# Simulating DUI numbers
e1 <- rnorm(10000,mean=0,sd=15)
DUI = 100 + popln * 0.021 + Nbr_Liquor_Stores * 0.01 + e1
summary(DUI)
truehist(log(DUI))
dat <- data.frame(popln,DUI,Nbr_Liquor_Stores)
আসুন এই দৃশ্যের প্রতিটি পদ্ধতির কর্মক্ষমতা দেখুন।
## Method 0: Simple OLS
fit0 <- lm(DUI~Nbr_Liquor_Stores,data=dat)
summary(fit0)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.244e+01 1.951e-01 268.8 <2e-16 ***
Nbr_Liquor_Stores 2.343e+00 1.121e-04 20908.9 <2e-16 ***
প্রত্যাশিত, তবে কার্যকারণ সূত্রগুলি তৈরি করার দুর্দান্ত কোনও পদ্ধতি নয়।
## Method 1: Divide Liquor Stores by population and then regress
fit1 <- lm( I(DUI/popln) ~ Nbr_Liquor_Stores, data=dat)
summary(fit1)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.705e-01 4.005e-02 11.747 <2e-16 ***
Nbr_Liquor_Stores -1.294e-05 2.301e-05 -0.562 0.574
এটি আমার জন্য একটি অবাক করার বিষয়, আমি সম্পর্কটি ক্যাপচার করার জন্য এই পদ্ধতিটি আশা করছিলাম তবে এটি তা গ্রহণ করে না। সুতরাং এই পদ্ধতিতে এই পরিস্থিতিতে ব্যর্থতা!
## Method 2: Divide Liquor Stores by population and then regress
fit2 <- lm( DUI ~ Nbr_Liquor_Stores + popln, data=dat)
summary(fit2)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.013e+02 5.945e-01 170.391 <2e-16 ***
Nbr_Liquor_Stores -5.484e-02 2.825e-02 -1.941 0.0523 .
popln 2.158e-02 2.543e-04 84.875 <2e-16 ***
এনবিআর_লিক্যর_সত্তারগুলি উল্লেখযোগ্য, পি-মানটি প্রচুর পরিমাণে বোঝায়। আমার পক্ষে স্পষ্ট বিজয়ী।
## Method 3: "DUI per capita" on "liquer stores per capita" and "population size"
fit3 <- lm( I(DUI/popln) ~ I(Nbr_Liquor_Stores/popln) + popln, data=dat)
summary(fit3)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.540e-02 1.485e-02 4.405 1.07e-05 ***
I(Nbr_Liquor_Stores/popln) 3.915e+00 1.553e-02 252.063 < 2e-16 ***
popln -2.056e-08 7.635e-08 -0.269 0.788
TLDR; পদ্ধতি 2 বিভিন্ন পরিস্থিতিতে বিভিন্ন ক্ষেত্রে নির্ভুল পি-মান উত্পাদন করে।