2016-04-13 9 views
0

Ich versuche, die Stärke Erhöhung über die Verbindungslänge zu plotten. Im folgenden Beispiel werden zufällige Daten ähnlich denen, die ich erwarte, erstellt, für die eine Anpassung vorgenommen wird. Das Problem ist, dass ich die Vorhersageebene jeder Länge (jeden x-Wert), nicht die Vorhersageebene des gesamten Datensatzes identifizieren möchte. Wie man in der Figur sehen kann, sind die Ergebnisse für niedrige X-Werte viel weniger gestreut als für die höheren.MATLAB: Plotdaten passen mit Vorhersage

Kann mir irgendjemand einen Hinweis geben, wie man diesen Typ von Graphen erstellt (wo die Vorhersagelinien von der Anpassung wegwachsen)?

%Generate random data 
xVec = 0:0.001:1; 
Distr = makedist('Normal','mu',10,'sigma',1); 
for i=1:length(xVec) 
    yVec(i) = sqrt(xVec(i))*random(Distr); 
end 

%Create fit and prediction interval 
FitVec = fit(xVec',yVec','poly4'); 
pRvecConf = predint(FitVec,xVec,0.95,'observation','off'); 

%Plot 
plot(FitVec,xVec,yVec) 
hold on 
plot(xVec,pRvecConf,'m--') 
legend('Data','Fitted curve','Confidence','Location','se') 
xlabel('Length') 
ylabel('Strength') 

Siehe das folgende Beispiel Grundstück: See example plot here

Antwort

2

Da die yVec durch Gewichtung der Zufallsverteilung mit sqrt (xVec) erzeugt wurde, änderte man tatsächlich die Varianz der Zufallsvariablen für jeden x-Wert von xVec (das Quadrat von sqrt (xVec)). Sie können das Konfidenzintervall neu berechnen, indem Sie die ursprünglichen Werte mit xVec gewichten. Hier sind einige Codes auf Basis von Ihnen,

%Generate random data 
xVec = 0:0.001:1; 
Distr = makedist('Normal','mu',10,'sigma',1); 
for i=1:length(xVec) 
    yVec(i) = sqrt(xVec(i))*random(Distr); 
end 

%Create fit and confidence interval 
FitVec = fit(xVec',yVec','poly4') 
pRvecConf = predint(FitVec,xVec,0.95,'observation','off'); 

%get the fitting values 
fitY=feval(FitVec,xVec); 
%multiply the confidence interval with sqrt(xVec(i)).^2 
ci=(fitY-pRvecConf(:,1)).*xVec'; 
%get the weighted confidence interval 
Conf_new=[fitY-ci,fitY+ci]; 

%Plot 
plot(FitVec,xVec,yVec) 
hold on 
plot(xVec,Conf_new,'m--') 
legend('Data','Fitted curve','Confidence','Location','se') 
xlabel('Length') 
ylabel('Strength') 

Das Ergebnis sollte wie folgt aussehen: Figure of Modified Confidence Interval