I'm using the ANES dataset, which is a repeated cross-sectional study of public opinion and knowledge. I am trying to predict knowledge by individual level characteristics. The data is organized by year, and each respondent is grouped by age into an age cohort.

Essentially, I am trying to run multiple multinomial regression models (the knowledge question has 3 levels: correct, incorrect, and don't know), but I want predictions specific to year the questions were asked and the cohort the respondent belongs to.

Basically, for each year and each `cohort = multinom(knowledge ~ gender + education +...)`

I have 8 years and 8 cohorts. I tried to do a for loop within a for loop, but for whatever reason it is not working. I tried:

`for(i in 1:length(year)){ for(j in 1:length(cohort)){ model <- multinom(knowledge ~ gender + education + income) } } `

Can someone help me figure out what I'm doing wrong, please? Right now, all this does is give me coefficients for the same year and cohort 100 times…

**Contents**hide

#### Best Answer

There are several problems in the code. First, you never refer to the loop variables `i`

and `j`

. You just run the same model multiple times. Second, you have to store the objects returned by the `multinom`

function. Currently, the result is overwritten in each run. You can store multiple objects in a list.

The following code is based on the assumption that your data frame is named `dat`

:

`fitlist <- list() # create a list for(i in unique(dat$year)){ for(j in unique(dat$cohort)){ fitlist <- append(fitlist, multinom(knowledge ~ gender + education + income, data = dat[dat$year == i & dat$cohort == j, ])) } } `

Here, `data = dat[dat$year == i & dat$cohort == j, ]`

creates a subset of the data frame including `year`

`i`

and `cohort`

`j`

. The command `append`

adds an object to the list.

*Edit*:

The following code includes error handling:

`fitlist <- list() for(i in unique(dat$year)){ for(j in unique(dat$cohort)){ tmp <- try(append(fitlist, multinom(knowledge ~ gender + education + income, data = dat[dat$year == i & dat$cohort == j, ]))) if (class(tmp) != "try-error") fitlist <- append(fitlist, tmp) } } `

### Similar Posts:

- Solved – Examining trends with interactions and with stratification – obtaining discordant results
- Solved – Interpreting a negative intercept in linear regression
- Solved – R : using survey package to run t-test on sub population of weighted data set
- Solved – R : using survey package to run t-test on sub population of weighted data set
- Solved – Improving a logistic regression model in R