मेरे पास विभिन्न प्रभावों के लिए एकाग्रता मूल्य हैं, और मैं समूहीकृत डेटा के प्रत्येक सेट (विभिन्न प्रभावों द्वारा) के लिए औसत मानों की गणना करने की कोशिश कर रहा हूं, लेकिन केवल बॉक्सप्लॉट के पहले और तीसरे चतुर्थक के बीच निहित डेटा के लिए, आर का उपयोग करके मैंने पहले बॉक्सप्लॉट किया था (जीजीप्लॉट के साथ) लेकिन मुझे नहीं लगता कि यह कैसे मदद कर सकता है। फ़ंक्शन ggplot_build() के साथ, मुझे केवल चतुर्थक मिलते हैं। मैंने "कुल ()" का भी प्रयास किया है, लेकिन यह पूरे सेट के लिए माध्य प्रदान करता है, और मैं पहले और तीसरे चतुर्थक के बाहर क्या शामिल नहीं करना चाहता हूं। कोई विचार? आपकी सहायता के लिए धन्यवाद।

 conc.value Conc.units Effect.group           Effect
1    0.000160000    AI mg/L    systemic        Physiology
2    0.000560000    AI mg/L    systemic        Population
3    0.001090377    AI mg/L    systemic        Population
4    0.001124100    AI mg/L   cell-based        Enzyme(s)
5    0.001686150    AI mg/L    systemic        Population
6    0.002000000    AI mg/L    systemic        Population
7    0.002000000    AI mg/L    systemic        Population
8    0.002000000    AI mg/L    systemic        Population
9    0.002248200    AI mg/L   cell-based        Enzyme(s)
10   0.002248200    AI mg/L   cell-based        Enzyme(s)
11   0.002248200    AI mg/L    systemic        Population
12   0.002248200    AI mg/L   cell-based     Biochemistry
13   0.004000000    AI mg/L    systemic        Population
14   0.004000000    AI mg/L    systemic        Population
15   0.004496400    AI mg/L   cell-based     Biochemistry
16   0.004496400    AI mg/L   cell-based        Enzyme(s)
17   0.004496400    AI mg/L    systemic        Population
18   0.005000000    AI mg/L    systemic        Population
19   0.005000000    AI mg/L    systemic        Population
20   0.005000000    AI mg/L    systemic        Population
21   0.005000000    AI mg/L    systemic        Population
22   0.005000000    AI mg/L    systemic        Population
23   0.005000000    AI mg/L    systemic        Population
24   0.005000000    AI mg/L    systemic        Population
25   0.005000000    AI mg/L    systemic        Population
26   0.005000000    AI mg/L    systemic        Population
1
user1407 24 मार्च 2020, 11:11

3 जवाब

सबसे बढ़िया उत्तर

आप बॉक्सप्लॉट में शामिल आँकड़ों तक पहुँच सकते हैं। यहां कुछ उदाहरण डेटा दिया गया है:

set.seed(123)
df <- data.frame(
  V1 = c(rnorm(100))
)

अब अपने कॉलम V1 के बॉक्सप्लॉट को एक ऑब्जेक्ट के रूप में स्टोर करें, जिसे यहां कहा जाता है, object:

object <- boxplot(df$V1)

object से आंतरिक रूप से जुड़े आँकड़ों का निरीक्षण करें:

object$stats
            [,1]
[1,] -1.96661716
[2,] -0.49667731
[3,]  0.06175631
[4,]  0.69499808
[5,]  2.18733299

दूसरा और चौथा मान IQR को सीमित करता है (जांच करने के लिए, आप summary(df) कर सकते हैं)। तो अगला कदम उन दो मानों पर सबसेट df$V1 होगा और माध्य की गणना करना होगा:

mean(df$V1 >= object$stats[2] & df$V1 <= object$stats[4])
[1] 0.5

यह है, संक्षेप में, आप इस मुद्दे को कैसे हल कर सकते हैं। जैसा कि ऐसा लगता है कि आपके पास इससे अधिक जटिल डेटाफ़्रेम है, इस समाधान को स्पष्ट रूप से आपके डेटा के अनुकूल बनाना होगा। यदि आपको इसके लिए सहायता की आवश्यकता है, तो आपको यह दिखाना होगा कि डेटा कैसा दिखता है।

उदाहरण के लिए, यदि आपके पास कई संख्यात्मक चर के साथ एक डेटाफ़्रेम है, तो आप एक बार में गणना इस प्रकार कर सकते हैं:

set.seed(123)
df <- data.frame(
  V1 = c(rnorm(100)),
  V2 = c(rnorm(100, 1)),
  V3 = c(rnorm(100, 2))
)

lapply(df[,1:3], function(x)  mean(x >= object$stats[2] & x <= object$stats[4]))
$V1
[1] 0.5

$V2
[1] 0.39

$V3
[1] 0.07

संपादित करें:

डेटासेट के लिए जैसे कि आप अपनी हालिया टिप्पणी में वर्णन करते हैं, समाधान यह हो सकता है:

set.seed(123)
df <- data.frame(
  V1 = c(rnorm(100)),
  Effect = sample(LETTERS[1:4], 100, replace = T)
)

इंटरक्वार्टाइल रेंज के लिए Effect द्वारा गणना करने के लिए, आप इसे एक बार में कर सकते हैं:

tapply(df$V1, df$Effect, function(x)  mean(x[x >= quantile(x, 0.25) & x <= quantile(x, 0.75)]))
           A            B            C            D 
 0.005502653  0.251196882  0.077304685 -0.108590409
1
Chris Ruehlemann 24 मार्च 2020, 16:13
आपके उदाहरण में, जब आप "माध्य (df$V1>= ऑब्जेक्ट $ आँकड़े [2] और df$V1 <= ऑब्जेक्ट $ आँकड़े [4])" करते हैं, तो आप कैसे बता सकते हैं कि परिणाम 0.5 में 1 के बीच के सभी डेटा बिंदु शामिल हैं और तीसरा चतुर्थक? जैसा कि मैंने इसे यहां देखा है, आप केवल चतुर्थक के लिए विशिष्ट संख्यात्मक मान को घटा रहे हैं, न कि इसमें डेटा।
 – 
user1407
24 मार्च 2020, 11:50
नहीं, >= और <= के उपयोग पर ध्यान दें: mean(df$V1 >= object$stats[2] & df$V1 <= object$stats[4]) कहते हैं: df$V1 की उस सीमा के साधनों की गणना करें जो object$stats[2] से अधिक या उसके बराबर हो और object$stats[4] से छोटा या उसके बराबर। यानी आप उन दो संख्यात्मक मानों पर df$V1 सब्मिट करें।
 – 
Chris Ruehlemann
24 मार्च 2020, 11:57
उत्तर में संपादित करें देखें।
 – 
Chris Ruehlemann
24 मार्च 2020, 12:12
क्या होगा यदि मेरे पास 20 मान समान हैं, और फिर अन्य भिन्न मान हैं। अगर मैं करता हूँ, "माध्य (df$V1 >= ऑब्जेक्ट$आँकड़े [2]..."। क्या सॉफ़्टवेयर "उन सभी मानों को नहीं समझेगा जो उस विशिष्ट मान (प्रथम चतुर्थक) के बराबर हैं", चाहे कैसे भी हो मेरे पास कई हैं? यह निश्चित रूप से औसत मूल्य को प्रभावित करेगा।
 – 
user1407
24 मार्च 2020, 12:13
लेकिन यह प्रकृति है कि माध्य की गणना कैसे की जाती है! यह समान और भिन्न मूल्यों में भेदभाव नहीं करता है। माध्य केंद्रीय प्रवृत्ति का एक माप है और यदि कुछ मान दोहराए जाते हैं तो उस पुनरावृत्ति का निश्चित रूप से माध्य पर प्रभाव पड़ेगा, और ठीक है!
 – 
Chris Ruehlemann
24 मार्च 2020, 12:17

मैं quantile फ़ंक्शन का उपयोग करूंगा। @Chris . के समान डेटा का उपयोग करना

quantile(df$V1)
         0%         25%         50%         75%        100% 
-2.30916888 -0.49385424  0.06175631  0.69181917  2.18733299 

आप सूचकांक quantile(df$V1)[1] द्वारा या probs विकल्प का उपयोग करके मान प्राप्त कर सकते हैं

> quantile(df$V1,probs=.25)
       25% 
-0.4938542 

एक बार जब आपके पास डेटा हो, तो बस सबसेट करें और माध्य की गणना करें (जैसा कि @Chris) बताया गया है

1
fra 24 मार्च 2020, 11:46

मैं सबसे पहले एक नया फ़ंक्शन तैयार करूंगा जो किसी दिए गए वेक्टर में प्रत्येक तत्व के क्वांटाइल समूह को आउटपुट करता है:

qgroup = function(numvec, n = 4){

  qtile = quantile(numvec, probs = seq(0, 1, 1/n), na.rm = T)
  out = sapply(numvec, function(x) sum(x >= qtile[-(n+1)]))

  return(out)
}

> qgroup(seq(1:20))
 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4

अब, इस फ़ंक्शन को एक संख्यात्मक वेक्टर nums पर data.table या data.frame में लागू करें:

set.seed(123)
nums = rnorm(100)

#data.table
dt = data.table(nums)[, Qnums := qgroup(nums)]

#data.frame
df = data.frame(nums)
df$Qnums = qgroup(df$nums)

अंत में, डेटा ऑब्जेक्ट को Qnums के अनुसार सब्मिट करें और संख्यात्मक कॉलम nums के माध्य की गणना करें:

> dt[Qnums %in% c(2,3), mean(nums)]
[1] 0.05432868

> mean(df$nums[df$Qnums %in% c(2,3)])
[1] 0.05432868
0
JDG 24 मार्च 2020, 13:33