// g02ja Example Program Text // C# version, NAG Copyright 2008 using System; using NagLibrary; using System.Globalization; using System.IO; namespace NagDotNetExamples { public class G02JAE { static string datafile = "ExampleData/g02jae.d"; static void Main(String[] args) { if (args.Length == 1) { datafile = args[0]; } StartExample(); } public static void StartExample() { try { DataReader sr = new DataReader(datafile); double reml, tol; int cwid, df, fint, i, j, k, l, lb, maxit, n, ncol, nff, nfv, nrf, nrv, nv, nvpr, rint, svid, warn, yvid; // int ifail; Console.WriteLine("g02ja Example Program Results"); // // // Skip heading in data file sr.Reset(); // // Read in the problem size information sr.Reset(); n = int.Parse(sr.Next()); ncol = int.Parse(sr.Next()); nfv = int.Parse(sr.Next()); nrv = int.Parse(sr.Next()); nvpr = int.Parse(sr.Next()); nv = nfv + nrv; double[,] dat = new double[n, ncol]; double[] gamma = new double[nvpr+2]; int[] fvid = new int[nfv]; int[] levels = new int[ncol]; int[] rvid = new int[nrv]; int[] vpr = new int[nrv]; // // Check array sizes if (ncol < 2 ) { Console.Write(" {0}", "Problem too small"); goto L200; } // // Read in number of levels for each variable sr.Reset(); for (i = 1; i <= ncol; i++) { levels[i - 1] = int.Parse(sr.Next()); } // // Read in model information sr.Reset(); yvid = int.Parse(sr.Next()); for (i = 1; i <= nfv; i++) { fvid[i - 1] = int.Parse(sr.Next()); } for (i = 1; i <= nrv; i++) { rvid[i - 1] = int.Parse(sr.Next()); } svid = int.Parse(sr.Next()); cwid = int.Parse(sr.Next()); fint = int.Parse(sr.Next()); rint = int.Parse(sr.Next()); // // If no subject specified, then ignore rint // Check remaining array sizes if (n < 1 || (nvpr + rint) < 1) { Console.Write(" {0}", "Problem too small"); goto L200; } // // Read in the variance component flag sr.Reset(); for (i = 1; i <= nrv; i++) { vpr[i - 1] = int.Parse(sr.Next()); } // // Read in the Data matrix for (i = 1; i <= n; i++) { sr.Reset(); for (j = 1; j <= ncol; j++) { dat[i - 1, j - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } } // // Read in the initial values for gamma sr.Reset(); if (svid == 0) { rint = 0; } for (i = 1; i <= nvpr + rint; i++) { gamma[i - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } // // Read in the maximum number of iterations sr.Reset(); maxit = int.Parse(sr.Next()); // Calculate lb lb = rint; for (i=1; i<=nrv; i++) { lb += levels[rvid[i-1]-1]; } if (svid != 0) { lb = lb*levels[svid-1]; } lb += fint; for (i = 1; i<=nfv; i++) { lb += Math.Max(levels[fvid[i-1]-1]-1,1); } double[] b = new double[lb]; double[] se = new double[lb]; // // Run the analysis tol = 0.00e0; warn = 0; G02.g02ja(n, ncol, dat, levels, yvid, cwid, nfv, fvid, fint, nrv, rvid, nvpr, vpr, rint, svid, gamma, out nff, out nrf, out df, out reml, b, se, maxit, tol, out warn, out ifail); // if (ifail == 0) { // Output results if (warn != 0) { Console.Write(" {0} {1}", "Warning: At least one variance component was ", "estimated to be negative and then reset to zero"); } Console.Write(" {0}", "Fixed effects (Estimate and Standard Deviation)"); Console.WriteLine(" "); k = 1; if (fint == 1) { Console.WriteLine(" {0}{1,10:f4}{2,10:f4}", "Intercept ", b[k - 1], se[k - 1]); k = k + 1; } for (i = 1; i <= nfv; i++) { for (j = 1; j <= levels[fvid[i - 1] - 1]; j++) { if ((levels[fvid[i - 1] - 1] != 1) && (j == 1)) { goto L40; } Console.WriteLine(" {0}{1,4}{2}{3,4}{4,10:f4}{5,10:f4}", "Variable", i, " Level", j, b[k - 1], se[k - 1]); k = k + 1; L40: ; } } // Console.WriteLine(" "); Console.WriteLine(" {0} {1}", "Random Effects (Estimate and Standard", " Deviation)"); if (svid == 0) { for (i = 1; i <= nrv; i++) { for (j = 1; j <= levels[rvid[i - 1] - 1]; j++) { Console.WriteLine(" {0}{1,4}{2}{3,4}{4,10:f4}{5,10:f4}", "Variable", i, " Level", j, b[k - 1], se[k - 1]); k = k + 1; } } } else { for (l = 1; l <= levels[svid - 1]; l++) { Console.Write(" {0}{1,4}", "Intercept for Subject Level", l); if (rint == 1) { Console.WriteLine(" {0,10:f4}{1,10:f4}", b[k - 1], se[k - 1]); k = k + 1; } for (i = 1; i <= nrv; i++) { for (j = 1; j <= levels[rvid[i - 1] - 1]; j++) { Console.WriteLine(" {0}{1,4}{2}{3,4}{4}{5,4}{6,10:f4}{7,10:f4}", "Subject Level", l, " Variable", i, " Level", j, b[k - 1], se[k - 1]); k = k + 1; } } } } // Console.WriteLine(" "); Console.WriteLine(" {0}", " Variance Components"); for (i = 1; i <= (nvpr + rint); i++) { Console.WriteLine(" {0,4}{1,10:f4}", i, gamma[i - 1]); } // Console.WriteLine(" {0}{1,10:f4}", "SIGMA^2 = ", gamma[nvpr + rint + 1 - 1]); Console.WriteLine(" {0}{1,10:f4}", "-2LOG LIKE = ", reml); Console.WriteLine(" {0} {1}", "DF = ", df); } else { Console.WriteLine(" "); Console.WriteLine("** g02ja failed with ifail = {0,5}", ifail); } L200: ; // } catch (Exception e) { Console.WriteLine(e.Message); Console.Write( "Exception Raised"); } } } }