आर में, माध्य की मानक त्रुटि कैसे पता करें?


89

R में माध्य की मानक त्रुटि ज्ञात करने के लिए कोई कमांड है?

जवाबों:



165

मानक त्रुटि नमूना आकार के वर्गमूल द्वारा विभाजित मानक विचलन मात्र है। तो आप आसानी से अपना फंक्शन बना सकते हैं:

> std <- function(x) sd(x)/sqrt(length(x))
> std(c(1,2,3,4))
[1] 0.6454972

92

मानक त्रुटि (एसई) नमूना वितरण का सिर्फ मानक विचलन है। सैंपलिंग डिस्ट्रीब्यूशन का विचरण N और SE द्वारा विभाजित डेटा का विचरण है। उस समझ से जाने से, यह देखा जा सकता है कि एसई गणना में भिन्नता का उपयोग करना अधिक कुशल है। sdआर में समारोह पहले से ही एक वर्गमूल (कोड के लिए करता है sdआर में है और बस लिखते "एसडी" से पता चला)। इसलिए, निम्नलिखित सबसे कुशल है।

se <- function(x) sqrt(var(x)/length(x))

फ़ंक्शन को केवल अधिक जटिल बनाने के लिए और उन सभी विकल्पों को संभालने के लिए जिन्हें आप पास कर सकते हैं var, आप इस संशोधन को बना सकते हैं।

se <- function(x, ...) sqrt(var(x, ...)/length(x))

इस सिंटैक्स का उपयोग करके चीजों का लाभ उठाया जा सकता है जैसे कि varलापता मूल्यों के साथ कैसे व्यवहार होता है। varएक नामित तर्क के रूप में पारित किया जा सकता है कि कुछ भी इस seकॉल में इस्तेमाल किया जा सकता है ।


4
दिलचस्प बात यह है कि, आपका फंक्शन और इयान लगभग समान रूप से तेज़ हैं। मैंने उन्हें 10 ^ 6 मिलियन rnorm ड्रॉ के खिलाफ 1000 बार दोनों का परीक्षण किया (पर्याप्त शक्ति नहीं है कि उन्हें इससे कठिन धक्का दे सके)। इसके विपरीत, प्लॉट्रिक्स का कार्य हमेशा उन दो कार्यों के सबसे धीमे रन की तुलना में भी धीमा था - लेकिन यह हुड के तहत बहुत अधिक चल रहा है।
मैट पार्कर

6
ध्यान दें कि stderrएक फ़ंक्शन नाम है base
टॉम

3
यह बहुत अच्छी बात है। मैं आमतौर पर se का उपयोग करता हूं। मैंने इस उत्तर को बदल दिया है।
जॉन

5
टॉम, NO stderrयह प्रदर्शित होने वाली मानक त्रुटि की गणना नहीं करता हैdisplay aspects. of connection
फोरकास्टर

15
@forecaster टॉम ने कहा stderrकि मानक त्रुटि की गणना नहीं करता है , वह चेतावनी दे रहा था कि इस नाम का उपयोग आधार में किया जाता है, और जॉन ने मूल रूप से अपने कार्य का नाम दिया stderr(इतिहास संपादित करें ...)।
मोलक्स

60

ऊपर जॉन के उत्तर का एक संस्करण जो पेसकी एनए को हटाता है:

stderr <- function(x, na.rm=FALSE) {
  if (na.rm) x <- na.omit(x)
  sqrt(var(x)/length(x))
}

ध्यान दें कि पैकेज stderrमें एक मौजूदा फ़ंक्शन कहा जाता है जो baseकुछ और करता है, इसलिए इस के लिए एक और नाम चुना जाना बेहतर हो सकता है, जैसेse
गौरैया

5

पैकेज स्किप्लॉट में अंतर्निहित फ़ंक्शन से (x) है


3

जैसा कि मैं इस सवाल पर अब और फिर से वापस जा रहा हूं, क्योंकि यह सवाल पुराना है, मैं सबसे अधिक वोट किए गए उत्तरों के लिए एक बेंचमार्क पोस्ट कर रहा हूं।

ध्यान दें, कि @ इयान और @ जॉन के उत्तरों के लिए मैंने एक और संस्करण बनाया। उपयोग करने के बजाय length(x), मैंने उपयोग किया sum(!is.na(x))(एनए से बचने के लिए)। मैंने 1,000 पुनरावृत्तियों के साथ 10 ^ 6 के एक वेक्टर का उपयोग किया।

library(microbenchmark)

set.seed(123)
myVec <- rnorm(10^6)

IanStd <- function(x) sd(x)/sqrt(length(x))

JohnSe <- function(x) sqrt(var(x)/length(x))

IanStdisNA <- function(x) sd(x)/sqrt(sum(!is.na(x)))

JohnSeisNA <- function(x) sqrt(var(x)/sum(!is.na(x)))

AranStderr <- function(x, na.rm=FALSE) {
  if (na.rm) x <- na.omit(x)
  sqrt(var(x)/length(x))
}

mbm <- microbenchmark(
  "plotrix" = {plotrix::std.error(myVec)},
  "IanStd" = {IanStd(myVec)},
  "JohnSe" = {JohnSe(myVec)},
  "IanStdisNA" = {IanStdisNA(myVec)},
  "JohnSeisNA" = {JohnSeisNA(myVec)},
  "AranStderr" = {AranStderr(myVec)}, 
  times = 1000)

mbm

परिणाम:

Unit: milliseconds
       expr     min       lq      mean   median       uq      max neval cld
    plotrix 10.3033 10.89360 13.869947 11.36050 15.89165 125.8733  1000   c
     IanStd  4.3132  4.41730  4.618690  4.47425  4.63185   8.4388  1000 a  
     JohnSe  4.3324  4.41875  4.640725  4.48330  4.64935   9.4435  1000 a  
 IanStdisNA  8.4976  8.99980 11.278352  9.34315 12.62075 120.8937  1000  b 
 JohnSeisNA  8.5138  8.96600 11.127796  9.35725 12.63630 118.4796  1000  b 
 AranStderr  4.3324  4.41995  4.634949  4.47440  4.62620  14.3511  1000 a  


library(ggplot2)
autoplot(mbm)

यहां छवि विवरण दर्ज करें


0

अधिक आम तौर पर, किसी अन्य पैरामीटर पर मानक त्रुटियों के लिए, आप बूटस्ट्रैप सिमुलेशन के लिए बूट पैकेज का उपयोग कर सकते हैं (या उन्हें अपने दम पर लिख सकते हैं)



0

याद रखें कि एक रेखीय मॉडल का उपयोग करके प्राप्त किया जा सकता है, एक एकल अवरोधन के खिलाफ चर को फिर से प्राप्त करके, आप इसके लिए lm(x~1)फ़ंक्शन का भी उपयोग कर सकते हैं !

लाभ हैं:

  • आप तुरंत विश्वास अंतराल प्राप्त करते हैं confint()
  • उदाहरण के लिए, आप माध्य के बारे में विभिन्न परिकल्पना के लिए परीक्षणों का उपयोग कर सकते हैं car::linear.hypothesis()
  • आप मानक विचलन के अधिक परिष्कृत अनुमानों का उपयोग कर सकते हैं, यदि आपके पास कुछ विषमता, गुच्छेदार डेटा, स्थानिक-डेटा आदि हैं, तो पैकेज देखें sandwich
## generate data
x <- rnorm(1000)

## estimate reg
reg <- lm(x~1)
coef(summary(reg))[,"Std. Error"]
#> [1] 0.03237811

## conpare with simple formula
all.equal(sd(x)/sqrt(length(x)),
          coef(summary(reg))[,"Std. Error"])
#> [1] TRUE

## extract confidence interval
confint(reg)
#>                   2.5 %    97.5 %
#> (Intercept) -0.06457031 0.0625035

रेप्रेक्स पैकेज (v0.3.0) द्वारा 2020-10-06 को बनाया गया


-12
y <- mean(x, na.rm=TRUE)

sd(y)var(y)विचरण के लिए मानक विचलन के लिए।

दोनों व्युत्पन्न n-1हर में उपयोग करते हैं इसलिए वे नमूना डेटा पर आधारित होते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.