Can't set options on form ajax callback
I recently answered a question similar to this over at stack.  

Basically, you should be doing all the form building and manipulation in the form builder function. The ajax callback function in your case should just return the form element.  

This is because when the ajax is fired, just before the ajax callback function is executed, the form is rebuilt and the form building function is executed again (this time with a different form_state which will include the ajax elements current state)(I think).

So you would have something similar to:

$form['module']['cities'] = array(
    '#type' =&gt; 'radios',
    '#title' =&gt; t('City'),
    '#ajax' =&gt; array(
        'event' =&gt; 'change',
        'wrapper' =&gt; 'sector-wrapper',
        'callback' =&gt; 'module_field_city_change_ajax_callback',
        'method' =&gt; 'replace',
    ),
    '#options' =&gt; array("1" =&gt; "New York", "2" =&gt; "Moscow"),
    '#required' =&gt; TRUE,
);

  // Check if a city is selected and set sectors
  //something like this.

  // $sectors = array("Sport"=&gt;"Sport", "Media"=&gt;"Media");
  // if(city is selected){
  //   $sectors = array ('Aerospace' =&gt; 'Aerospace', 'Art' =&gt; 'Art' );
  // }

  // you should be able to check if a vocabulary is selected by checking the
  // $form_state['values'] or $form_state['input'] (I forget which)

$form['module']['sectors'] = array(
    '#type' =&gt; 'radios',
    '#title' =&gt; t('Sectors'),
    '#prefix' =&gt; '&lt;div id="sector-wrapper"&gt;',
    '#suffix' =&gt; '&lt;/div&gt;',
    '#options' =&gt; $sectors,
    '#required' =&gt; TRUE,
);


ajax callback

function module_field_city_change_ajax_callback($form, $form_state){
    return $form['module']['sectors'];
)