कार्यात्मक डेटा का अनुकरण कैसे करें?


12

मैं विभिन्न कार्यात्मक डेटा विश्लेषण दृष्टिकोणों का परीक्षण करने की कोशिश कर रहा हूं। आदर्श रूप से, मैं सिम्युलेटेड फ़ंक्शनल डेटा पर मौजूद दृष्टिकोणों के पैनल का परीक्षण करना चाहूंगा। मैंने एक गाऊसी शोर (नीचे कोड) के आधार पर एक दृष्टिकोण का उपयोग करके नकली एफडी उत्पन्न करने की कोशिश की है, लेकिन परिणामस्वरूप घटता असली चीज़ की तुलना में बहुत अधिक बीहड़ दिखता है

मैं सोच रहा था कि क्या किसी के पास कार्यों / विचारों के लिए अधिक यथार्थवादी दिखने वाले सिम्युलेटेड कार्यात्मक डेटा उत्पन्न करने के लिए एक संकेतक था। विशेष रूप से, ये चिकनी होनी चाहिए। मैं इस क्षेत्र में पूरी तरह से नया हूं इसलिए किसी भी सलाह का स्वागत किया जाता है।

library("MASS")
library("caTools")
VCM<-function(cont,theta=0.99){
    Sigma<-matrix(rep(0,length(cont)^2),nrow=length(cont))
    for(i in 1:nrow(Sigma)){
        for (j in 1:ncol(Sigma)) Sigma[i,j]<-theta^(abs(cont[i]-cont[j]))
    }
    return(Sigma)
}


t1<-1:120
CVC<-runmean(cumsum(rnorm(length(t1))),k=10)
VMC<-VCM(cont=t1,theta=0.99)
sig<-runif(ncol(VMC))
VMC<-diag(sig)%*%VMC%*%diag(sig)
DTA<-mvrnorm(100,rep(0,ncol(VMC)),VMC)  

DTA<-sweep(DTA,2,CVC)
DTA<-apply(DTA,2,runmean,k=5)
matplot(t(DTA),type="l",col=1,lty=1)

1
क्या आप केवल डेटा का अनुकरण नहीं कर सकते हैं जिसका अर्थ एक ज्ञात सुचारू फ़ंक्शन है और यादृच्छिक शोर जोड़ते हैं? उदाहरण के लिए,x=seq(0,2*pi,length=1000); plot(sin(x)+rnorm(1000)/10,type="l");
मैक्रो

@ मैक्रो: nop, यदि आप ज़ूम इन प्लॉट करते हैं तो आप देखेंगे कि इसके द्वारा उत्पन्न कार्य सुचारू नहीं हैं। उन्हें इन स्लाइड पर घटता से कुछ से तुलना करें: bscb.cornell.edu/~hooker/FDA2007/Lecture1.pdf । आपके एक्स का एक स्मूदली स्पलाइन ट्रिक कर सकता है, लेकिन मैं डेटा जेनरेट करने का सीधा तरीका खोज रहा हूं।
user603

कभी भी आप शोर सहित (जो किसी भी स्टोकेस्टिक मॉडल का एक आवश्यक हिस्सा है), कच्चे डेटा, स्वाभाविक रूप से, गैर-चिकनी होंगे। जिस तंदुरुस्त फिट का आप संकेत कर रहे हैं, वह यह है कि सिग्नल सुचारू है - वास्तविक अवलोकन डेटा (जो सिग्नल और शोर का संयोजन है) नहीं।
मैक्रो

@ मैक्रो: इस दस्तावेज़ के पृष्ठ 16 पर अपनी सिम्युलेटेड प्रक्रियाओं की तुलना करें: inference.phy.cam.ac.uk/mackay/gpB.pdf
user603

1
उच्च क्रम बहुपद का उपयोग करें। यादृच्छिक गुणांक (सही वितरण के साथ) के साथ 20 वीं डिग्री बहुपद दिशाओं (सुचारू रूप से) को काफी बदल सकती है। यदि आपको अपने प्रश्न का उत्तर मिल गया है तो शायद आप इसे उत्तर के रूप में पोस्ट कर सकते हैं?
मैक्रों

जवाबों:


8

एक नज़र डालें कि कैसे एक गाऊसी प्रक्रिया (जीपी) की वास्तविकताओं का अनुकरण करें। अहसास की चिकनाई GP के सहसंयोजक कार्य के विश्लेषणात्मक गुणों पर निर्भर करती है। इस ऑनलाइन पुस्तक में बहुत सारी जानकारी है: http://unearchty.stat.cmu.edu/

यह वीडियो GP के लिए एक अच्छा परिचय देता है: http://videolectures.net/gpip06_mackay_gpb/

PS आपकी टिप्पणी के बारे में, यह कोड आपको एक शुरुआत दे सकता है।

library(MASS)
C <- function(x, y) 0.01 * exp(-10000 * (x - y)^2) # covariance function
M <- function(x) sin(x) # mean function
t <- seq(0, 1, by = 0.01) # will sample the GP at these points
k <- length(t)
m <- M(t)
S <- matrix(nrow = k, ncol = k)
for (i in 1:k) for (j in 1:k) S[i, j] = C(t[i], t[j])
z <- mvrnorm(1, m, S)
plot(t, z)

क्या आपके पास एक लिंक है जो विशेष रूप से गौसियन प्रक्रिया की वास्तविकताओं का अनुकरण करने के सवाल को स्वीकार करता है? यह पुस्तक में (अनुक्रमणिका को देखते हुए) विशेषण नहीं है।
user603

जीपी का अनुकरण परिमित आयामी वितरण के माध्यम से किया जाता है। मूल रूप से, आप डोमेन के जितने चाहें उतने बिंदु चुनते हैं, और जीपी के माध्य और सहसंयोजक कार्य से आप एक बहुभिन्नरूपी सामान्य प्राप्त करते हैं। इस बहुभिन्नरूपी सामान्य से नमूना आपको चुने हुए बिंदुओं पर जीपी की वास्तविकताओं का मूल्य देता है। जैसा कि मैंने कहा है, ये मूल्य एक चिकने फलन को अनुमानित करते हैं, जब तक कि जीपी के सहसंयोजक कार्य आवश्यक विश्लेषणात्मक स्थितियों को संतुष्ट करते हैं। एक द्विघात घातीय सहसंयोजक कार्य ("घबराना" शब्द के साथ) एक अच्छी शुरुआत है।
ज़ेन

4

ठीक है, यहाँ जवाब है जो मैं आया था (यह अनिवार्य रूप से यहाँ और यहाँ से लिया गया है )। विचार कुछ यादृच्छिक जोड़े को एक आधार के आधार पर प्रोजेक्ट करना है । फिर, हम एक (चिकनी) जीपी से एक ड्रॉ पाने के लिए आश्वस्त हैं।{xi,yi}

require("MASS")
calcSigma<-function(X1,X2,l=1){
    Sigma<-matrix(rep(0,length(X1)*length(X2)),nrow=length(X1))
    for(i in 1:nrow(Sigma)){
        for (j in 1:ncol(Sigma)) Sigma[i,j]<-exp(-1/2*(abs(X1[i]-X2[j])/l)^2)
    }
    return(Sigma)
}
# The standard deviation of the noise
n.samples<-50
n.draws<-50
x.star<-seq(-5,5,len=n.draws)
nval<-3
f<-data.frame(x=seq(-5,5,l=nval),y=rnorm(nval,0,10))
sigma.n<-0.2
# Recalculate the mean and covariance functions
k.xx<-calcSigma(f$x,f$x)
k.xxs<-calcSigma(f$x,x.star)
k.xsx<-calcSigma(x.star,f$x)
k.xsxs<-calcSigma(x.star,x.star)
f.bar.star<-k.xsx%*%solve(k.xx+sigma.n^2*diag(1,ncol(k.xx)))%*%f$y
cov.f.star<-k.xsxs-k.xsx%*%solve(k.xx+sigma.n^2*diag(1,ncol(k.xx)))%*%k.xxs
values<-matrix(rep(0,length(x.star)*n.samples),ncol=n.samples)
for (i in 1:n.samples)  values[,i]<-mvrnorm(1,f.bar.star,cov.f.star)
values<-cbind(x=x.star,as.data.frame(values))
matplot(x=values[,1],y=values[,-1],lty=1,type="l",col="black")
lines(x.star,f.bar.star,col="red",lwd=2)

एक परीक्षण।  चिकना कार्य


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