मैंने नकली डेटा पर कुछ प्रयोग किए, यह देखने के लिए कि कौन सी विधि सबसे अच्छी है। कृपया नीचे मेरे निष्कर्ष पढ़ें।
आइए हम दो अलग-अलग परिदृश्यों को देखें - पहला जहां DUI और शराब की दुकानों के बीच कोई सीधा संबंध नहीं है और दूसरा जहां हमारा सीधा संबंध है। फिर प्रत्येक विधि की जांच करें कि कौन सी विधि सबसे अच्छी है।
केस 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 ***
अपेक्षानुसार Nbr_Liquor_Stores अत्यधिक महत्वपूर्ण है। हालांकि संबंध अप्रत्यक्ष है।
## 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
Nbr_Liquor_Stores का कोई महत्व नहीं है। काम करने लगता है, लेकिन अभी तक निष्कर्ष पर नहीं कूदता है।
## 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 ***
Nbr_Liquor_Stores महत्वपूर्ण नहीं है, पी-वैल्यू भी विधि 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
(Nbr_Liquor_Stores / popln) अत्यधिक महत्वपूर्ण! उम्मीद नहीं की थी, शायद यह विधि आपके समस्या बयान के लिए सबसे अच्छा नहीं है।
केस 2: जनसंख्या और Nbr_Liquor_Stores दोनों के साथ सीधा संबंध
### 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 ***
Nbr_Liquor_Stores महत्वपूर्ण है, पी-मूल्य बहुत मायने रखता है। मेरे लिए एक स्पष्ट विजेता।
## 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 विभिन्न परिदृश्यों में सबसे सटीक पी-मान पैदा करता है।