int approxBehaviorLongitudinalData(const BehaviorLongitudinalData& r) { int size = sizeof(r); // lvalues, lvaluesLessMissings, lvaluesLessMissingStarts size += 3 * r.observationCount() * r.n() * sizeof(int); // lmissing, lstructural size += 2 * r.observationCount() * r.n() * sizeof(bool); // lobservedDistributions LOGF(Priority::DEBUG, "BehaviorLongitudinalData\t%s\t%d b", r.name().c_str(), size); return size; }
/** * Generates a chain connecting the original and simulated initial * observations of the given data object for the given period. * The chain is simple in the sense that no two ministeps cancel each other out. */ void Chain::createInitialStateDifferences() { deallocateVector(this->linitialStateDifferences); //Rprintf("******** %d create initial\n",this->linitialStateDifferences.size() ); Data * pData = this->lpData; State * initialState = this->lpInitialState; int period = this->lperiod; // Create the required ministeps for (unsigned variableIndex = 0; variableIndex < pData->rDependentVariableData().size(); variableIndex++) { LongitudinalData * pVariableData = pData->rDependentVariableData()[variableIndex]; NetworkLongitudinalData * pNetworkData = dynamic_cast<NetworkLongitudinalData *>(pVariableData); BehaviorLongitudinalData * pBehaviorData = dynamic_cast<BehaviorLongitudinalData *>(pVariableData); if (pNetworkData) { const Network * pNetwork1 = pNetworkData->pNetwork(period); const Network * pNetwork2 = initialState->pNetwork(pNetworkData->name()); for (int i = 0; i < pNetwork1->n(); i++) { IncidentTieIterator iter1 = pNetwork1->outTies(i); IncidentTieIterator iter2 = pNetwork2->outTies(i); while (iter1.valid() || iter2.valid()) { if (iter1.valid() && (!iter2.valid() || iter1.actor() < iter2.actor())) { if (!pNetworkData->structural(i, iter1.actor(), period) // || !pNetworkData->structural(i, iter1.actor(), // period + 1) ) { NetworkChange * pMiniStep = new NetworkChange(pNetworkData, i, iter1.actor(), false); // PrintValue(getMiniStepDF(*pMiniStep)); this->linitialStateDifferences. push_back(pMiniStep); iter1.next(); // PrintValue(getMiniStepDF( // *this->linitialStateDifferences.back())); } else { // create step in structural subchain? } } else if (iter2.valid() && (!iter1.valid() || iter2.actor() < iter1.actor())) { if (!pNetworkData->structural(i, iter2.actor(), period) // || !pNetworkData->structural(i, iter2.actor(), // period + 1) ) { this->linitialStateDifferences.push_back( new NetworkChange(pNetworkData, i, iter2.actor(), false)); iter2.next(); //PrintValue(getMiniStepDF( // *this->linitialStateDifferences.back())); } else { // create step in structural subchain? } } else { iter1.next(); iter2.next(); } } } } else if (pBehaviorData) { for (int i = 0; i < pBehaviorData->n(); i++) { int delta = initialState-> behaviorValues(pBehaviorData->name())[i] - pBehaviorData->value(period, i); int singleChange = 1; if (delta < 0) { delta = -delta; singleChange = -1; } for (int j = 0; j < delta; j++) { if (!pBehaviorData->structural(period, j) //|| !pBehaviorData->structural(period, j + 1) ) { this->linitialStateDifferences.push_back( new BehaviorChange(pBehaviorData, i, singleChange)); // Rprintf(" %d %d in beh\n", i, singleChange); } else { // create step in structural subchain? } } } } } // Rprintf("xx ********%d %d end create initial diff\n", this->linitialStateDifferences.size(), period); }