1
votes

[\n ENTER SAMPLE SIZE:28428

\n ENTER TOLERANCE LIMIT:100

Undefined variable: xgetfile]1

So basically when I run this program that I have, downloaded from the internet, it always tells me that the variable xgetfile is undefined rather than prompting me to select a file with the data in it. The full code for said program is pasted down below. My question is how to remedy this issue and be able to input my data. The line that says xgetfile is pretty near the top so you don't have to do too much reading to get to it.

n=0;
tol_lim=0;

// ENTERING SAMPLE SIZE
while n<=5 | n==[] , n=input("\n ENTER SAMPLE SIZE:");
  if (n<=5) printf("\n\n SAMPLE SIZE SHOULD BE GREATER THAN 5\n\n");end
  if n==[] printf("\n\n  SAMPLE SIZE CANNOT BE LEFT BLANK\n\n");end
end
  
//ENTERING TOLERANCE LIMIT
while tol_lim <= 0 | tol_lim==[], tol_lim=input("\n ENTER TOLERANCE LIMIT:");
  if (tol_lim<=0) printf("\n TOLERANCE LIMIT SHOULD BE GREATER THAN 0\n\n");end
  if tol_lim==[] printf("\n TOLERANCE LIMIT CANNOT BE LEFT BLANK\n\n");end
end

//INITIALIZING VARIABLES
F = zeros(n,3);
Y = zeros(n,1);
OY = zeros(n,1);
EY = zeros(n,1);
DOY = zeros(n,1);
Estimated_Y = zeros(n,1);
d = zeros(3,1);

THETA = zeros(3,1);


GN1=0;GN2=0;GN3=0;
sig=0;y=0;
sigma_hat_square=0; y_bar=0; dff=0; R_square=0;
U_t_hat=0; U_t_hat_square=0; U_t_minusone_hat=0; dd=0; DW=0;Covariance_Matrix=zeros(3,3);
f_obs=0; l_obs=0; r=0; D1=0; D2=0;
S1=0;S2=0;S3=0;D1=0;D2=0;r=0;sum_Y=0;Y_bar=0;Y_square=0;D_den=0;D=0;
AY=zeros(n,1);

OBS=zeros(n,1);
EST=zeros(n,1);
g=[];gh=[];

EXISTING_DATA='';

//CHOOSING INPUT EXCEL DATA FILE
gh=xgetfile();

while gh==[],  gh=xgetfile('*.*',title='CHOOSE A FILE NAME');
      if g==[] printf("FILE NAME CANNOT BE LEFT BLANK");end
end


Sheets=readxls(gh);
EXISTING_DATA=Sheets(1);
typeof(EXISTING_DATA);

printf("\n\n");

//DISPLAYING EXISTING DATA FROM EXCEL FILE

EXISTING_DATA
  
for i=2:(n+1),DOY(i-1,1)=EXISTING_DATA(i,2);end  

while f_obs<=0 | f_obs==[] , f_obs=input("\n ENTER FIRST OBSERVATION NO:");
  //if (f_obs<=0) printf("\n\n IT SHOULD BE GREATER THAN 0\n\n");end
  //if f_obs==[] printf("\n\n IT CANNOT BE LEFT BLANK\n\n");end
end


  while l_obs<f_obs | l_obs==[] , l_obs=input("\n ENTER LAST OBSERVATION NO:");
  //if (l_obs<=f_obs) printf("\n\n IT SHOULD BE GREATER THAN FIRST OBSERVATION NO:\n\n");end
  //if l_obs==[] printf("\n\n  IT CANNOT BE LEFT BLANK\n\n");end
end

  
  for i=1:n,OY(i,1)=log(DOY(i,1));end

  
  
              r = ((l_obs - f_obs) + 1)/3;
              
              for i=1:r, S1 = S1 + OY(i,1);end
                for i=r+1:2*r, S2 = S2 + OY(i,1);end
                     for i=2*r+1:3*r, S3 = S3 + OY(i,1);end
                  
                D1 = S1 - S2;
                D2 = S2 - S3;
                
                A=0;B=0;C=0;

                // CALCULATING INITIAL ESTIMATES OF A, B, C

                C = (D2/D1)^(1/r);
              
                B = ((1 - C)/C)* [(D1^3)/(D1-D2)^2];
           
                
                A = (1/3)*(1/r)*[(S1 + S2 + S3) - (D1^2 + D1*D2 + D2^2)/(D1 - D2)];
                
                Ini_A=A; Ini_B=B;Ini_C=C;
                


for i=1:n, F(i,1)=1;end
  for i=1:n, F(i,2)=C^i;end
    for i=1:n, F(i,3)=i*B*(C^(i-1));end
      
   
        
        for i=1:n, EY(i,1)=A + B*(C^i);end
          for i=1:n, Y(i,1) = OY(i,1) - EY(i,1);end
                    
          d = inv(F'*F)*F'*Y;
          
          THETA(1,1) = A + d(1,1);
          THETA(2,1) = B + d(2,1);
          THETA(3,1) = C + d(3,1);
          
         if abs(d(1,1)/A) < tol_lim & abs(d(2,1)/B) < tol_lim & abs(d(3,1)/C) < tol_lim   
         
          break;
          end
          
                 
  
          for cnt=1:100
          
                              A = THETA(1,1);
                              B = THETA(2,1);
                              C = THETA(3,1);
          
                   for i=1:n, F(i,1)=1;end
                       for i=1:n, F(i,2)=C^i;end
                          for i=1:n, F(i,3)=i*B*(C^(i-1));end
      
        
        
                   for i=1:n, EY(i,1)=A + B*(C^i);end
                        for i=1:n, Y(i,1) = OY(i,1) - EY(i,1);end
                    
                      d = inv(F'*F)*F'*Y;
          
                      THETA(1,1) = A + d(1,1);
                      THETA(2,1) = B + d(2,1);
                      THETA(3,1) = C + d(3,1);
                      
                      
          
        if abs(d(1,1)/A) < tol_lim & abs(d(2,1)/B) < tol_lim & abs(d(3,1)/C) < tol_lim
        break;
        end
          
        end
          
        A=THETA(1,1);
        B=THETA(2,1);
        C=THETA(3,1);
          
          
         
            for i=1:n,
          
            GN1 = GN1 + (OY(i,1) - A - B*(C^i));
            GN2 = GN2 + (OY(i,1) - A - B*(C^i))*(C^i);
            GN3 = GN3 + (OY(i,1) - A - B*(C^i))*B*i*(C^(i-1));
            
            end
            
            
                        
            p_GN1=GN1;
            p_GN2=GN2;
            p_GN3=GN3;
            
            for i=1:n, EY(i,1) = A + B*(C^i);end
              for i=1:n, Y(i,1) = OY(i,1) - EY(i,1);end
                  for i=1:n, sig =sig + Y(i,1)*Y(i,1);end
            
          sigma_hat_square = sig/n;
            
            for i=1:n, y = y + OY(i,1);end
            y_bar = y/n;
            
            for i=1:n, dff = dff + (OY(i,1) - y_bar)*(OY(i,1) - y_bar);end
            

           R_square = 1 - (sig/dff);
            
            
            for i=1:n, 
                      F(i,1)=1;
                      F(i,2)=C^i;
                      F(i,3)=i*B*(C^(i-1));
                      
             end
             
             
             //Showing Covariance Matrix
             
             Covariance_Matrix = sigma_hat_square*inv(F'*F);
             
             
             
             
             G = zeros(3,3);
             G = inv(F'*F);
             
             //Showing Standard Errors
             std_err_A = sqrt((sigma_hat_square)*G(1,1));
             std_err_B = sqrt((sigma_hat_square)*G(2,2));
             std_err_C = sqrt((sigma_hat_square)*G(3,3));
             
             for i=1:n, 
                      
                      U_t_hat_square = U_t_hat_square+ ((OY(i,1) - A - B*(C^i))^2);
          
             end
             
             
             
             for i=2:n,
             
                    U_t_hat = OY(i,1) - A - B*(C^i);
                    U_t_minusone_hat = OY(i-1,1) - A - B*(C^(i-1));
                    
                    dd = dd + (U_t_hat - U_t_minusone_hat)*(U_t_hat - U_t_minusone_hat);
                    
              end
              
              
              
              DW = dd/U_t_hat_square;
              
              for i=1:n, EY(i,1) = A + B*(C^i);end
              for i=1:n, Y(i,1) = OY(i,1) - EY(i,1);end
              
              for i=1:n,sum_Y = sum_Y + OY(i,1);end
              Y_bar = sum_Y /n;
              
              
              for i=1:n, Y_square = Y_square + Y(i,1)*Y(i,1);end
              
              for i=1:n, D_den = D_den + (OY(i,1) - Y_bar)*(OY(i,1) - Y_bar);end
              
              
              D = Y_square/D_den;
              
              printf("\n\n\nREPORT SHOWING RESULTS\n");
printf("----------------------\n\n\n");
printf("Sample Size = %d             Tolerance Limit=%f\n\n",n,tol_lim);
printf("PARAMETER INITIAL ESTIMATES   FINAL ESTIMATES      STD. ERRORS           DW    ");
printf("\n------- -----------------     ----------------     ------------        ----   \n");
printf("\nA        %f                 %f           %f          %f", Ini_A,A, std_err_A, DW);
printf("\nB        %f                 %f           %f        ", Ini_B,B, std_err_B);
printf("\nC        %f                 %f           %f        ", Ini_C,C, std_err_C);
printf("\n\n\n ");


printf("No. of Iterations: = %d\n\n",cnt+1);
printf("GN1 = %.7f\n\n", p_GN1);
printf("GN2 = %.7f\n\n", p_GN2);
printf("GN3 = %.7f\n\n", p_GN3);

printf("Sigma_Hat_Square= %f \t\t R_Square= %f\t D=%f",sigma_hat_square, R_square,D);
printf("\n\n COVARIANCE MATRIX \n");
printf("-------------------------\n");
printf("%f\t\t%f\t\t%f\n",Covariance_Matrix(1,1), Covariance_Matrix(1,2), Covariance_Matrix(1,3));
printf("%f\t\t%f\t\t%f\n",Covariance_Matrix(2,1), Covariance_Matrix(2,2), Covariance_Matrix(2,3));
printf("%f\t\t%f\t\t%f",Covariance_Matrix(3,1), Covariance_Matrix(3,2), Covariance_Matrix(3,3));



printf("\n\n Residuals\n\n ");
printf("Y = %f\n",Y);


              
              x=input("\n\n Exit Program??...Press 1 to exit or enter to save");
              if (x==1)
              exit();
              end
              
              g=x_dialog(['enter file name:']);

u=mopen(g,'w');

mfprintf(u,"REPORT SHOWING RESULTS\n");
mfprintf(u,"----------------------\n\n\n");
mfprintf(u,"Sample Size = %d                   Tolerance Limit = %f\n\n\n",n,tol_lim);
mfprintf(u,"PARAMETER INITIAL ESTIMATES   FINAL ESTIMATES      STD. ERRORS           DW    ");
mfprintf(u,"\n------- -----------------     ----------------     ------------        ------   \n");
mfprintf(u,"\nA        %f                 %f           %f          %f", Ini_A,A, std_err_A, DW);
mfprintf(u,"\nB        %f                 %f           %f        ", Ini_B,B, std_err_B);
mfprintf(u,"\nC        %f                 %f           %f        ", Ini_C,C, std_err_C);
mfprintf(u,"\n\n\n ");


mfprintf(u,"No. of Iterations: = %d\n\n",cnt+1);
mfprintf(u,"GN1 = %.7f\n\n", p_GN1);
mfprintf(u, "GN2 = %.7f\n\n", p_GN2);
mfprintf(u, "GN3 = %.7f\n\n", p_GN3);

mfprintf(u, "Sigma_Hat_Square= %f \t\t R_Square= %f\t D=%f",sigma_hat_square, R_square,D);
mfprintf(u,"\n\n COVARIANCE MATRIX \n");
mfprintf(u,"-------------------------\n");
mfprintf(u,"%f\t\t%f\t\t%f\n",Covariance_Matrix(1,1), Covariance_Matrix(1,2), Covariance_Matrix(1,3));
mfprintf(u,"%f\t\t%f\t\t%f\n",Covariance_Matrix(2,1), Covariance_Matrix(2,2), Covariance_Matrix(2,3));
mfprintf(u,"%f\t\t%f\t\t%f",Covariance_Matrix(3,1), Covariance_Matrix(3,2), Covariance_Matrix(3,3));



mfprintf(u,"\n\n SHOWING RESIDUALS\n\n ");
mfprintf(u, "Y = %f\n",Y);
mclose(u);


t=[1:1:n]';
Estimated_Y=A + B*(C^t);


for i=1:n, OBS(i,1)=OY(i,1);end
for  i=1:n,EST(i,1)=Estimated_Y(i,1);end

plot2d(t,[OBS,EST],[2,3],leg="Observed@Estimated",nax=[1,n,1,n]);
legends(['t';'(Year)'],[1,1],opt="lr")
legends(['Y';'(Dependent Variable)'],[1,1],opt="ul")
xtitle("GOMPERTZ GROWTH CURVE");


end_prog=input("\n\n Continue??..PRESS 1 TO CONTINUE.....PRESS 2 TO EXIT");


if (end_prog==1)
exec("C:\SCILAB\Gompertz.sce");
end
if (end_prog==2)

printf("CLOSING PROGRAM........");
exit;
end








1
Just a remark for your future questions on SO: you didn't have to post all your program. The next time write a minimal example. Here the single line gh=xgetfile() would have been enough. You can still edit your message even I already answered, - Stéphane Mottelet

1 Answers

0
votes

Your Scilab program seems to be written for a very old version since xgetfile disappeared with version 5.2 (year 2001). Just replace the line with

gh=uigetfile('*.*','CHOOSE A FILE NAME');

and this part of your program will work.