Modellum demo · public dataset

What 66,000 OkCupid profiles say, analysed in Modellum

One do-file takes the Kirkegaard & Bjerrekær OkCupid release from raw CSV to cleaned variables, fifteen figures, two publication tables and about thirty tests and models. Every chart, table and block of output below is exactly what Modellum produced; nothing was redrawn.

68,371profiles imported
66,149men and women analysed
15figures, exported as themed SVG
under 10 sfor the whole script, start to finish
1 · The sample

Women on the site are younger, and far more often bisexual

Six in ten profiles are men (40,215 against 25,952; 198 users who gave another gender are too few to model and are set aside). Women's ages peak at 27–28 and fall away quickly; men's distribution is flatter and runs further into the forties.

Orientation differs sharply by sex: 14.7% of women describe themselves as bisexual against 2.4% of men, while men are more often gay (6.0% against 3.9%). A χ² test of independence gives χ²(2) = 3,635, which with this many people says little beyond "the gap is real"; the percentages are the finding.

Age of OkCupid usersOne-year bins, by sexMenWomen0.000.020.040.0620304050607080AgeDensity
Sexual orientation by sexMenWomen010K20K30KStraightGayBisexualUsers
Commands and output
describe, short
histogram age, width(1) over(female) title("Age of OkCupid users")
graph hbar (count) id, over(orient) over(female) title("Sexual orientation by sex") ytitle("Users")
tabulate orient female, column chi2
Output
. describe, short
Observations: 68371
   Variables: 102
Output
. tabulate orient female, column chi2
 orient \ female │     Men   Women   Total
─────────────────┼─────────────────────────
 Straight        │   36752   20980   57732
                 │   91.69   81.38   87.65
 Gay             │    2384    1008    3392
                 │    5.95    3.91    5.15
 Bisexual        │     949    3791    4740
                 │    2.37   14.71    7.20
─────────────────┼─────────────────────────
 Total           │   40085   25779   65864
                 │  100.00  100.00  100.00
Cells: frequency / column percentage
Pearson χ²(2) = 3635.1584, p = 0.000
VariableNMeanSDMinMax
Age6614931.657.7418.0078.00
Cognitive ability (z)546020.010.98-4.253.18
Uses drugs555320.100.300.001.00
Smokes at all548930.260.440.001.00
Happy with life519760.930.260.001.00
2 · Age preferences

Men's lower age limit follows "half your age plus seven" almost exactly

Every profile sets the youngest and oldest age they want to see. Averaged by own age, straight men's lower bound sits on the folk rule half your age plus seven from the mid-twenties to about 40, then drops below it. Women's lower bound stays above the rule until their late forties, and their upper bound climbs more steeply.

A regression with an age × sex interaction puts numbers on it. Each extra year of a man's age moves his oldest acceptable match up by 0.71 years; for a woman it moves by 1.01 years (0.712 + 0.296). The two lines cross at 30: a 20-year-old woman's upper limit is three years lower than a 20-year-old man's, and a 50-year-old woman's is six years higher.

The age range people will dateMean youngest and oldest acceptable match, straight users aged 18-50Youngest acceptableOldest acceptableHalf your age plus sevenSame ageMen2030405060702040Women2040Own ageAge of match
Oldest acceptable match by own agePredicted from regress lf_max_age c.age##i.femaleMenWomen30405060702030405060AgeOldest acceptable match
(1)(2)
YoungestOldest
Age0.399***0.712***
(0.002)(0.009)
Sex = Women1.174***-8.801***
(0.152)(0.464)
Age × Sex = Women0.099***0.296***
(0.005)(0.015)
Constant9.673***18.377***
(0.073)(0.295)
Observations5760757607
R²0.5740.263

Standard errors in parentheses · * p<0.05, ** p<0.01, *** p<0.001

Commands and output
preserve
keep if straight == 1 & age <= 50
collapse (mean) lf_min_age lf_max_age (count) n=id, by(age female)
generate rule = age/2 + 7
twoway (line lf_min_age age) (line lf_max_age age) (line rule age) (line same age), by(female)
restore
regress lf_max_age c.age##i.female if straight == 1 & age <= 60, robust
margins female, at(age=(20(5)60))
marginsplot
esttab min max using t_agepref.md, se label stats(N r2) mtitles("Youngest" "Oldest")
Output
. regress lf_max_age c.age##i.female if straight == 1 & age <= 60, robust
Linear regression (robust standard errors, HC1)
  Number of obs  =      57607
  F(3, 57603)    =    5062.30
  Prob > F       =     0.0000
  R-squared      =     0.2630
  Adj R-squared  =     0.2629
  Root MSE       =   10.03517
 lf_max_age   │  Coefficient    Std. err.       t  P>|t|  [95% conf.  interval]
──────────────┼─────────────────────────────────────────────────────────────────
 age          │    0.7120006  0.008730236   81.56  0.000   0.6948893  0.7291119
 female       │
   Men        │            0       (base)
   Women      │    -8.801149    0.4639304  -18.97  0.000   -9.710454  -7.891844
 c.age#female │
   Men        │            0       (base)
   Women      │    0.2962872   0.01503527   19.71  0.000    0.266818  0.3257563
 _cons        │     18.37712    0.2953961   62.21  0.000    17.79815    18.9561
Output
. margins female, at(age=(20(5)60))
Predictive margins
  Number of obs = 57607
  Model VCE: Robust
  Expression: Linear prediction, predict()
  1._at: age = 20
  2._at: age = 25
  3._at: age = 30
  4._at: age = 35
  5._at: age = 40
  6._at: age = 45
  7._at: age = 50
  8._at: age = 55
  9._at: age = 60
            │    Margin   Std. err.       z  P>|z|  [95% conf.  interval]
────────────┼─────────────────────────────────────────────────────────────
 _at#female │
   1#Men    │  32.61714   0.1291269  252.60  0.000    32.36405   32.87022
   1#Women  │  29.74173   0.1201129  247.61  0.000    29.50631   29.97715
   2#Men    │  36.17714  0.09249121  391.14  0.000    35.99586   36.35842
   2#Women  │  34.78317  0.06907248  503.57  0.000    34.64779   34.91855
   3#Men    │  39.73714  0.06516388  609.80  0.000    39.60942   39.86486
   3#Women  │  39.82461  0.05105895  779.97  0.000    39.72453   39.92468
   4#Men    │  43.29714  0.06122819  707.14  0.000    43.17714   43.41715
   4#Women  │  44.86605  0.08907937  503.66  0.000    44.69145   45.04064
   5#Men    │  46.85715   0.0840375  557.57  0.000    46.69244   47.02186
   5#Women  │  49.90749   0.1440672  346.42  0.000    49.62512   50.18985
   6#Men    │  50.41715   0.1191074  423.29  0.000     50.1837    50.6506
   6#Women  │  54.94892   0.2026517  271.15  0.000    54.55173   55.34611
   7#Men    │  53.97715   0.1584982  340.55  0.000     53.6665    54.2878
   7#Women  │  59.99036    0.262435  228.59  0.000      59.476   60.50473
   8#Men    │  57.53716   0.1996688  288.16  0.000    57.14581    57.9285
   8#Women  │   65.0318   0.3227518  201.49  0.000    64.39922   65.66438
   9#Men    │  61.09716   0.2417115  252.77  0.000    60.62341   61.57091
   9#Women  │  70.07324   0.3833502  182.79  0.000    69.32189   70.82459
Std. err. by the delta method
3 · Looks

Asked outright, men and women rate looks alike. Made to trade, men pick looks more often

OkCupid's best-known findings about attractiveness came from its own blog: how members rated each other's photos and whom they messaged. That data is not in this release, so those results can't be reproduced here. What the release does have is how users answered questions about looks. That shows what people say about attractiveness, which is a different thing from how they behave.

Asked how much physical attractiveness matters in a match, the sexes barely differ.

54% of straight men say "a lot", against 51% of straight women; almost nobody says "not at all" (about 1%). Gay men answer like straight men (53%), and lesbian women like straight women (50%). Only bisexual users stand out, at 38% of men and 42% of women. In a logit that adds age, education and quiz score, the straight women-versus-men gap is an odds ratio of 0.92, which does not survive a Bonferroni correction (p = 0.054), and gay men match straight men (p = 1.00).

Age matters more than sex. The predicted share saying "a lot" rises from 44% at 20 to 71% at 60 among straight men, with every group rising in parallel. Education goes the same way (PhD, law or medical degree: odds ratio 2.5 against high school), while a higher quiz score goes slightly the other way (OR 0.94 per SD).

Physical attractiveness matters 'a lot' in a matchShare of each group giving the strongest answerError bars: 95% confidence intervals0.00.10.20.30.40.5Straight menGay menBisexual menStraight womenLesbian womenBisexual womenShare answering 'A lot', 95% CI
Looks matter 'a lot', by agePredicted from a logit with education and quiz score at observed valuesStraight menGay menBisexual menStraight womenLesbian womenBisexual women0.30.40.50.60.72030405060AgePr(looks matter a lot)

The sex difference appears once looks have to compete with something else.

Asked to pick an ideal partner with two of attractive, smart and kind, 69% of straight men choose a pair that includes "attractive", against 49% of straight women. Half of the women choose "smart and kind" (χ²(2) = 810). Asked whether they'd rather date someone extremely hot or extremely honest, 30% of men and 18% of women take hot. 31% of men and 24% of women say no physical attraction is worse on a first date than having nothing to talk about.

Pick an ideal partner: two of attractive, smart, kindStraight users; shares of each sex choosing each pairAttractive and kindSmart and kindAttractive and smart0.00.10.20.30.40.5MenWomenSexShare choosing

Self-ratings track body type, sex and confidence.

Asked "Do you have the kind of body that's so hot it turns heads?", 27% of women and 15% of men say yes. Yet the sexes are equally content with their appearance: 30% and 28% say "very content". Body type dominates. Averaged over sex, age and confidence, 40% of fit or athletic users say yes, against about 6% of those who describe themselves as having a little extra or as full-figured. Self-rated confidence multiplies the odds ninefold from the bottom to the top category.

People who rate themselves highly also ask more of others. Among those who say their body turns heads, 71% say looks matter a lot in a match, against 45% of everyone else, a gap of 26 points (Welch t = 24).

69% vs 49%of straight men vs women pick a pair that includes "attractive"
54% vs 51%say looks matter "a lot", when asked directly
27% vs 15%of women vs men say their body turns heads
71% vs 45%looks matter "a lot": head-turners vs everyone else
'Do you have the kind of body that turns heads?'Share answering yes, by self-described body typeMenWomenError bars: 95% confidence intervals0.00.20.40.6ThinAverageFit/athleticCurvyA little extraFull figured/overweightShare answering yes, 95% CI
Commands and output
generate looks_lot = q122 == "A lot" if q122 != ""
graph hbar (mean) looks_lot, over(group) ci ytitle("Share answering 'A lot', 95% CI")
logit looks_lot i.group c.age i.educ CA, or vce(robust)
margins group
pwcompare group, mcompare(bonferroni) effects
margins group, at(age=(20(10)60))
marginsplot
graph bar (mean) ideal_ak ideal_sk ideal_as if straight == 1, over(female)
tabulate q82681 female if straight == 1, column chi2
graph hbar (mean) heads, over(body) over(female) ci
logit heads i.body i.female age i.conf, or vce(robust)
margins body
ttest looks_lot, by(heads) unequal
Output
. tabulate group q122, row chi2
 group \ q122   │  A little  A lot  Not at all   Total
────────────────┼──────────────────────────────────────
 Straight men   │      9240  11183         262   20685
                │     44.67  54.06        1.27  100.00
 Gay men        │       757    860          11    1628
                │     46.50  52.83        0.68  100.00
 Bisexual men   │       382    254          25     661
                │     57.79  38.43        3.78  100.00
 Straight women │      4666   5033         111    9810
                │     47.56  51.30        1.13  100.00
 Lesbian women  │       237    252          12     501
                │     47.31  50.30        2.40  100.00
 Bisexual women │      1177    902          64    2143
                │     54.92  42.09        2.99  100.00
────────────────┼──────────────────────────────────────
 Total          │     16459  18484         485   35428
                │     46.46  52.17        1.37  100.00
Cells: frequency / row percentage
Pearson χ²(10) = 234.2390, p = 0.000
Output
. logit looks_lot i.group c.age i.educ CA, or vce(robust)
Iteration 0:  Log pseudolikelihood = -20444.58
Iteration 1:  Log pseudolikelihood = -19955
Iteration 2:  Log pseudolikelihood = -19954.39
Iteration 3:  Log pseudolikelihood = -19954.39
Logistic regression
  Number of obs        =      29527
  Wald chi2(11)        =     911.59
  Prob > chi2          =     0.0000
  Pseudo R2            =     0.0240
  Log pseudolikelihood =  -19954.39
 looks_lot          │  Odds ratio   Std. err.       z  P>|z|  [95% conf.  interval]
────────────────────┼───────────────────────────────────────────────────────────────
 group              │
   Straight men     │           1      (base)
   Gay men          │   0.9721752  0.05497382   -0.50  0.618   0.8701847    1.08612
   Bisexual men     │   0.5526385  0.05067169   -6.47  0.000   0.4617363  0.6614366
   Straight women   │   0.9203947   0.0262294   -2.91  0.004   0.8703954  0.9732662
   Lesbian women    │   0.9006393  0.09230573   -1.02  0.307   0.7367362   1.101006
   Bisexual women   │   0.7172058  0.03813072   -6.25  0.000    0.646233  0.7959733
 age                │     1.02912  0.00174132   16.96  0.000    1.025713   1.032539
 educ               │
   High school      │           1      (base)
   Two-year college │    1.205092   0.0614949    3.66  0.000    1.090395   1.331853
   University       │    1.870494  0.07978544   14.68  0.000    1.720476   2.033594
   Masters          │    2.378339    0.119011   17.31  0.000    2.156155   2.623418
   PhD/law/med      │    2.537164   0.1572833   15.02  0.000    2.246885   2.864943
 CA                 │   0.9404137  0.01317209   -4.39  0.000    0.914948  0.9665882
 _cons              │   0.2528775  0.01794551  -19.37  0.000   0.2200414  0.2906135
_cons estimates baseline odds.
Output
. pwcompare group, mcompare(bonferroni) effects
Pairwise comparisons of marginal linear predictions

Margins: asbalanced
       │  Number of comparisons
───────┼────────────────────────
 group │                     15
                                    │     Contrast   Std. err.      z  P>|z|  [95% conf.    interval]
────────────────────────────────────┼─────────────────────────────────────────────────────────────────
 group                              │
   Gay men vs Straight men          │  -0.02821927  0.05654724  -0.50  1.000  -0.1941967    0.1377582
   Bisexual men vs Straight men     │   -0.5930512  0.09169049  -6.47  0.000  -0.8621811   -0.3239213
   Straight women vs Straight men   │  -0.08295264  0.02849799  -2.91  0.054  -0.1665999  0.000694658
   Lesbian women vs Straight men    │   -0.1046504   0.1024891  -1.02  1.000  -0.4054764    0.1961756
   Bisexual women vs Straight men   │   -0.3323924  0.05316566  -6.25  0.000  -0.4884442   -0.1763406
   Bisexual men vs Gay men          │   -0.5648319   0.1052818  -5.36  0.000  -0.8738551   -0.2558088
   Straight women vs Gay men        │  -0.05473337  0.05872992  -0.93  1.000  -0.2271174    0.1176507
   Lesbian women vs Gay men         │  -0.07643113   0.1146453  -0.67  1.000  -0.4129381    0.2600758
   Bisexual women vs Gay men        │   -0.3041732  0.07379711  -4.12  0.001  -0.5207824   -0.0875639
   Straight women vs Bisexual men   │    0.5100986  0.09311804   5.48  0.000   0.2367785    0.7834186
   Lesbian women vs Bisexual men    │    0.4884008   0.1354983   3.60  0.005  0.09068632    0.8861153
   Bisexual women vs Bisexual men   │    0.2606588   0.1030483   2.53  0.171  -0.0418085    0.5631261
   Lesbian women vs Straight women  │  -0.02169776   0.1034306  -0.21  1.000  -0.3252871    0.2818916
   Bisexual women vs Straight women │   -0.2494398  0.05465217  -4.56  0.000  -0.4098548  -0.08902476
   Bisexual women vs Lesbian women  │    -0.227742   0.1125519  -2.02  0.645  -0.5581042    0.1026202
Bonferroni p-values and confidence intervals
Output
. tabulate q82681 female if straight == 1, column chi2
 q82681 \ female               │     Men   Women   Total
───────────────────────────────┼─────────────────────────
 Someone attractive and kind.  │    5870    1726    7596
                               │   36.39   25.17   33.04
 Someone attractive and smart. │    5201    1622    6823
                               │   32.24   23.65   29.68
 Someone smart and kind.       │    5060    3510    8570
                               │   31.37   51.18   37.28
───────────────────────────────┼─────────────────────────
 Total                         │   16131    6858   22989
                               │  100.00  100.00  100.00
Cells: frequency / column percentage
Pearson χ²(2) = 809.7983, p = 0.000
Output
. tabulate hot_over_honest female if straight == 1, column chi2
 hot_over_honest \ female │     Men   Women   Total
──────────────────────────┼─────────────────────────
 0                        │    8598    3923   12521
                          │   69.76   81.97   73.18
 1                        │    3727     863    4590
                          │   30.24   18.03   26.82
──────────────────────────┼─────────────────────────
 Total                    │   12325    4786   17111
                          │  100.00  100.00  100.00
Cells: frequency / column percentage
Pearson χ²(1) = 261.7238, p = 0.000
Output
. tabulate heads female, column
 heads \ female │     Men   Women   Total
────────────────┼─────────────────────────
 0              │    8099    2635   10734
                │   84.68   73.13   81.52
 1              │    1465     968    2433
                │   15.32   26.87   18.48
────────────────┼─────────────────────────
 Total          │    9564    3603   13167
                │  100.00  100.00  100.00
Cells: frequency / column percentage
Output
. tabulate content female, column
 content \ female │     Men   Women   Total
──────────────────┼─────────────────────────
 0                │   12121    5449   17570
                  │   71.67   70.30   71.24
 1                │    4791    2302    7093
                  │   28.33   29.70   28.76
──────────────────┼─────────────────────────
 Total            │   16912    7751   24663
                  │  100.00  100.00  100.00
Cells: frequency / column percentage
Output
. logit heads i.body i.female age i.conf, or vce(robust)
Iteration 0:  Log pseudolikelihood = -5816.264
Iteration 1:  Log pseudolikelihood = -4732.488
Iteration 2:  Log pseudolikelihood = -4594.24
Iteration 3:  Log pseudolikelihood = -4589.556
Iteration 4:  Log pseudolikelihood = -4589.517
Iteration 5:  Log pseudolikelihood = -4589.517
Logistic regression
  Number of obs        =      12094
  Wald chi2(10)        =    1643.55
  Prob > chi2          =     0.0000
  Pseudo R2            =     0.2109
  Log pseudolikelihood =  -4589.517
 heads                     │  Odds ratio    Std. err.       z  P>|z|  [95% conf.  interval]
───────────────────────────┼────────────────────────────────────────────────────────────────
 body                      │
   Thin                    │           1       (base)
   Average                 │   0.4121328   0.03780567   -9.66  0.000   0.3443142  0.4933094
   Fit/athletic            │    2.536982    0.2189867   10.79  0.000    2.142118   3.004631
   Curvy                   │   0.4909325   0.05644689   -6.19  0.000   0.3918786   0.615024
   A little extra          │   0.1731905   0.02529134  -12.01  0.000   0.1300833  0.2305827
   Full figured/overweight │   0.1782385    0.0259695  -11.84  0.000   0.1339618  0.2371496
 female                    │
   Men                     │           1       (base)
   Women                   │    4.090828    0.2818711   20.45  0.000     3.57405   4.682326
 age                       │   0.9920237  0.003535409   -2.25  0.025   0.9851186  0.9989773
 conf                      │
   Below average           │           1       (base)
   Average                 │    1.743161    0.3084339    3.14  0.002    1.232328   2.465748
   Above average           │    4.024077    0.7099315    7.89  0.000    2.847715   5.686382
   Very, very high         │    9.071116     1.710475   11.69  0.000    6.268387   13.12701
 _cons                     │  0.08439687    0.0182126  -11.46  0.000  0.05528909  0.1288289
_cons estimates baseline odds.
Output
. margins body
Predictive margins
  Number of obs = 12094
  Model VCE: Robust
  Expression: Pr(heads), predict()
                           │      Margin    Std. err.      z  P>|z|  [95% conf.   interval]
───────────────────────────┼────────────────────────────────────────────────────────────────
 body                      │
   Thin                    │    0.228099   0.01163014  19.61  0.000   0.2053043   0.2508937
   Average                 │   0.1174521  0.005117421  22.95  0.000   0.1074222   0.1274821
   Fit/athletic            │   0.3997541  0.009073012  44.06  0.000   0.3819713   0.4175368
   Curvy                   │   0.1350664  0.008934374  15.12  0.000   0.1175553   0.1525774
   A little extra          │  0.05587284  0.006314341   8.85  0.000  0.04349696  0.06824872
   Full figured/overweight │  0.05733101  0.006289558   9.12  0.000   0.0450037  0.06965831
Std. err. by the delta method
Output
. ttest looks_lot, by(heads) unequal
 Group │    Obs        Mean    Std. err.  Std. dev.  [95% conf.   interval]
───────┼────────────────────────────────────────────────────────────────────
 0     │  10333   0.4511758  0.004895503  0.4976346   0.4415797    0.460772
 1     │   2354   0.7068819  0.009383909  0.4552888   0.6884803   0.7252835
───────┼────────────────────────────────────────────────────────────────────
 diff  │         -0.2557061   0.01058412             -0.2764573  -0.2349548
 diff = mean(0) - mean(1)   H0: diff = 0   (Welch's unequal variances)
 t = -24.1594   df = 3744.911
 Ha: diff != 0   Pr(|T| > |t|) = 0.0000
 95% CI for diff: [-0.2764573, -0.2349548]
4 · The quiz score

Quiz scores rise with every step of education

OkCupid users could answer optional logic and general-knowledge questions ("A bat and a ball cost $1.10…"). The dataset's authors combined 14 of them into an item-response score, CA, standardised to mean 0 and SD 1. These analyses keep the 25,800 users who answered at least five items, so a single lucky guess does not decide a score.

Mean scores climb from 0.15 SD for high school to 0.87 SD for PhD, law and medical degrees. A one-way ANOVA gives F(4, 22238) = 505, and education accounts for about 8% of the variance (η² = 693 / 8,317). Every pair of levels differs after a Bonferroni correction. The violins show the overlap behind those means: plenty of high-school users outscore the median PhD.

Men and women score almost the same: 0.563 against 0.547, a difference of 0.016 SD (Welch t = 2.02, p = 0.043). That is statistically detectable and practically nothing.

Cognitive ability by educationUsers who answered at least 5 of the 14 quiz items−1012High schoolTwo-year collegeUniversityMastersPhD/law/medEducationCognitive ability (z)
Commands and output
violin CA if CA_items >= 5, over(educ)
oneway CA educ if CA_items >= 5, tabulate bonferroni
ttest CA if CA_items >= 5, by(female) unequal
Output
. oneway CA educ if CA_items >= 5, tabulate bonferroni
 educ             │       Mean  Std. dev.  Freq.
──────────────────┼──────────────────────────────
 High school      │  0.1546323  0.6598714   1711
 Two-year college │  0.3136005  0.6240558   2482
 University       │  0.5914098   0.583716  12432
 Masters          │  0.7106928  0.5541139   3870
 PhD/law/med      │   0.865289  0.5296752   1748
──────────────────┼──────────────────────────────
 Total            │  0.5690889   0.611518  22243
 Source         │        SS     df         MS       F  Prob > F
────────────────┼───────────────────────────────────────────────
 Between groups │  693.0702      4   173.2676  505.37    0.0000
 Within groups  │  7624.421  22238  0.3428555
────────────────┼───────────────────────────────────────────────
 Total          │  8317.492  22242  0.3739543
Bartlett's equal-variances test: chi2(4) = 129.8243  Prob>chi2 = 0.000
Comparison of CA by educ (Bonferroni)
 Row Mean − Col Mean │  High school  Two-year college  University    Masters
─────────────────────┼───────────────────────────────────────────────────────
 Two-year college    │    0.1589682
                     │        0.000
 University          │    0.4367774         0.2778092
                     │        0.000             0.000
 Masters             │    0.5560604         0.3970922    0.119283
                     │        0.000             0.000       0.000
 PhD/law/med         │    0.7106567         0.5516885   0.2738792  0.1545962
                     │        0.000             0.000       0.000      0.000
Output
. ttest CA if CA_items >= 5, by(female) unequal
 Group │    Obs       Mean    Std. err.  Std. dev.   [95% conf.   interval]
───────┼────────────────────────────────────────────────────────────────────
 Men   │  18125  0.5630749  0.004633503  0.6238044    0.5539928    0.572157
 Women │   7684  0.5467307  0.006629388  0.5811218    0.5337353   0.5597261
───────┼────────────────────────────────────────────────────────────────────
 diff  │         0.0163442  0.008088148             0.000490485  0.03219793
 diff = mean(Men) - mean(Women)   H0: diff = 0   (Welch's unequal variances)
 t = 2.0208   df = 15459.02
 Ha: diff != 0   Pr(|T| > |t|) = 0.0433
 95% CI for diff: [0.000490485, 0.03219793]
5 · A regression

Holding education fixed, religion and astrology still predict lower scores

Raw differences between groups can just reflect education. A regression with education, a quadratic in age, sex, religion, attitude to astrology and drug use (robust standard errors, n = 11,730) separates them.

Users who call themselves Christian score 0.29 SD below the non-religious with the same education, age and sex; "other" religions score 0.16 SD lower, and the Jewish difference is small and not significant. Religion as a whole: F(3, 11716) = 173. Taking astrology seriously costs 0.17 SD and finding it "fun to think about" 0.11 SD. Drug use predicts nothing. The model explains 13.5% of the variance, so most of the spread in scores is left unexplained.

Cognitive ability by view of astrologyError bars: 95% confidence intervals0.00.10.20.30.40.50.6Doesn't matterFun to think aboutMatters a lotAstrologyMean CA (z), 95% CI
What predicts the quiz score?OLS with robust SEs, 95% CIs; reference: high school, men, no religion, astrology doesn't matter−0.20.00.20.40.6Education = Two-year colle…Education = UniversityEducation = MastersEducation = PhD/law/medSex = WomenReligion = ChristianReligion = JewishReligion = OtherAstrology = Fun to think ab…Astrology = Matters a lotUses drugsCoefficient
(1)
Cognitive ability (z)
Education = Two-year college0.125***
(0.026)
Education = University0.366***
(0.021)
Education = Masters0.493***
(0.024)
Education = PhD/law/med0.591***
(0.028)
Age0.009*
(0.004)
Age × Age-0.000**
(0.000)
Sex = Women-0.048***
(0.012)
Religion = Christian-0.289***
(0.013)
Religion = Jewish-0.039
(0.031)
Religion = Other-0.157***
(0.016)
Astrology = Fun to think about-0.106***
(0.011)
Astrology = Matters a lot-0.167***
(0.047)
Uses drugs-0.007
(0.016)
Constant0.281***
(0.084)
Observations11730
R²0.135
Adjusted R²0.134

Standard errors in parentheses · * p<0.05, ** p<0.01, *** p<0.001

Commands and output
regress CA i.educ age c.age#c.age i.female i.relig i.astro drugs if CA_items >= 5, robust
estimates store ca
testparm i.relig
coefplot ca, drop(age c.age#c.age)
esttab ca using t_ca.md, se label stats(N r2 r2_a)
Output
. regress CA i.educ age c.age#c.age i.female i.relig i.astro drugs if CA_items >= 5, robust
Linear regression (robust standard errors, HC1)
  Number of obs  =      11730
  F(13, 11716)   =     141.13
  Prob > F       =     0.0000
  R-squared      =     0.1346
  Adj R-squared  =     0.1336
  Root MSE       =  0.5755358
 CA                   │   Coefficient    Std. err.       t  P>|t|    [95% conf.     interval]
──────────────────────┼───────────────────────────────────────────────────────────────────────
 educ                 │
   High school        │             0       (base)
   Two-year college   │     0.1250237   0.02571699    4.86  0.000    0.07461414     0.1754333
   University         │     0.3662955   0.02138491   17.13  0.000     0.3243775     0.4082135
   Masters            │     0.4932102    0.0238594   20.67  0.000     0.4464418     0.5399786
   PhD/law/med        │     0.5906267   0.02754201   21.44  0.000     0.5366397     0.6446136
 age                  │   0.009438505  0.004435627    2.13  0.033   0.000743937    0.01813307
 c.age#c.age          │  -0.000180159  0.000058778   -3.07  0.002  -0.000295374  -0.000064945
 female               │
   Men                │             0       (base)
   Women              │   -0.04792732   0.01227933   -3.90  0.000   -0.07199685   -0.02385778
 relig                │
   None               │             0       (base)
   Christian          │     -0.289195   0.01288499  -22.44  0.000    -0.3144518    -0.2639383
   Jewish             │   -0.03878197   0.03080385   -1.26  0.208   -0.09916264     0.0215987
   Other              │    -0.1569917   0.01587994   -9.89  0.000     -0.188119    -0.1258644
 astro                │
   Doesn't matter     │             0       (base)
   Fun to think about │    -0.1058413   0.01134514   -9.33  0.000    -0.1280797   -0.08360294
   Matters a lot      │    -0.1665359   0.04704935   -3.54  0.000    -0.2587604   -0.07431131
 drugs                │  -0.007258054   0.01624946   -0.45  0.655    -0.0391097    0.02459359
 _cons                │     0.2805039   0.08387093    3.34  0.001     0.1161029     0.4449049
Output
. testparm i.relig
 ( 1)  2.relig = 0
 ( 2)  3.relig = 0
 ( 3)  4.relig = 0

         F(3, 11716) =   173.09
            Prob > F =   0.0000
6 · A logit

Drug use falls with age, faster for women, and travels with smoking and drinking

About one profile in ten (9.7%) admits to using drugs "sometimes" or "often". A logit with age × sex, religion, education, smoking and drinking (robust SEs, n = 29,264) gives the probabilities below, averaged over everyone's other characteristics.

At 20, women are slightly more likely than men to report drug use (17.0% against 15.4%); by 60 the order has reversed and the gap has opened (2.4% against 5.0%). Average marginal effects put the other predictors on the same scale of percentage points:

+12.4points for smokers (odds ratio 4.4)
+17.5points for drinking often or more, against not at all
−12.4points for Christians, against the non-religious
−0.37points per year of age
Probability of reporting drug usePredicted from a logit with religion, education, smoking and drinking at observed valuesMenWomen0.050.100.152030405060AgePr(uses drugs)
Commands and output
logit drugs c.age##i.female i.relig i.educ smokes i.drinks, or vce(robust)
margins, dydx(*)
margins female, at(age=(20(5)60))
marginsplot
Output
. logit drugs c.age##i.female i.relig i.educ smokes i.drinks, or vce(robust)
Iteration 0:  Log pseudolikelihood = -10413.32
Iteration 1:  Log pseudolikelihood = -8851.576
Iteration 2:  Log pseudolikelihood = -8318.502
Iteration 3:  Log pseudolikelihood = -8298.558
Iteration 4:  Log pseudolikelihood = -8298.28
Iteration 5:  Log pseudolikelihood = -8298.28
Logistic regression
  Number of obs        =      29264
  Wald chi2(14)        =    3276.75
  Prob > chi2          =     0.0000
  Pseudo R2            =     0.2031
  Log pseudolikelihood =   -8298.28
 drugs              │  Odds ratio    Std. err.       z  P>|z|  [95% conf.  interval]
────────────────────┼────────────────────────────────────────────────────────────────
 age                │   0.9647647  0.003806372   -9.09  0.000   0.9573331   0.972254
 female             │
   Men              │           1       (base)
   Women            │    1.847743    0.4124893    2.75  0.006    1.192943   2.861959
 c.age#female       │
   Men              │           1       (base)
   Women            │   0.9764501   0.00747076   -3.11  0.002   0.9619169  0.9912029
 relig              │
   None             │           1       (base)
   Christian        │   0.1672393   0.01047341  -28.56  0.000   0.1479216  0.1890798
   Jewish           │   0.6824262   0.07249457   -3.60  0.000    0.554156  0.8403871
   Other            │    0.807959   0.04142519   -4.16  0.000   0.7307133  0.8933705
 educ               │
   High school      │           1       (base)
   Two-year college │   0.9777654   0.08565392   -0.26  0.797   0.8235082   1.160918
   University       │    1.154862   0.08201312    2.03  0.043    1.004805   1.327329
   Masters          │   0.9502724   0.08177349   -0.59  0.553   0.8027863   1.124854
   PhD/law/med      │   0.8158277    0.0917734   -1.81  0.070   0.6544038   1.017071
 smokes             │    4.441906    0.1888845   35.07  0.000    4.086707   4.827978
 drinks             │
   Not at all       │           1       (base)
   Rarely           │    1.897697    0.2295233    5.30  0.000    1.497185    2.40535
   Socially         │    2.814954    0.3081651    9.45  0.000    2.271363   3.488638
   Often+           │     7.45449    0.8806386   17.00  0.000    5.913723    9.39669
 _cons              │    0.127534   0.02272245  -11.56  0.000   0.0899434  0.1808351
_cons estimates baseline odds.
Output
. margins, dydx(*)
Average marginal effects
  Number of obs = 29264
  Model VCE: Robust
  Expression: Pr(drugs), predict()
  dy/dx wrt:  age female relig educ smokes drinks
                    │         dy/dx       Std. err.       z  P>|z|    [95% conf.     interval]
────────────────────┼──────────────────────────────────────────────────────────────────────────
 age                │  -0.003744958     0.000287236  -13.04  0.000  -0.004307931  -0.003181986
 female             │
   Men              │             0  (base outcome)
   Women            │  -0.008406421     0.003625999   -2.32  0.020   -0.01551325  -0.001299593
 relig              │
   None             │             0  (base outcome)
   Christian        │    -0.1242219     0.003681377  -33.74  0.000    -0.1314372    -0.1170065
   Jewish           │   -0.03987303      0.01008636   -3.95  0.000   -0.05964193   -0.02010413
   Other            │   -0.02332039     0.005467523   -4.27  0.000   -0.03403654   -0.01260424
 educ               │
   High school      │             0  (base outcome)
   Two-year college │  -0.001803774     0.007032111   -0.26  0.798   -0.01558646    0.01197891
   University       │     0.0121093     0.005800358    2.09  0.037   0.000740806    0.02347779
   Masters          │  -0.004058352     0.006868523   -0.59  0.555   -0.01752041   0.009403706
   PhD/law/med      │   -0.01549601     0.008433451   -1.84  0.066   -0.03202527   0.001033249
 smokes             │     0.1242128     0.003376169   36.79  0.000     0.1175956       0.13083
 drinks             │
   Not at all       │             0  (base outcome)
   Rarely           │    0.03436385     0.005881907    5.84  0.000    0.02283552    0.04589218
   Socially         │    0.06450967      0.00495835   13.01  0.000    0.05479148    0.07422785
   Often+           │     0.1749104     0.008563761   20.42  0.000     0.1581257      0.191695
Std. err. by the delta method
7 · Scales

OkCupid's six sex-and-romance traits are close to a single dimension

OkCupid scored users on traits such as "pure", "kinky" and "old-fashioned" from their answers. Only a user's most distinctive traits were published, so each score is missing for most people; the 3,037 users who have all six give the correlations below.

The six scores sort into two camps that mirror each other: pure, old-fashioned and love-driven against kinky, sex-driven and adventurous, with correlations between 0.64 and 0.83 in size. The first principal component carries 80% of the variance, sampling adequacy is high (KMO = 0.91), and once alpha reverses the first three items the scale's Cronbach's α is 0.91. In practice it is one measure under six names, partly because the traits are scored from overlapping questions.

Correlations among six OkCupid trait scoresUsers with all six scoresr10−1PureOld-fashi…Love-driv…KinkySex driveAdventur…PureOld-fashionedLove-drivenKinkySex driveAdventurous1.000.800.69−0.80−0.83−0.790.801.000.71−0.76−0.79−0.730.690.711.00−0.66−0.81−0.64−0.80−0.76−0.661.000.830.77−0.83−0.79−0.810.831.000.76−0.79−0.73−0.640.770.761.00
Commands and output
label variable p_pure "Pure"
…
local traits p_pure p_oldfash p_lovedri p_kinky p_sexdrive p_adven
corrplot `traits'
pca `traits'
estat kmo
alpha `traits', item
Output
. pca `traits'
Principal components/correlation                Number of obs    =      3037
                                                Number of comp.  =         6
                                                Trace            =         6
    Rotation: (unrotated = principal)           Rho              =    1.0000
 Component │  Eigenvalue  Difference  Proportion  Cumulative
───────────┼─────────────────────────────────────────────────
 Comp1     │     4.79404     4.38284      0.7990      0.7990
 Comp2     │     0.41119     0.15679      0.0685      0.8675
 Comp3     │     0.25440     0.01655      0.0424      0.9099
 Comp4     │     0.23785     0.05327      0.0396      0.9496
 Comp5     │     0.18458     0.06662      0.0308      0.9803
 Comp6     │     0.11795                  0.0197      1.0000
Principal components (eigenvectors)
 Variable   │    Comp1    Comp2    Comp3    Comp4    Comp5    Comp6
────────────┼───────────────────────────────────────────────────────
 p_pure     │  -0.4189  -0.2180   0.1627  -0.0821   0.8055   0.3082
 p_oldfash  │  -0.4077   0.0128   0.8251   0.2022  -0.3266  -0.0730
 p_lovedri  │  -0.3821   0.8015  -0.2319   0.1655  -0.0547   0.3569
 p_kinky    │   0.4110   0.2934   0.1892   0.6383   0.4439  -0.3237
 p_sexdrive │   0.4286  -0.1767   0.1641   0.2694  -0.1427   0.8156
 p_adven    │   0.3996   0.4389   0.4198  -0.6671   0.1553   0.0481
Output
. estat kmo
Kaiser-Meyer-Olkin measure of sampling adequacy
 Variable   │     kmo
────────────┼─────────
 p_pure     │  0.9184
 p_oldfash  │  0.9432
 p_lovedri  │  0.8915
 p_kinky    │  0.9202
 p_sexdrive │  0.8700
 p_adven    │  0.9441
────────────┼─────────
 Overall    │  0.9132
Output
. alpha `traits', item
Test scale = mean(unstandardized items)
Reversed items:  p_pure p_oldfash p_lovedri

 Item       │    Obs  Sign  item-test corr.  item-rest corr.  average interitem covariance   alpha
────────────┼──────────────────────────────────────────────────────────────────────────────────────
 p_pure     │  29676     -           0.8873           0.8292                   1248.899284  0.8862
 p_oldfash  │  29469     -           0.8372           0.7680                   1352.166182  0.8960
 p_lovedri  │  25913     -           0.7135           0.5985                   1452.855460  0.9178
 p_kinky    │  26311     +           0.8238           0.7340                   1298.221337  0.9004
 p_sexdrive │  31067     +           0.9268           0.8861                   1192.039227  0.8772
 p_adven    │  26395     +           0.8146           0.7260                   1326.606543  0.9012
────────────┼──────────────────────────────────────────────────────────────────────────────────────
 Test scale │                                                                  1311.798006  0.9127
8 · Two questions

Cat people score higher on the quiz, and confidence goes with happiness

Asked "Are you a cat person or a dog person?", 42% say both, 37% dogs, 14% cats and 7% neither. Cat people average 0.13 SD higher on the quiz than dog people (Bonferroni p < 0.001). It is a real difference in this sample, small next to education's.

92.5% of those who answered say they are happy with their life. Among users who rate their self-confidence below average, only 55% do; at average confidence it is 91%, and above that it levels off near 97%. In a logit with sex, age and quiz score, women are more likely to say yes (odds ratio 1.51), and the quiz score has no relation to happiness (OR 1.006, p = 0.75).

Cognitive ability: cat people vs dog peopleError bars: 95% confidence intervals0.00.10.20.30.40.50.6CatsDogsBothNeitherCat or dog personMean CA (z), 95% CI
Happy with life, by self-rated confidenceMenWomenError bars: 95% confidence intervals0.00.20.40.60.81.0Below averageAverageAbove averageVery, very highSelf-confidenceShare answering yes, 95% CI
Commands and output
tabulate pet female, column chi2
oneway CA pet if CA_items >= 5, tabulate bonferroni
tabulate conf happy, row chi2
logit happy i.conf i.female age CA, or
margins conf
Output
. oneway CA pet if CA_items >= 5, tabulate bonferroni
 pet     │       Mean  Std. dev.  Freq.
─────────┼──────────────────────────────
 Cats    │  0.6323886  0.6035928   4089
 Dogs    │   0.498872  0.6124877   8253
 Both    │  0.5554508  0.6102644  11022
 Neither │  0.5710525  0.6224471   1750
─────────┼──────────────────────────────
 Total   │  0.5504718  0.6123782  25114
 Source         │        SS     df         MS      F  Prob > F
────────────────┼──────────────────────────────────────────────
 Between groups │  50.42707      3   16.80902  45.06    0.0000
 Within groups  │  9367.126  25110  0.3730437
────────────────┼──────────────────────────────────────────────
 Total          │  9417.553  25113  0.3750071
Bartlett's equal-variances test: chi2(3) = 2.5493  Prob>chi2 = 0.466
Comparison of CA by pet (Bonferroni)
 Row Mean − Col Mean │         Cats        Dogs        Both
─────────────────────┼──────────────────────────────────────
 Dogs                │   -0.1335166
                     │        0.000
 Both                │  -0.07693776  0.05657882
                     │        0.000       0.000
 Neither             │  -0.06133612  0.07218046  0.01560165
                     │        0.003       0.000       1.000
Output
. logit happy i.conf i.female age CA, or
Iteration 0:  Log likelihood = -12453.44
Iteration 1:  Log likelihood = -11197.34
Iteration 2:  Log likelihood = -10999.99
Iteration 3:  Log likelihood = -10993.71
Iteration 4:  Log likelihood = -10993.7
Logistic regression
  Number of obs        =      46122
  LR chi2(6)           =    2919.48
  Prob > chi2          =     0.0000
  Pseudo R2            =     0.1172
  Log likelihood       =   -10993.7
 happy             │  Odds ratio    Std. err.      z  P>|z|  [95% conf.  interval]
───────────────────┼───────────────────────────────────────────────────────────────
 conf              │
   Below average   │           1       (base)
   Average         │    8.437301    0.4504091  39.95  0.000    7.599129   9.367923
   Above average   │    25.01532     1.536644  52.41  0.000    22.17779   28.21589
   Very, very high │    27.35296     2.619894  34.55  0.000    22.67124   33.00147
 female            │
   Men             │           1       (base)
   Women           │    1.509544   0.06212166  10.01  0.000    1.392568   1.636345
 age               │   0.9944086  0.002471642  -2.26  0.024    0.989576  0.9992647
 CA                │    1.006084   0.01945378   0.31  0.754   0.9686689   1.044945
 _cons             │    1.173691    0.1079108   1.74  0.082   0.9801513   1.405447
_cons estimates baseline odds.
Output
. margins conf
Predictive margins
  Number of obs = 46122
  Model VCE: OIM
  Expression: Pr(happy), predict()
                   │     Margin    Std. err.       z  P>|z|  [95% conf.  interval]
───────────────────┼───────────────────────────────────────────────────────────────
 conf              │
   Below average   │  0.5325544   0.01165382   45.70  0.000   0.5097133  0.5553955
   Average         │  0.9043891  0.002138192  422.97  0.000   0.9001983  0.9085799
   Above average   │  0.9654872  0.001274116  757.77  0.000   0.9629899  0.9679844
   Very, very high │  0.9683398  0.002535105  381.97  0.000   0.9633711  0.9733085
Std. err. by the delta method