2016-10-06 13 views
2

Возможно, ответ на мой вопрос тривиален, но я не нашел правильного ответа.Рассчитать процент/частоту значения объекта съемки в r

У меня есть национальный опрос, состоящий из многих переменных, как этого (ради простоты я пропущенного некоторые переменных):

year id y.b sex income married pens weight 
2002 1 1950 F 100000  1  0  1.12 
2002 2 1943 M 55000  1  1  0.55 
2004 1 1950 F 88000  1  1  1.1 
2004 2 1943 M 66000  1  1  0.6 
2006 3 1966 M 12000  0  1  0.23 
2008 3 1966 M 24000  0  1  0.23 
2008 4 1972 F 33000  1  0  0.66 
2010 4 1972 F 35000  1  0  0.67 

Где идентификатор является опрашиваемым, иттербий года рождения, женат является манекеном (1 женатый, 0 сингл), ручки - это манекен, который принимает значение один, если человек инвестирует в дополнительную пенсионную форму; вес - весовые коэффициенты.

Учтите, что первоначальное обследование составлено до 40 тыс. Наблюдений с 2002 по 2014 год (я отфильтровал его, чтобы иметь только отдельных лиц, которые появляются более одного раза). Я использую эту команду, чтобы создать обзорную объект:

d.s <- svydesign(ids=~1, data=df, weights=~weight) 

Теперь, когда ФР взвешивается я хочу найти, например, процент женщин, или процент от женатого человека, что инвестировать в дополнительной пенсии; Я читал в R-справочной системе и в Интернете, чтобы найти команду, чтобы получить процент, но я не нашел правильный.

Заранее спасибо.

+0

Так что процент 'число женщин, которые вкладывают капитал в дополнительной пенсии/общего число женщин ", правильно? То же самое для женатых людей. Какой у вас код до сих пор? – blacksite

+1

Right @not_a_robot. Я использовал ** svytable (~ woman + obs, d.s) **, где obs - общее количество наблюдений (я создал переменную общность с последовательностью чисел от 1 до конца); Я также использовал ** svymean (~ woman, d.s) ** и ** svyratio (~ donna, ~ obs, d.s) **, но я не получил то, что мне было нужно. –

ответ

2
# same setup 
library(survey) 

df <- data.frame(sex = c('F', 'M', 'F', 'M', 'M', 'M', 'F', 'F'), 
       married = c(1,1,1,1,0,0,1,1), 
       pens = c(0, 1, 1, 1, 1, 1, 0, 0), 
       weight = c(1.12, 0.55, 1.1, 0.6, 0.23, 0.23, 0.66, 0.67)) 

d.s <- svydesign(ids=~1, data=df, weights=~weight) 

# subset to women only then calculate the share with a pension 
svymean(~ pens , subset(d.s , sex == 'F')) 
+0

благодарю вас за ответ. На самом деле это проще! –

+0

На самом деле он правильный. – StasK

0

Я не знаю точно, что вы хотите сделать с weight, но вот очень простое решение для доли женщин с пенсией в dplyr:

df <- data.frame(sex = c('F', 'M', 'F', 'M', 'M', 'M', 'F', 'F'), 
       married = c(1,1,1,1,0,0,1,1), 
       pens = c(0, 1, 1, 1, 1, 1, 0, 0), 
       weight = c(1.12, 0.55, 1.1, 0.6, 0.23, 0.23, 0.66, 0.67)) 

d.s <- svydesign(ids=~1, data=df, weights=~weight) 

# data frame of women with a pension 
women_with_pension <- d.s$variables %>% 
    filter(sex == 'F' & pens == 1) 

# number of rows (i.e. number of women with a pension) in that df 
n_women_with_pension <- nrow(women_with_pension) 

# data frame of all women 
all_women <- d.s$variables %>% 
    filter(sex == 'F') 

# number of rows (i.e. number of women) in that df 
n_women <- nrow(all_women) 

# divide the number of women with a pension by the total number of women 
proportion_women_with_pension <- n_women_with_pension/n_women 

Это даст вам основная доля женщин с пенсией. Примените эту же логику, чтобы получить процент замужних людей, имеющих пенсию.

Что касается переменной weight, вы пытаетесь сделать взвешенную пропорцию? В этом случае, вы бы суммировать weight значения для женщин в каждом классе (с пенсии и всех женщин), как это:

# data frame of women with a pension 
women_with_pension <- d.s$variables %>% 
    filter(sex == 'F' & pens == 1) %>% 
    summarise(total_weight = sum(weight)) 

# number of rows (i.e. number of women with a pension) in that df 
women_with_pension_weight = women_with_pension[[1]] 

# data frame of all women 
all_women <- d.s$variables %>% 
    filter(sex == 'F') %>% 
    summarise(total_weight = sum(weight)) 

# number of rows (i.e. number of women) in that df 
all_women_weight <- all_women[[1]] 

# divide the number of women with a pension by the total number of women 
# 0.3098592 for this sample data 
prop_weight_women_with_pension <- women_with_pension_weight/all_women_weight 
+1

спасибо, ты ответ, это тот, который я искал. Я хотел использовать вес, чтобы иметь правильное представление выборки (поскольку опрос проводится по образцу с использованием весов обследования, он должен иметь лучшее представление о целом населении). –

+1

@LauraR. я ниспровергаю, потому что эта стратегия взлома в объекты съемки абсурдна. и не позволяет пользователям рассчитывать доверительные интервалы. см. мой ответ –