Вот мой вопрос дня:Перевести логистическую регрессию от SAS до R
На данный момент я учу себя Эконометрика и использования логистической регрессии. У меня есть код SAS, и я хочу быть уверен, что сначала понял это, прежде чем пытаться преобразовать его в R. (У меня нет и я не знаю SAS). В этом коде я хочу моделировать вероятность того, что один человек станет «безработным сотрудником». Под этим я подразумеваю «возраст» между 15 и 64, а «такт» = «без работы». Я хочу попытаться предсказать этот результат со следующими переменными: пол, возраст и idnat (номер национальности). (При прочих равных условиях). Код
SAS:
/* Unemployment rate : number of unemployment amongst the workforce */
proc logistic data=census;
class sex(ref="Man") age idnat(ref="spanish")/param=glm;
class tact (ref=first);
model tact = sex age idnat/link=logit;
where 15<=age<=64 and tact in ("Employee" "Jobless");
weight weight;
format age ageC. tact $activity. idnat $nat_dom. inat $nationalty. sex $M_W.;
lsmeans sex/obsmargins ilink;
lsmeans idnat/obsmargins ilink;
lsmeans age/obsmargins ilink;
run;
Это пример того, что база данных должна выглядеть так:
idnat sex age tact
[1,] "english" "Woman" "42" "Employee"
[2,] "french" "Woman" "31" "Jobless"
[3,] "spanish" "Woman" "19" "Employee"
[4,] "english" "Man" "45" "Jobless"
[5,] "english" "Man" "34" "Employee"
[6,] "spanish" "Woman" "25" "Employee"
[7,] "spanish" "Man" "39" "Jobless"
[8,] "spanish" "Woman" "44" "Jobless"
[9,] "spanish" "Man" "29" "Employee"
[10,] "spanish" "Man" "62" "Retired"
[11,] "spanish" "Man" "64" "Retired"
[12,] "english" "Woman" "53" "Jobless"
[13,] "english" "Man" "43" "Jobless"
[14,] "french" "Man" "61" "Retired"
[15,] "french" "Man" "50" "Employee"
Это своего рода результат я хочу получить:
Variable Modality Value ChiSq Indicator
Sex Women 56.6% 0.00001 -8.9%
Men 65.5%
Nationality
1:Spanish 62.6%
2:French 51.2% 0.00001 -11.4%
3:English 48.0% 0.00001 -14.6%
Age
<25yo 33.1% 0.00001 -44.9%
Ref:26<x<54yo 78.0%
55yo=< 48.7% 0.00001 -29.3%
(Я интерпретирую сказанное следующим образом: при прочих равных условиях у женщин есть вероятность -8.9% на работу против мужчин и тех, кто в возрасте 1 эссе, чем у 25, есть вероятность -44,9% от занятости, чем в возрасте от 26 до 54 лет).
Так что, если я хорошо понимаю, наилучшим подходом было бы использовать двоичную логистическую регрессию (link = logit). Это использует ссылки «мужчина против женщины» (секс), «сотрудник против безработных» (из переменной «такта») ... Предполагаю, что такт автоматически преобразуется в двоичную (0-1) переменную SAS.
Вот моя первая попытка в R. Я не проверить его еще (нужен мой собственный компьютер):
### before using multinom function
### change all predictors to factors and relevel
recens$sex <- relevel(factor(recens$sex), ref = "Man")
recens$idnat <- relevel(factor(recens$idnat), ref = "spanish")
recens$TACT <- relevel(factor(recens$TACT), ref = "employee")
### Calculations of the probabilities with function multinom,
### formatted variables, and conditions with subset
glm1 <- glm(TACT ~ sex + age + idnat, data=census,
+ weights = weight, subset=age[(15<=recens$age|recens$age<=64)] & TACT %in%
+ c("Employee","Jobless"), family=binomial())
Мои вопросы:
На данный момент, кажется, есть много функций провести логистическую регрессию в R, например glm
, которая, кажется, подходит.
Однако после посещения многих форумов, кажется, много людей рекомендует не пытается точно воспроизвести SAS PROC LOGISTIC
, в частности, функциональные LSMEANS
функции. Д-р Franck Harrel, (автор package:rms
) за один.
Это, я думаю, моя большая проблема LSMEANS
и ее варианты Obsmargins
и ILINK
. Даже после прочтения его описания несколько раз я не могу понять, как это работает.
До сих пор я понимаю, что он относится к структуре общей совокупности базы данных (т. Е. Расчеты выполняются с пропорциями общей совокупности). ILINK
, по-видимому, используется для получения прогнозируемого значения вероятности (уровень безработицы, уровень занятости) для каждого из предикторов (например, женщина, тогда мужчина), а не значение, найденное по (экспоненциальной) модели?
Вкратце, как это можно сделать через R, с rms
функциями, такими как lrm
?
Я действительно потерялся во всем этом. Если бы кто-то мог объяснить мне это лучше и сказать мне, если я на правильном пути, это сделает мой день.
Благодарим вас за помощь и извините за все ошибки, которые мой английский немного ржавый.
Бинь
Да, я переименовал свой пост. В моем примере это всего лишь двоичная регрессия. Я должен использовать многочлен для другого. Хотя моя проблема связана с LSMEANS. Хорошо спасибо за ваш комментарий. Я попробую Crossvalidated. – balour
Спасибо !! Борьба один час, чтобы узнать as.numeric (переменная) для представления в виде непрерывных данных. –
Если 'variable' был фактором, тогда было бы лучше использовать' as.numeric (as.character (variable)) ' –