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.
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.
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
. describe, short Observations: 68371 Variables: 102
. 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
| Variable | N | Mean | SD | Min | Max |
|---|---|---|---|---|---|
| Age | 66149 | 31.65 | 7.74 | 18.00 | 78.00 |
| Cognitive ability (z) | 54602 | 0.01 | 0.98 | -4.25 | 3.18 |
| Uses drugs | 55532 | 0.10 | 0.30 | 0.00 | 1.00 |
| Smokes at all | 54893 | 0.26 | 0.44 | 0.00 | 1.00 |
| Happy with life | 51976 | 0.93 | 0.26 | 0.00 | 1.00 |
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.
| (1) | (2) | |
|---|---|---|
| Youngest | Oldest | |
| Age | 0.399*** | 0.712*** |
| (0.002) | (0.009) | |
| Sex = Women | 1.174*** | -8.801*** |
| (0.152) | (0.464) | |
| Age × Sex = Women | 0.099*** | 0.296*** |
| (0.005) | (0.015) | |
| Constant | 9.673*** | 18.377*** |
| (0.073) | (0.295) | |
| Observations | 57607 | 57607 |
| R² | 0.574 | 0.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")
. 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
. 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
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).
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.
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).
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
. 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
. 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.
. 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
. 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
. 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
. 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
. 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
. 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.
. 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
. 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]
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.
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
. 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
. 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]
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.
| (1) | |
|---|---|
| Cognitive ability (z) | |
| Education = Two-year college | 0.125*** |
| (0.026) | |
| Education = University | 0.366*** |
| (0.021) | |
| Education = Masters | 0.493*** |
| (0.024) | |
| Education = PhD/law/med | 0.591*** |
| (0.028) | |
| Age | 0.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) | |
| Constant | 0.281*** |
| (0.084) | |
| Observations | 11730 |
| 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)
. 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
. testparm i.relig
( 1) 2.relig = 0
( 2) 3.relig = 0
( 3) 4.relig = 0
F(3, 11716) = 173.09
Prob > F = 0.0000
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:
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
. 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.
. 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
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.
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
. 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
. 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
. 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
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).
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
. 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
. 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.
. 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