कागजात के लिए आपके अनुरोध के बारे में:
यह वह नहीं है जो आप खोज रहे हैं, बल्कि चक्की के लिए भी काम कर सकते हैं।
एक और रणनीति है जिसका कोई उल्लेख नहीं करता है। आकार सेट से (छद्म) यादृच्छिक डेटा उत्पन्न करना संभव है, ताकि पूरे सेट बाधाओं से मिलें जब तक कि शेष डेटा उचित मानों पर तय न हो जाए। आवश्यक मान समीकरणों, बीजगणित और कुछ कोहनी तेल की एक प्रणाली के साथ हल करने योग्य होना चाहिए । N−kNkkk
उदाहरण के लिए, एक सामान्य वितरण से डेटा का एक सेट उत्पन्न करने के लिए जिसमें एक दिया नमूना मतलब होगा, , और विचरण, , आपको दो बिंदुओं के मूल्यों को ठीक करने की आवश्यकता होगी: और । चूंकि नमूना का मतलब है: होना चाहिए:
नमूना प्रसरण है:
इस प्रकार ( लिए उपरोक्त को निर्दिष्ट करने के बाद , / वितरण, और पुन: व्यवस्थित करना ... ) हमें मिला:
Nx¯s2yz
x¯=∑N−2i=1xi+y+zN
yy=Nx¯−(∑i=1N−2xi+z)
s2=∑N−2i=1(xi−x¯)2+(y−x¯)2+(z−x¯)2N−1
y2(Nx¯−∑i=1N−2xi)z−2z2=Nx¯2(N−1)+∑i=1N−2x2i+[∑i=1N−2xi]2−2Nx¯∑i=1N−2xi−(N−1)s2
अगर हम , लेते हैं , और को RHS के निषेध के रूप में, हम
द्विघात सूत्र का उपयोग करके लिए हल कर सकते हैं । उदाहरण के लिए, निम्न कोड का उपयोग किया जा सकता है:
a=−2b=2(Nx¯−∑N−2i=1xi)czR
find.yz = function(x, xbar, s2){
N = length(x) + 2
sumx = sum(x)
sx2 = as.numeric(x%*%x) # this is the sum of x^2
a = -2
b = 2*(N*xbar - sumx)
c = -N*xbar^2*(N-1) - sx2 - sumx^2 + 2*N*xbar*sumx + (N-1)*s2
rt = sqrt(b^2 - 4*a*c)
z = (-b + rt)/(2*a)
y = N*xbar - (sumx + z)
newx = c(x, y, z)
return(newx)
}
set.seed(62)
x = rnorm(2)
newx = find.yz(x, xbar=0, s2=1)
newx # [1] 0.8012701 0.2844567 0.3757358 -1.4614627
mean(newx) # [1] 0
var(newx) # [1] 1
इस दृष्टिकोण के बारे में समझने के लिए कुछ चीजें हैं। सबसे पहले, यह काम करने की गारंटी नहीं है। उदाहरण के लिए, यह संभव है कि आपका आरंभिक डेटा ऐसा हो, जिसमें कोई मान और मौजूद न हों, जिसके परिणामस्वरूप परिणामी का प्रसरण हो जाएगा । विचार करें: N−2yzs2
set.seed(22)
x = rnorm(2)
newx = find.yz(x, xbar=0, s2=1)
Warning message:
In sqrt(b^2 - 4 * a * c) : NaNs produced
newx # [1] -0.5121391 2.4851837 NaN NaN
var(c(x, mean(x), mean(x))) # [1] 1.497324
दूसरा, जबकि मानकीकरण आपके सभी संस्करणों के सीमांत वितरण को अधिक समान बनाता है, यह दृष्टिकोण केवल अंतिम दो मूल्यों को प्रभावित करता है, लेकिन उनके सीमांत वितरण को तिरछा बनाता है:
set.seed(82)
xScaled = matrix(NA, ncol=4, nrow=10000)
for(i in 1:10000){
x = rnorm(4)
xScaled[i,] = scale(x)
}
set.seed(82)
xDf = matrix(NA, ncol=4, nrow=10000)
i = 1
while(i<10001){
x = rnorm(2)
xDf[i,] = try(find.yz(x, xbar=0, s2=2), silent=TRUE) # keeps the code from crashing
if(!is.nan(xDf[i,4])){ i = i+1 } # increments if worked
}
तीसरा, परिणामस्वरूप नमूना बहुत सामान्य नहीं लग सकता है; ऐसा लग सकता है कि इसमें 'आउटलेयर' है (यानी, अंक जो बाकी की तुलना में एक अलग डेटा जनरेटिंग प्रक्रिया से आते हैं), क्योंकि यह अनिवार्य रूप से मामला है। यह बड़े नमूना आकारों के साथ एक समस्या होने की संभावना है, क्योंकि उत्पन्न आंकड़ों से नमूना आँकड़े आवश्यक मूल्यों में परिवर्तित होने चाहिए और इस प्रकार कम समायोजन होना चाहिए। छोटे नमूनों के साथ, आप हमेशा इस दृष्टिकोण को एक स्वीकार / अस्वीकार एल्गोरिथ्म के साथ जोड़ सकते हैं जो फिर से कोशिश करता है यदि उत्पन्न नमूने में आकृति के आँकड़े (जैसे, तिरछापन और कुर्तोसिस) हैं जो स्वीकार्य सीमा के बाहर हैं (cf., @ कार्डिनल की टिप्पणी ), या विस्तार करें एक निश्चित माध्य, विचरण, तिरछापन, और के साथ एक नमूना उत्पन्न करने के लिए यह दृष्टिकोणकर्टोसिस (मैं आपके ऊपर बीजगणित छोड़ दूँगा, हालाँकि)। वैकल्पिक रूप से, आप बहुत कम संख्या में नमूने उत्पन्न कर सकते हैं और सबसे छोटे (कहते हैं) कोलमोगोरोव-स्मिरनोव सांख्यिकी का उपयोग कर सकते हैं।
library(moments)
set.seed(7900)
x = rnorm(18)
newx.ss7900 = find.yz(x, xbar=0, s2=1)
skewness(newx.ss7900) # [1] 1.832733
kurtosis(newx.ss7900) - 3 # [1] 4.334414
ks.test(newx.ss7900, "pnorm")$statistic # 0.1934226
set.seed(200)
x = rnorm(18)
newx.ss200 = find.yz(x, xbar=0, s2=1)
skewness(newx.ss200) # [1] 0.137446
kurtosis(newx.ss200) - 3 # [1] 0.1148834
ks.test(newx.ss200, "pnorm")$statistic # 0.1326304
set.seed(4700)
x = rnorm(18)
newx.ss4700 = find.yz(x, xbar=0, s2=1)
skewness(newx.ss4700) # [1] 0.3258491
kurtosis(newx.ss4700) - 3 # [1] -0.02997377
ks.test(newx.ss4700, "pnorm")$statistic # 0.07707929S